• 締切済み

他のブックに現在のデータを日付をつけて保存したい

WinXP Excel2003でマクロを作っている超初心者です。90%完成しましたが、次のことで止まっています。 1)Aブックのユーザーホームに、BコマンドボタンとCコマンドボタンがあります。    Aブック→Bコマンドボタン→Bブック開く→入力→Aブックのコマンドボタンで保存        →Cコマンドボタン→Cブック開く→入力→Aブックのコマンドボタンで保存 2)Aブックのコマンドボタンからではなく、エクセルを起動し、Bブックを開き、「今日の日付をつけて新規ブックに保存」のマクロを作りました。 コードは次のとおりでした。 Sub ブック名に現在の日付を付加して保存GH() 'Windows環境なのでEnviron関数を使ってみる Dim strFileName As String Dim strSavePath As String Dim intRe As Integer Application.DisplayAlerts = False ActiveWorkbook.Save strSavePath = Environ("HOMEPATH") strSavePath = strSavePath & "\デスクトップ\総務\請求\データ保存用" If Dir(strSavePath, vbDirectory) = "" Then MkDir (strSavePath) End If strFileName = strSavePath & "\GH請求" & Format(Date, "yyyymmdd") & ".xls" If Dir(strFileName) <> "" Then MsgBox "このGH請求書を保存し、同時に「データ保存用」の中にも保存しました。。" Else ThisWorkbook.SaveAs Filename:=strFileName End If If intRe = vbNo Then Exit Sub If intRe = vbYes Then ActiveWorkbook.SaveAs Filename:=strFileName End If Application.DisplayAlerts = True Application.Quit End Sub  無事に今日の日付でBブックが保存できました。 3)今度は、Aブックから、→Bコマンドボタン→Bブック開く→Aブックのコマンドボタンで「今日の日付をつけて新規ブックに保存」のマクロを実行しました。すると、保存先にはAブックが保存されていました。AブックでなくBブックのデータを保存したいのに・・・。 4)なぜ、Bブックが保存されないのでしょうか? Bブックを保存するにはどうしたらよろしいでしょうか。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

ActiveWorkbook を使っているからでしょう。(2箇所くらいある) これは現在アクティブなブックという意味なので、AなのかBなのか、 はたまたCなのかは「その時の状況による」という不安定なプログラムに なっています。Workbooks(1)とか、Workbooks("A.xls")のようにブックを 固定して実行してみてください。

aitaine
質問者

お礼

あありがとうございました。今の実力ではできませんでした。もう少し勉強しなおします。

関連するQ&A

  • エクセルのブックを閉じるマクロについて

    エクセルのブックAとブックBが開いている状態で、 ブックAのボタンに登録して実行すると、ブックAのみ閉じる、 というマクロを作りました。(下部にコードを記載します) このマクロは、2つのブックが開いていると正常に稼働するのですが、 ブックが1つしかない場合、実行時エラーが出てしまいます。 (ブックAのみ開いた状態でこのボタンを押してもエラーなく閉じたい) 実行時エラーが出ないようにするにはどうすれば良いか、 おわかりの方がいらっしゃいましたら教えて下さい。 どうぞよろしくお願い致します。 Sub このブックのみ閉じる() Dim wa As String wa = "ほかに無い" Dim wb As Workbook For Each wb In Workbooks If wb.Name <> ThisWorkbook.Name Then wa = "ほかにあるよ" End If Next If wa = "ほかに無い" Then Application.DisplayAlerts = False Application.Quit '終了予定 End If Range("D2").Select Selection.ClearContents ThisWorkbook.Close SaveChanges:=False End Sub

  • ファイルの別名保存の方法

    こんにちは。 Excelの素人です。blg.を参考に、ファイルの別名保存ボタンを作りましたが、別名保存後うまく終了してくれません。 現象は終了マクロから名前をつけて保存してもファイルが終了しません。もう一度ボタンをクリックするといきなり終了します。 素人の悲しさで、どこを修正すればよいのか悩んでいます。 Sub 別名保存後終了() If ThisWorkbook.Saved = False Then strFilename = ThisWorkbook.Path & "\" & _ "データ作成" & "_" & _ Format(Date, "yyyymmdd") & ".xls" strFilename = Application.GetSaveAsFilename( _ FileFilter:="Excelファイル,*.xls", _ InitialFileName:=strFilename, _ Title:="Excelファイルの保存") If strFilename = "False" Then If MsgBox("保存せずに終了します。よろしいですか?", _ vbOKCancel + vbInformation, _ "終了確認") = vbOK Then ThisWorkbook.Saved = True ThisWorkbook.Close Else Exit Sub End If Else ActiveWorkbook.SaveAs strFilename End If Else ThisWorkbook.Close End If End Sub 宜しくお願いします。

  • VBAでファイルを保存せずに閉じた後の他ブックの挙動

    初めて質問させていただきます。 VBA初心者の為、質問自体に不足があるかもしれませんが、ご協力をお願い致します。 エクセル2000(SP3)で複数のブック(仮にA.xls,B.xlsとします)を起動した状態で、Aをマクロを使って保存せずに終了させたところ、Bの操作が出来なくなります。(セル選択等もできません。Bのsheetを選択するとアプリケーションエラーになってしまいます) 同Windows上に他アプリケーションが起動している場合、それらを一度選択してから再度Excelを選択すると、Bの操作が可能になります。 保存せずに終了させる為のマクロは次のとおりです。 ブックAのThisWorkbook内に記述しています。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Workbooks.count = 1 Then Application.DisplayAlerts = False Application.Quit Else ThisWorkbook.Close SaveChanges:=False End If End Sub 以上、よろしくお願い致します。

  • 違うシートのデータを1つのPDFファイル保存VBA

    Sub データPDFファイル化() If MsgBox("ファイルをPDF化し過去データとして保存します。よろしいでしょうか?", vbYesNo) = vbNo Then End End If If Range("L2").Value <> "" Then Dim Fn As String Fn = Format(Range("L2"), "yyyy年m月d日") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="D:\フォルダB\過去記録データ保存用フォルダ\データ\" & Fn Else MsgBox "セルL2にファイル名が入力されていません。", vbExclamation End If End Sub この様なコードがあります。エクセル2003では使用出来ないのでエクセル2007以降の使用です。 これはシート名「A」にコマンドボタンを設置し、そのコマンドボタンを押すとPDF化して保存するマクロです。 そこで質問ですがコマンドボタンを押すとシート名「A」と隣にあるシート名「B」をまとめてPDFファイルで保存する方法はどの様にすれば良いのでしょうか? PDF化した際は1ページ目がシート名「A」で2ページ目がシート名「B」を表示させ、名前はシート名「A」のL2(yyyy年m月d日)で保存します。

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • 日付入力と日数計算

       A       B      1 開始日  H24/4/1       2 終了日  H24/4/30 3  日数     30     上のような表で、 ・B1とB2に日付を入力すると、B3にB1からB2の日数が返ってくる ・B1に日付、B3に日数を入れると、B2にB1からB3日後の日付が返ってくる ・B2に日付、B3に日数を入れると、B1にB2からB3日前の日付が返ってくる ・B列から複数列同じ処理をする というようなことがしたくて、下記のような記述をしました。 (今のところ単列処理ですが・・) Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo error Dim a As Range For Each a In Target If a.Address = "$B$1" Then If Range("B2") > 0 Then Range("B3") = Range("B2") - Range("B1") ElseIf Range("B3") > 0 Then Range("B2") = Range("B1") + Range("B3") - 1 End If End If Next a Dim b As Range For Each b In Target If b.Address = "$B$2" Then If Range("B1") > 0 Then Range("B3") = Range("B2") - Range("B1") + 1 ElseIf Range("B3") > 0 Then Range("B1") = Range("B2") - Range("B3") - 1 Else Range("B2") = "" End If End If Next b Dim c As Range For Each c In Target If c.Address = "$B$3" Then If Range("B1") > 0 Then Range("B2") = Range("B1") + Range("B3") + 1 ElseIf Range("B2") > 0 Then Range("B1") = Range("B2") - Range("B3") - 1 Else Range("B2") = "" End If End If Next c error: End Sub これだと、例えば B1に日付を入力して、B3に日数を入力すると、 B2に日付が返ってくるのですが、B2に日付が返った瞬間にループ処理してしまいます。 (『WorksheetChenge』なので当然なのですが…) どうすればうまくいくか、ご教示お願いいたします。 また、この計算を複数列で行いたいので、それもあわせて 教えていただけると幸いです。 よろしくお願いします。

  • エクセルのVBAで新しくブックを開いた上でさらに…

    エクセルのVBAで新しくブックを開いた上でそのブックにVBAを埋め込む事はできますか? 分かりにくいと思うので具体的にかきます。 今、ブック1にコマンドボタンAがあり、このボタンAを押す事により 以下の2つを実現したいです。 (1)あたらしくブック2を開きます。 (2)更にこのブック2のシートにはコマンドボタンBができており (3)このボタンBの機能としてこのボタンBを押すと  ブック2のセルA1に数字1が入ります ブック2が開いた後で自分で、コマンドボタンBのマクロをブック2のモジュール内に書くのは簡単ですが、ブック1のコマンドボタンAを押したときに自動的にブック2のマクロを書き込みたいのです。 今、ボタンAを押すことで(1)と(2)まではできるのですが (3)のやり方がわかりません。 そもそもこういった事はできないのでしょうか? ご存知の人がいたら教えてください。よろしくお願いします。

  • 名前を付けて保存時のファイル名の指定

    ボタンを押すとテーブルのデータが出力できるようにしたいと思います。 標準Module1とFormのボタンには下記のような記述をしていますが 添付ファイルのように保存のダイアログまではうまく動いているようです。 ただ、ファイル名がブランクですので、"表示材料_" & Format(Now(), "yyyymmdd")と自動的に表示させたいです。 ご教授お願いいたします。 【PC環境】 Access:2010 WIndows 7 【標準Module1】 Function GetFileName(OpenOrSaveFlg As Boolean, strFilter As String, _ strTitle As String) As String Dim returnValue As Integer Dim strFilePath As String If strFilter = "" Then strFilter = "全てのファイル (*.*)|*.*" End If WizHook.Key = 51488399 'WIZHOOK有効 returnValue = WizHook.GetFileName( _ 0, "", strTitle, "", strFilePath, "", _ strFilter, _ 0, 0, 0, OpenOrSaveFlg _ ) WizHook.Key = 0 ' WizHook 無効 GetFileName = strFilePath End Function 【Fromのボタン】 Private Sub コマンド28_Click() Dim strFileName As String Dim ExpFileName As String ExpFileName = "表示材料_" & Format(Now(), "yyyymmdd") strFileName = GetFileName(False, "MicrosoftExcel ブック (*.xls)|*.xls", "") If Len(strFileName) = 0 Then 'キャンセルボタンが押されたときの処理を記述 MsgBox "キャンセルが押されました。" Else DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "T_WO_MAT", "", True, "" End If End Sub

  • 開いているブックをバックアップ後閉じる方法

    開いているマクロブックのバックアップを実行すると、開いているマクロブックは閉じられ、バックアップファイルが作成されるまではいいのですが、バックアップファイルが開いたままになります。 出来ればバックアップファイルも閉じるようにしたいのですが、何を追記すればよいでしょうか? Sub バックアップ() Dim rc As Long rc = MsgBox("バックアップしますか?", vbYesNo + vbQuestion, "確認") If rc = vbYes Then Application.DisplayAlerts = False ActiveWorkbook.SaveAs "C:\excel\" & Format(Date, "yyyymmdd") & ".xlsm" Application.DisplayAlerts = True End If End Sub

  • シートだけを保存したいのですが?

    はじめましてマクロ初心者です。 検索しましたがわからなかったので、質問させていただきます。 保存をキャンセルすると新規ブックができてしまいます。 キャンセルした時に新規ブックを作りたくないのですが、教えてください。 Sub シート保存() Dim Answer3 Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant Answer3 = MsgBox("本当に保存しますか?", vbYesNo) If Answer3 = vbYes Then Sheets("保存シート").Select Application.CutCopyMode = False Sheets("保存シート").Copy Else MsgBox ("キャンセルしました。") End If 既定ファイル名 = Range("V8") 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名) If 保存ファイル名 = False Then MsgBox "保存は中止されました。" Else ActiveWorkbook.SaveCopyAs 保存ファイル名 End If End Sub よろしくお願いします。

専門家に質問してみよう