[[20170423132805]] 『ファイル作成マクロの修正(別件)』(さや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル作成マクロの修正(別件)』(さや)

昨日投稿した件は解決したのですが、また別件で問題があり、どなたか教えてください。
マクロを実行すると、互換性チェックというウィンドウが出てくるので、

ActiveWorkbook.SaveAs nName, xlNormal

ActiveWorkbook.CheckCompatibility = False
にしたら、互換性チェック画面も出ることなく終了できました。
これについて何か懸念点がないかどうか教えていただけないでしょうか?


Sub 名前を付けて保存()
 'NAMEを"名前を付けて保存"
     Dim 既定ファイル名 As String
     Dim 保存ファイル名 As Variant
     Dim v1 As Variant
     Dim v2 As Variant
     Dim nName As String

     既定ファイル名 = Sheets("NAME").Range("H1")
     保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名, "Excel ブック(*.xls),*.xls")
     If 保存ファイル名 = False Then
        MsgBox "保存は中止されました"
     Else
        v1 = Split(保存ファイル名, "\")
        v2 = Split(v1(UBound(v1)), ".")
        ReDim Preserve v1(LBound(v1) To UBound(v1) - 1)
        With ThisWorkbook.Sheets("NAME")
            nName = Join(v1, "\") & "\" & .Parent.Sheets("NAME").Range("H1").Value & ".xls"
            .Copy
            ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
            ActiveWorkbook.SaveAs nName, xlNormal
            ActiveWorkbook.Close False
            Application.Goto .Range("H1")
            MsgBox "新規ファイルを作成しました"
        End With
     End If
 End Sub


< 使用 Excel:Excel2010、使用 OS:Windows7 >


 こんにちわ。

 互換性チェックと言うのはxlsのような2003以前の形式で保存する時に、
 2007以降でしか使えない機能などがあった場合は、その機能は保存されず次に開いた時におかしな事になってるかも知れませんよ。
 と言う警告です。
 必ずしもその機能が失われるわけではありませんが、失われておかしな書式などになると言うケースもあります。

 警告を出なくする事そのものに問題がある訳では無く、xlsと言う古い形式で保存する事に問題があるので、
 2007以降のxlsx形式で保存すれば、そもそも警告は出ません。

 共有で使用して他のPCが2003以前だとか、配布するので配布先が2003を使用しているなどの理由でも無い限り、
 xlsx形式で保存する事を強くお勧めします。

(sy) 2017/04/23(日) 14:13


(sy)さん、ありがとうございます。
そういう事なのですね。。把握しておらず失礼しました。

因みに、xlsx形式で保存するように、上のマクロの「xls」を「xlsx」に置換したのですが、それでも名前を保存の画面でxlsで出てきてしまいます。
xlsx形式で保存するにはどこを修正すればいいのかご教示頂けないでしょうか?
(さや) 2017/04/23(日) 14:33


 既存のファイルがxlsなんじゃないですか?

 なのでダイアログを出した時も既存のファイルの拡張子が優先されているのかと。

 1つは、ダイアログ上でxlsxに選びなおすか、

 もしくは、ダイアログで選択した拡張子を無視して、
 nName = Join(v1, "\") & "\" & .Parent.Sheets("NAME").Range("H1").Value & ".xlsx"
 とすれば、選んだ拡張子に関係なく保存する時にxlsxで保存されます。

 ただこれダイアログ出す必要あるんですか?
 NAMEシートのH1セルの名前でファイル名にして保存するだけですよね?
 後は保存先が決まってるなら直接保存した方が早くないですか?

 と思ってたら前の質問でマナさんも同じ指摘をされてますね。
 ダイアログは止めてElse以降の直接保存する部分だけのコードにした方が良いと思います。

(sy) 2017/04/23(日) 14:51


何度もすみません。

拡張子をxlsxで指定してファイルを作成するのですが、完成したファイルを開こうとすると「ファイル形式またはファイル拡張子が正しくありません」と出て、ファイルが開けません。

マクロの中のコードがxls形式のコードだったりするのでしょうか。。

因みに、xls形式で保存するとファイルは開けます。

(さや) 2017/04/23(日) 15:44


横から失礼します。参考HPです。
ファイル形式のリンクもご参照下さい。

https://excwlvba.blogspot.jp/2013/04/workbooksaveas.html?m=1
(カリーニン) 2017/04/23(日) 16:03


 あっ!これは2007と2010のややこしいやつかも?

 2007や2010は殆ど使った事無いから詳しくは無いんですけど、
 マクロでなく手動で同じようにシートコピーしてそのファイルをxlsxで保存したらどうなりますか?

(sy) 2017/04/23(日) 16:10


(sy)さん

手動でファイルをxlsxで作成すると問題なく開けます。
開かないのはマクロでファイルを作った時だけです。

なんかややこしいんですかね。
今、色々調べているんですが、まだ原因が分かりません。。

(さや) 2017/04/23(日) 16:21


 問題無いですか。
 でしたらその手順をマクロ記録して、記録されたマクロを実行するとどうですか?

(sy) 2017/04/23(日) 16:25


マクロ記録して、そのマクロを実行しました。ファイルは開けました。
(さや) 2017/04/23(日) 16:34

このテストからわかることは、やはりマクロコードの問題ってことでしょうか?
(さや) 2017/04/23(日) 16:36

カリーニンさんの引用先は確認しましたか?
これと同じでしょうか。
https://social.msdn.microsoft.com/Forums/ja-JP/071b14a8-df8e-469a-a5a7-c4594dfd0790/xlsx?forum=vbajp

(マナ) 2017/04/23(日) 16:48


ありがとうございます。
カリーニンさんの引用を確認し、
'ActiveWorkbook.SaveAs nName, xlNormal

ActiveWorkbook.SaveAs nName, xlWorkbookDefault
にしたら、xlsxで保存し、ファイルも無事開けました。

ただ、今度はなぜかリンクした式も拾ってしまいます。
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
を入れているのが効いていないのでしょうか。


Sub 名前を付けて保存()
 'NAMEを"名前を付けて保存"
     Dim 既定ファイル名 As String
     Dim 保存ファイル名 As Variant
     Dim v1 As Variant
     Dim v2 As Variant
     Dim nName As String

     既定ファイル名 = Sheets("NAME").Range("H1")
     保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名, "Excel ブック(*.xlsx),*.xlsx")
     If 保存ファイル名 = False Then
        MsgBox "保存は中止されました"
     Else
        v1 = Split(保存ファイル名, "\")
        v2 = Split(v1(UBound(v1)), ".")
        ReDim Preserve v1(LBound(v1) To UBound(v1) - 1)
        With ThisWorkbook.Sheets("NAME")
            nName = Join(v1, "\") & "\" & .Parent.Sheets("NAME").Range("H1").Value & ".xlsx"
            .Copy
            ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
            'ActiveWorkbook.SaveAs nName, xlNormal
            ActiveWorkbook.SaveAs nName, xlWorkbookDefault
            ActiveWorkbook.Close False
            Application.Goto .Range("H1")
            MsgBox "新規ファイルを作成しました"
        End With
     End If
 End Sub


(さや) 2017/04/23(日) 17:20

 本件の不具合に関して私は2013使っててそう言う現象に遭遇した事がありません。
 2007や2010は殆ど触った事も無いのでネットで見かける似たような不具合の情報しか知りません。

 マナさんやカリーニンさんの方が詳しそうなので、詳しくない私が出しゃばると余計ややこしくさせそうなので、
 途中退場で申し訳ありませんがここで降りさせて頂きます。

(sy) 2017/04/23(日) 17:27


いえ、わたしも全然わかっていないです。
ただ検索しただけ。

そのリンクがセルの数式なのかしりませんが、
マクロブックをxlsmファイルに変換してから
マクロを実行するとどうなりますか。

(マナ) 2017/04/23(日) 18:22


マナさん、マクロのブックは初めからxlsmなのです。

syさん、ありがとうございます。助かりました。

(さや) 2017/04/23(日) 18:32


で、どういったリンクなのでしょうか。

それと、マクロの記録で問題ないのなら、そのコードを組み込んでみるという発想はないのでしょうか?

(マナ) 2017/04/23(日) 19:29


はい、そのマクロ記録を使用しようとも思ったんですが、リンク式がついてきてしまいお聞きしています。
無知ですみません。

リンクは外部ファイルのリンクで、マクロブックをリンクしてしまいます。
マクロブックには色々な式が入っているので、それを外すように
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
が入っていたと思いますが、
ActiveWorkbook.SaveAs nName, xlWorkbookDefault
に変えてから、何故かマクロブックをリンクしてしまうのです。。

(さや) 2017/04/23(日) 20:20


すみません。分かりました!
名前の定義におかしなリンクが入っていたのが原因だったようです。
それを削除したら問題なくなりました。

お騒がせしてすみませんでした。
また、みなさん助けていただきありがとうございました!!
(さや) 2017/04/23(日) 20:48


度々すみません。

ようやくダイアログの話になるのですが、また他力本願だと思われそうですが、
Application.GetSaveAsFilename
がダイアログ表示させるコードなのは分かったのですが、マナさんが参考に貼って下ったリンク先のコードを
どうやって入れていいのか分かりません。

どなたかダイアログを表示させずにフォルダ指定してファイルを保存するように変更すべきところを教えていただけないでしょうか。

(さや) 2017/04/23(日) 21:41


現在のコードをほとんど理解できていませんよね。
だから、ムダも多いし、ちぐはぐなコードになっていても気づいていないのでは。
ダイアログ表示の目的も、コードをみただけでは、わからないのです。

マクロで何をしたいのか、言葉で一から説明していただけますか。
わたしは、長文は苦手なので
短文で箇条書き形式で説明してもらえるとうれしいです。

(マナ) 2017/04/24(月) 20:41


マナさん

すみません。仰る通りです。

ブックの中にあるNAMEというシートをxlsm形式の別ファイルに保存したい。
(1)NAMEシートの中には関数や入力規則が設定してある。
(2)別ファイルで保存するファイルには元のファイルをリンクせず(式や入力規則を外し)、全て値で貼り付けたい。
(3)別ファイルで保存するファイル名はH1のセル内容をファイル名にする。
(4)別ファイルで保存する先はドライブを指定できるようにする。

上記になります。
よろしくお願いいたします。

(さや) 2017/04/25(火) 19:54


以下について教えてください。

1)xlsxの間違いですか?

 > xlsm形式の別ファイルに保存したい。

2)マクロはどうやって実行するのですか。ボタンをクリック?

(マナ) 2017/04/25(火) 20:19


すみません。
(1)はxlsxの間違いです。
(2)マクロはボタンをクリックです。

(さや) 2017/04/25(火) 20:32


NAMEシートにボタンを作って、下記マクロを登録してください

 Option Explicit

 Sub test()
     Dim fd As FileDialog
     Dim ws As Worksheet
     Dim fname As String

    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = False Then Exit Sub

    Set ws = ActiveSheet

    fname = ws.Range("H1").Value
    If fname = "" Then MsgBox "H1にファイル名を入力してください": Exit Sub

    ws.Copy
    With ActiveSheet
        .UsedRange.Value = .UsedRange.Value
        .UsedRange.Validation.Delete
        .DrawingObjects.Delete
        .Parent.SaveAs fd.SelectedItems(1) & "\" & fname & ".xlsx"
    End With

 End Sub

(マナ) 2017/04/25(火) 20:56


マナさん

ありがとうございました。
動きも早くすっきりしたマクロですね。

今回は本当にご迷惑をおかけしました。

マクロ、ちゃんと勉強します。。
(さや) 2017/04/25(火) 21:07


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.