- ベストアンサー
Excel VBAで確認なしで上書き保存
起動中のBookでファイル名が Data.xlsのものを閉じたいと思いますが、 上書き確認メッセージを出さないように oExcel.DisplayAlerts = False を設定すると エラーになります。 CreateObject で作成した場合は、DisplayAlerts が使えるようですが、 すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい のでしょうか? Sub UnloadFile() Dim myBook2 As Workbook Dim myBook1 As Workbook For Each myBook2 In Workbooks If myBook2.Name = "Data.xls" Then Set myBook1 = myBook2 myBook1.SaveAs myBook1.FullName myBook1.Close End If Next myBook2 Set myBook1 = Nothing End Sub
- オフィス系ソフト
- 回答数7
- ありがとう数6
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>保存しないで myBook1.Close だけしたいときはどうするのでしょうか? >この場合は Application.DisplayAlerts = False でいいということになるのでしょうか? myBook1.Close True でよいのでは?
その他の回答 (6)
- KenKen_SP
- ベストアンサー率62% (785/1258)
補足しておきます。 >何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。 真に何も変更が加わっていない場合は、保存確認のメッセージは表示されないはずです。 それにも関わらず、メッセージが表示されるのは、なんらかの変更が加わったためでしょう。 例えば、TODAY関数などブックを開いた時点で再計算を行う関数が使われている場合、人の手による直接の変更がなくとも、EXCELは「変更あり」とします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
>この場合は Application.DisplayAlerts = False でいいということになるのでしょうか? 保存しない場合があるのであれば、その通りです。 ブックを閉じるCloseメソッドの直前に Application.DisplayAlerts = False を入れ、閉じたあとに、 Application.DisplayAlerts = True として元に戻してやります。
- KenKen_SP
- ベストアンサー率62% (785/1258)
#1です。補足しておきます。 > oExcel.DisplayAlerts = False この文法は間違っています。DisplayAlerts プロパティーは Application オブジェクトのプロパティーですから、ワークシートに対して設定するものではありません。 > If myBook2.Name = "Data.xls" Then この行でブックを特定する時点で「上書き保存」であることが特定できるのですから、SaveAs メソッドを使う必要がありませんし、ファイル名を指定する必要もありません。オリジナルコードを尊重し、Save メソッドが適当だと思います。 また、「上書き保存」の場合は DisplayAlerts プロパティーを操作する必要もないと思います。(アラートが表示されないので) したがって、#1の回答となっています。
補足
ご回答ありがとうございます。 保存しないで myBook1.Close だけしたいときはどうするのでしょうか? 何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。 この場合は Application.DisplayAlerts = False でいいということになるのでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
通常は、こういうコードでよいわけですが、 '--------------------------- Dim myBook2 As Workbook For Each myBook2 In Workbooks If myBook2.Name = "Data.xls" Then Application.DisplayAlerts = False myBook2.Save 'As myBook2.FullName 'でも可能 myBook2.Close Application.DisplayAlerts = True End If Next myBook2 '--------------------------- >CreateObject で作成した場合は、DisplayAlerts が使えるようですが、 >すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい >のでしょうか? CreateObject という話が出てくることは、Excelからではないのですか? 外部のVBAやVBから、という意味でしょうか? もし、そうなら、この方法は違いますね。 エラーは、どのようなメッセージでしょうか?
お礼
勘違いでした。 myBook1.DisplayAlerts = False ってやると 実行時エラー 438 このオブジェクトは、このプロパティーまたはメソッドをサポートしていません。 となりますね。
補足
#1,#2,#3さんの方法でOKでした。ありがとうございました。 >エラーは、どのようなメッセージでしょうか? エラーでなくて確認メッセージですね。
- surounin
- ベストアンサー率28% (30/106)
自身はありませんが^^; 私は Application.DisplayAlerts = False でやってます
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 やりたいことは、上書き保存ですよね? myBook1.SaveAs myBook1.FullName を myBook1.Save に変更してみてください。
関連するQ&A
- VBAでの疑問
以下のようなコードを見ました。 Private Sub Workbook_BeforeClose(Cancel As Boolean) With ThisWorkbook Application.DisplayAlerts = False If .Name <> .FullName Then SaveAs Else Me.Saved = True End If Application.DisplayAlerts = True End With End Sub これは何のためのコードでしょうか? If .Name <> .FullName Then って、パスなしのBOOK名とパス付BOOK名が同じじゃないのは当然で、同じになるのは新規に作成したばかりで保存する前のファイルくらいしか思いつきません。これでは必ず上書きされてしまうと思いますが、どういう意図が考えられるのかお分かりの方教えていただけないでしょうか?
- ベストアンサー
- Excel(エクセル)
- エクセルVBAでBOOKに読み取りパスワード設定
エクセル2013です。 以下のコードで指定した任意のフォルダ内のエクセルに読み取りパスワードを設定できました。 しかし、そのフォルダの下にサブフォルダーがあった場合にサブフォルダ内のBOOKは対象になりません。どのように直せばサブフォルダも対象にできるようになるでしょうか?教えてください。 Sub TEST01() Dim myfdr As String, fname As String Dim mb As Workbook, wb As Workbook Dim n As Long With Application.FileDialog(msoFileDialogFolderPicker) '対象とするフォルダの指定 If .Show = True Then myfdr = .SelectedItems(1) Else MsgBox "キャンセルします。" Exit Sub End If End With Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 fname = Dir(myfdr & "\*.xls*") 'フォルダ内のExcelブックを検索 n = 2 Do Until fname = Empty '全て検索 Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 With mb.Sheets("Sheet1") '転記 .Cells(n, "B").Value = wb.FullName .Cells(n, "C").Value = wb.Sheets(1).Range("B1").Value End With n = n + 1 'カウント Application.DisplayAlerts = False wb.SaveAs Filename:=wb.FullName, Password:="emaxemax" wb.Close Application.DisplayAlerts = True fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す MsgBox n - 2 & "件処理しましました。" End Sub
- ベストアンサー
- Excel(エクセル)
- Excel VBA で困っています。
Excel VBA で困っています。 下記のプログラムで、「名前を付けて保存」→「キャンセル」 を選択した場合のエラーは回避できたのですが、 「名前を付けて保存」→「保存」→「同じ名前のファイルが既に ありますが置き換えますか?」→「いいえ(またはキャンセル)」 の時にエラーが出てしまいます。 どう直したら良いでしょうか。 よろしくお願いいたします。 Public Sub SaveBook() Dim myBook As Variant '「名前を付けて保存」ダイアログ myBook = Application.GetSaveAsFilename("test.xls", _ "Excelファイル,*.xls", , "Excelブックを保存") 'キャンセル時の処理 If StrConv(myBook, vbUpperCase) = "FALSE" Then Exit Sub 'ブックの保存 ActiveWorkbook.SaveAs Filename:=myBook End Sub
- ベストアンサー
- Visual Basic
- VBAのオブジェクト変数について
人に教えなければいけないことなので、、、 困っています。 あるVBAのテキストを見て、そのテキストをそのまま入力しても実行できません。 (条件としては、Book1.xlsとBook2.xlsというファイルを開いた状態で、Book1.xlsのほうに、以下のモジュールを入力します。) Sub Set1() Dim myBook As Workbook Dim mySheet As Worksheet Dim myCell As Range Set myWBook = Workbooks("Book2.xls") Set myWSheet = Worksheets("Sheet2") Set myCell = Range("A1:D10") myWBook.Activate myWSheet.Activate myCell.Value = "ABC" End Sub これを実行すると、アクティブな状態のファイルにしか、値"ABC"が入ってこないのです。テキストでは、Book2.xlsのSheet2のA1:D10に値"ABC"が入ってくると言っていますが、Book1.xlsに値が入ってしまったりします。 長くなってしまってすみません。 もちろん、他の方法で実現することができるのはわかるのですが、なぜこのコードが実行できないのかがわかりません。 理由を教えていただけたら・・・と思います。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセル VBA シート保存ボタン
Sheet上にボタンを作成 ボタンを押すと保存するようにしています! 以前ここでSheet2枚をコピー出来るような 記述教えてもらったのですが・・ 1枚ならどう変化して良いか・・ 記述を書きましたが 何処が違うか教えて下さい! Private Sub CommandButton1_Click() Dim FileName As String Dim FileExt As String Dim BkName As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "ko" ' Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName = OldWkbook.Sheets(StName1).Range("A1").Value FileName = BkName & Format(Now, "yyyy-mm") & ".XLS" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If ' OldWkbook.Sheets(Array(StName1)).Copy Set NewWkbook = ActiveWorkbook For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count NewWkbook.Sheets(1).Shapes(wIx).Delete Next NewWkbook.Sheets(1).Name = StName1 ' FileName = "D:\保存\計画\" & FileName ' If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If ' NewWkbook.Close savechanges:=False Application.DisplayAlerts = True End Sub 教えて下さい!
- ベストアンサー
- オフィス系ソフト
- ワークシートを上書き保存したい
Excel2003でマクロ初心者です。 以下のコードでシートを上書き保存したいのですが 次々と複写され、上書きされません。どうコードをかえたらよろしいでしょうか。 Private Sub CommandButton10_Click() Dim wb As Workbook On Error Resume Next '開いて作業中の場合。 Set wb = Workbooks("最新表.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\表の保存箱\最新表.xls") End If Worksheets("確定").Copy after:=Workbooks("21年計算01.xls").Sheets("総括表") 'Workbooks("最新表.xls").Close End Sub 最新表.xlsは文字通り、最新ですので常に上書きしたいのです。
- ベストアンサー
- Visual Basic
- EXCEL 別シートのコピー(3)
こんにちは。 こちらで以前こちらで質問をさせていただき、EXCELの別ブックのシートからコピーをしています。 元のブックのコピーを作り、そこに入力してもらい、元のブックにコピーをしています。(同じフォルダに入れて) Private Sub CommandButton1_Click() Dim myBook As Workbook Set myBook = Workbooks.Open(ThisWorkbook.Path & "\コピー元ブック.xls") with workbooks("コピー元ブック.xls").worksheets("シート名").usedrange workbooks("貼り付け先ブック.xls").worksheets("シート名").range(.address).value = .value end with end sub ここでブックがない場合、そのブックを飛ばしてあるブックだけコピーしたい場合は、どうしたらいいでしょうか。いろいろやってみましたが、コピーできませんでした。 教えてください。
- ベストアンサー
- オフィス系ソフト
- VBA 簡潔なコードを書くために
現在、下記のようなコード書いて利用しています。 このコードを他の人がに転用する時に、指定箇所さえ書き換えれば簡単に転用できる!と言うようにしたいのです。 例えば >Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName) >Set Copydata = SH1.Range("Z1").Resize(100, 1) といった指定するような箇所(" "で囲った所)を先にまとめて定義しておくにはどう記述したらよいのでしょうか。 宜しくお願いします。 ------------------------------------------------------------- Private Sub 読込ボタン_Click() '他のBookからデータを転記するマクロ Dim SH2 As Worksheet, SH1 As Worksheet Dim GYO As Range, Copydata As Range Dim myDir As String, myName As String, myBook As Workbook Set SH2 = ThisWorkbook.Worksheets("情報シート") '集計用のBookがあるフォルダ名を指定(このBookを格納している場所) myDir = ThisWorkbook.Path '他Bookのファイル名を指定(*.xls) myName = Dir(myDir & "\" & "*.xls") Do While myName <> "" 'このBook以外を対象 If myName <> ThisWorkbook.Name Then '転記先[情報シート]の最終行を取得 Set GYO = SH2.Range("A65536").End(xlUp).Offset(1) '他のBookを開いて変数に格納 Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName) '転記元を取得(Z列1行を基点に100行コピー) Set SH1 = myBook.Worksheets("回答内容") Set Copydata = SH1.Range("Z1").Resize(100, 1) '転記先の最終次行に転記(行列入替で貼付) Copydata.Copy GYO.PasteSpecial Paste:=xlPasteValues, Transpose:=True '開いた他Bookを閉じる myBook.Close End If myName = Dir() Loop End Sub -------------------------------------------------------------
- ベストアンサー
- Visual Basic
- VBAでExcelのOLE Objectの取得方法
過去のプログラムを確認していたところ、以下のモジュールがありました。 EXCELファイルを開き、この後省略していますが、書式設定だの、罫線だのを 変えるコーディングが続きます。 ここで質問ですが、Set OEXCEL…のところで「CreateObject」と「GetObject」を 使い分けていますがこれはどういう意味でしょうか? ご教授お願いします。 Dim OEXCEL As Object Dim stXls As String stAcXObj=0 ・・・INIファイルで値を持ちます。 If stAcXObj = "0" Then '参照作成 Set OEXCEL = CreateObject("Excel.Application") Else '参照取得 Set OXLS = GetObject("C:\aaa.xls") Set OEXCEL = OXLS.Application End If OEXCEL.workbooks.Open ("C:\aaa.xls")
- ベストアンサー
- その他(プログラミング・開発)
- 上書き保存されない
saveメソッドを使用しているのですが、上書きされないのです。 最初に名前をつけて保存で保存し、処理の最後にブック名を変数にして、saveで上書き保存しているのですが、なぜか教えてください。 Dim wb集計 As Workbook ActiveWorkbook.SaveAs Filename:="c:\集計.xls" 集計 = "集計.xls" Set wb集計 = Workbooks(集計) ~割愛~ wb集計.Save
- 締切済み
- Visual Basic
お礼
ありがとうございました。 それもOKでした。