• ベストアンサー

エクセル2003VBA 新規ブックを作成、保存の時に

noname#52504の回答

  • ベストアンサー
noname#52504
noname#52504
回答No.4

ご質問の趣旨を取り違えていましたらすみません。 ・自動保存はしない(保存するか否か、事前にはわからない) ・手動で[名前を付けて保存]しようとした場合に  ダイアログで表示されるファイル名を指定したい。  ということですよね。 ●A案:新規ブックを作成する際、まずテンプレを作り、それから作成する  ちょっとトリッキーですが、手軽な近似案として。  動作の概要   "ほにゃららX"という名前の新規ブックを作成する(Xは連番)  Bファイル(VBA記述ファイル)上に記述して、  新規ブック作成時に動作させることを想定しています。  連番がついてしまう点に目をつぶれば、ご要望に近い動作かと思います。  '----------↓ココカラ↓----------  Sub Sample()   myStr = "ほにゃらら" & ".xlt"   Workbooks.Add.SaveAs myStr   Workbooks.Add myStr   Kill myStr  End Sub  '----------↑ココマデ↑---------- ●B案:新規作成するブックにイベントドリブンマクロを仕込む  「マクロでマクロをいじる」のはいろいろと微妙な問題が絡むので、、  あらかじめマクロを記述したブックをテンプレとして用意しておき、  そのテンプレから新規ブックを作成するのが簡単かと思います。  マクロは  ・新規ブックを作成してファイル名を渡すマクロ:B1   ※Bファイル(VBA記述ファイル)側  ・保存のタイミングを捉えてダイアログを制御するマクロ:B2   ※テンプレ=新規ブック側  に分かれます。  ファイル名の渡し方については、  隠しセル,名前,DocumentProperty等いろいろ考えられますが、  とりあえず例として、ブックのプロパティの[タイトル]を使いました。  動作の概要(B1)   [C:\myBook.xlt]から、マクロ付き新規ブックを作成し、   ファイルのプロパティ[タイトル]にファイル名を記述する。  ↓Bファイル(VBA記述ファイル)上に記述して新規ブック作成時に動作させる  '-------------------↓B1ココカラ↓-------------------  Sub Sample2()   myStr = "ほにゃらら"   Set mybook = Workbooks.Add("C:\myBook.xlt")   mybook.BuiltinDocumentProperties("Title") = myStr  End Sub  '-------------------↑B1ココマデ↑-------------------  動作の概要(B2)   [名前をつけて保存]しようとしたら、   [タイトルプロパティに記述されている文字列]をファイル名としてダイアログを開く。  ↓これをThisWorkbookモジュールに記述したテンプレートを、  myBook.xlt(拡張子に注意)という名前でCドライブルート直下に用意しておく。  '--------------------------↓B2ココカラ↓--------------------------  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)   If SaveAsUI Then    Cancel = True    myStr = ThisWorkbook.BuiltinDocumentProperties("Title")    With Application     .EnableEvents = False     .Dialogs(xlDialogSaveAs).Show myStr     .EnableEvents = True    End With   End If  End Sub  '--------------------------↑B2ココマデ↑-------------------------- もっとスマートな方法がありそうな気もしますが、とりあえずご参考まで。

tmgolf
質問者

お礼

deus_ex_machina様、ご回答ありがとうございました。 今回のコードを試行錯誤している間に本職の業務の方が 多忙となってしまい、課題に取り組めていないのが現状で あります。 ただ、サンプルコードをテストして、解決の糸口が見えて 来ている状態であります。 今後、更に皆様のコードを試行錯誤行いながら、望むもの を作って行きたいと思っております。 ご回答頂き、誠にありがとうございます。

tmgolf
質問者

補足

deus_ex_machina様、ご回答ありがとうございます。 趣旨の点については、ご返答いただいた通りであります。 まだ、サンプルコードの方は現時点でテストできていませんので この後、コードを試して行きたいと思います。 まずは、お礼申し上げます。 皆様のコードをこれから試して、理解していきたいと思いますの で、少しお時間をいただきたく思います。 ありがとうございます

関連するQ&A

  • Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい

    Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい A.xls B.xls と二つのブックがあります。 A.xlsが閉じられる時、B.xlsも同時に閉じたいです。 A.xlsに以下のマクロを入れました。 Private?Sub?Workbook_BeforeClose(Cancel?As?Boolean) ?Workbooks("B.xls").Close?SaveChanges:=False End?Sub 問題はA.xlsが保存してない場合、「A.xlsへの変更を保存しますか?」というメッセー ジが 出てきますが、そこでキャンセルを押された場合でもB.xlsが閉じられてしまいます。 A.xlsが本当に閉じられた時だけB.xlsを閉じたいのですが そのようなことは可能でしょうか?

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

  • 新しいBookの作成マクロ

    現在使用しているBOOKの一部をクリアして、同じフォルダ内にBOOKの名前だけ変えて年度が変わっても使えるように更新マクロを作成したのですが下のエラ-がでます。 実行時エラ-’70’書き込みできません BOOKを保護している訳でもありませんし、読み込み専用にもなっていません。ご教授ください。 Sub 更新() ' 入力内容を消去 Sheets("シ-ト").Select Range("B3:T65536").Select Selection.ClearContents  ’・・・・・・・・・・・・・・・・   FFF:フォルダF11が保存されているフォルダ名   F11:ブックBBBが保存されているフォルダ名   BBB:現在使用しているブック 名   B22:新しく使う(変更後の)ブック名  ’・・・・・・・・・・・・・・・・・・・・・  ’BOOK1(ブック名BBB)を複写してBOOK2(ブック名B22)をつくる   FileCopy "D:\FFF\F11\BBB.xls", "D:¥FFF\F11\B22.xls"  ’BOOK1の名前をBOOK2へ変更    Name "D:\FFF\F11\BBB.xls" As "D:FFF\F11\B22.xls" 'メニュー画面を表示    Worksheets("初期画面").Activate    Range("A1").Select End Sub 

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • VBA(Excel):他のブックからシートごと取込みたい

    他のブックからシートを取込む(シート名を変更して)VBAがわからないのですが、どなたか詳しい方がいましたら、ご教授下さいませ。 以下を例として、ご回答いただけると幸いです。 よろしくお願いします。 ---------------------------------- 次の3つのブックが存在するとします。 a.xls b.xls c.xls a.xlsにはシートが1つだけあり、シート名は"sheet1"です。 b.xlsにはシートが1つだけあり、シート名は"sheet1"です。 c.xlsにはシートが3つあり、シート名は"sheet1"、"sheet2"、"sheet3"です。 a.xlsにVBAマクロを作り、a.xls上で実行させて、 a.xlsの"sheet1"は残したまま、 b.xlsの"sheet1"のシート名を"sheet1-b"に変更して、 a.xlsのシートとして取込み、 同様に今度は、 a.xlsの"sheet1"、"sheet1-b"は残したまま、 c.xlsの"sheet1"のシート名を"sheet1-c"に変更し、 c.xlsの"sheet2"のシート名を"sheet2-c"に変更し、 c.xlsの"sheet3"のシート名を"sheet3-c"に変更し、 a.xlsのシートとして取込み、 最終的に、a.xlsには、 "sheet1"、"sheet1-b"、"sheet1-c"、"sheet2-c"、"sheet3-c" の、5つのシートが存在するようにしたいのです。 (各シート上のデータは、a.xlsの各シートとしてすべて移行されている) ----------------------------------

  • エクセルVBAで困っています。

    Excell2003でマクロを作成したのですが、思うような結果が出なくて困っています。 どなたかお力をお貸しください。 お願いします。 【作成したマクロ】 Sub テスト()   myPath = ThisWorkbook.Path   buf = Dir(myPath & "¥データ¥" & "*.xls")   Do While buf <> ""     Target = "'" & myPath & "[" & buf & "]Sheet1'!R1C1"     i = i + 1     Cells(i, 1) = buf     Cells(i, 2) = ExecuteExcel4Macro(Target)     buf = Dir()   Loop End Sub 【設定状況】 ・デスクトップ上に "サンプル.xls" があり、ThisWorkBookに上記マクロを書きました。 ・デスクトップ上に "データ" というフォルダがあり、その中に、"Book1.xls" と "Book2.xls" があります。 ・"Book1.xls" のSheet1のRange("A1")には "あいうえお" が入力されています。 ・"Book2.xls" のSheet1のRange("A1")には "かきくけこ" が入力されています。 【マクロ実行結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ #REF! ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ #REF! となってしまいます。 【求めたい結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ あいうえお ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ かきくけこ よろしくお願いします。

  • 一覧表から一行ごとのデータを別ブックに保存するには?

    あまり使用頻度はないかもしれませんが・・・・ (例) ○元になる一覧表のブック(BOOK_1.xls) 1行目:項目  (A1:一連番号 B1:氏名    C1:住所) 2行目:データ1(A2:1     B2:山田太郎 C2:東京都) 3行目:データ2(A3:2     B3:山田次郎  C3:大阪府)    ・    ・ 以降10行目まで同様のデータが入っているとします。 上記のファイルから ○あらかじめ決められた単票形式のブック(FORMAT.xls)  A1:一連番号(文字列) B1:空白  A2:氏名(文字列)   B2:空白  A3:住所(文字列)   B3:空白 を呼び出し ○BOOK_1.xlsの一行目の項目のデータを  FORMAT.xlsの B1 B2 B3 の空白部分にコピーペーストし ○BOOK_1.xlsのA2の一連番号の数字をファイル名として取得  し"1.xls"として新規保存をする。 ○そのあとは10行目までその作業を繰り返し、1.xlsから10.xls  というファイルを10個作成し終了する 以上のようなことが可能でしょうか? 実際は列数は30程度、行数が1500行程度あり、1500ほどの ファイルができるようになるんですけど・・・。 よろしくおねがいします。    

  • ブックの共有をしているexcelファイルの複製

    ブックの共有を設定しているbook1.xlsというexcelファイルがあります。 ブックの共有を行なっているとだんだんデータサイズが肥大化してくるので、その対策として 【1】"book1.xls"のシート単位で全て新しい"book2.xls"にコピーする。 【2】"book1.xls"を別のフォルダへ移動。 【3】"book2.xls"の名前を"book1.xls"に変え、ブックの共有設定を行う。 ということをしています。 これらの作業を自動で行えたらと思うのですが、 タスクスケジューラー?.batファイル?VBA?など、何をどう組み合わせたらよいのかがよくわかりません。 アドバイスよろしくお願いします。