[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイル作成マクロの修正(別件)』(さや)
昨日投稿した件は解決したのですが、また別件で問題があり、どなたか教えてください。
マクロを実行すると、互換性チェックというウィンドウが出てくるので、
ActiveWorkbook.SaveAs nName, xlNormal
を
ActiveWorkbook.CheckCompatibility = False
にしたら、互換性チェック画面も出ることなく終了できました。
これについて何か懸念点がないかどうか教えていただけないでしょうか?
'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
因みに、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
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
手動でファイルをxlsxで作成すると問題なく開けます。
開かないのはマクロでファイルを作った時だけです。
なんかややこしいんですかね。
今、色々調べているんですが、まだ原因が分かりません。。
(さや) 2017/04/23(日) 16:21
問題無いですか。 でしたらその手順をマクロ記録して、記録されたマクロを実行するとどうですか?
(sy) 2017/04/23(日) 16:25
(マナ) 2017/04/23(日) 16:48
ただ、今度はなぜかリンクした式も拾ってしまいます。
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
を入れているのが効いていないのでしょうか。
'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
本件の不具合に関して私は2013使っててそう言う現象に遭遇した事がありません。 2007や2010は殆ど触った事も無いのでネットで見かける似たような不具合の情報しか知りません。
マナさんやカリーニンさんの方が詳しそうなので、詳しくない私が出しゃばると余計ややこしくさせそうなので、 途中退場で申し訳ありませんがここで降りさせて頂きます。
(sy) 2017/04/23(日) 17:27
そのリンクがセルの数式なのかしりませんが、
マクロブックをxlsmファイルに変換してから
マクロを実行するとどうなりますか。
(マナ) 2017/04/23(日) 18:22
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
(さや) 2017/04/25(火) 20:32
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.