• 締切済み

VBA-Workbook_Open()イベントで

再度、お世話になります。 手順1.book1よりボタンをクリックしてbook2を開く 手順2.あるフォルダの.xlsファイル名をボタン名に貼り付ける 手順3.book2の戻るボタンでbook2を閉じ、book1を開く 手順4.手順1を実行する という流れを行ったところ1回目のbook2の表示の際にはうまくファイル名を表示できるのですが、戻った後の2回目のbook2の表示ではファイル名が1回目のときのままになってしまいます。 一部 [book2での処理] ***Module1*** Public strPath as String ***ThisWorkbook*** Public Sub Workbook_Open() strPath = "C:\" & Worksheets("Sheet1").Range("A1") myName = Dir(strPath & "\*.xls", vbDirectory) If myName <> "" Then FCnt = FCnt + 1 Worksheets("Sheet1").OLEObjects("btn" & FCnt).Object.Caption = myName Do ・・・(略) Loop End If End Sub ***Sheet1*** Private Sub btnBack_Click() Workbooks.Open Filename:="C:\book1.xls" Workbooks("book2.xls").Close saveChanges:=False End Sub のようにしています。 お手数をおかけしますが、どなたかご教授お願いいたします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。Wendy02です。 >コードをすべて貼り付けることに専念してしまいました・・・。 うーん。困りましたね。一応の説明をしていただければよいのですが、会社のものだから、守秘義務とかあるのでしょうか?肝心な設定部分を見せられないとすると、残念ながら、これ以上は回答できないのですね。 >>Module1 の >>>Public strPath as Stringのこれは、常に変るのですか? >→はい、常に変わります。 変りますって言われても、設定部分はどうしているのか分りません。おそらく、これにまつわる部分がおかしいのではありませんか? 雰囲気としては、だいたい、みなさんミスる所と同じところの部分のような気がしますが、それは、こちらの想像ですから、親切心がやぶへびになりかねません。 一応、ご自分で調べる方法は、Open イベントの途中で、Stop という命令を入れて、マクロを止めます。その後は、ステップモードと、ローカル・ウィンドウで確認しながら見ていきます。ただし、Public 変数では、その設定したブックだけですから、間違えないようにしてください。参照設定しなければ、やりとりはでません。

miammi
質問者

お礼

Wendy02様 ご回答ありがとうございます。 Wendy02様の過去の回答を拝見させていただき、Runメソッドを使用することで解決いたしました。 丁寧に回答していただき本当にありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。Wendy02です。 Module1 の >Public strPath as String のこれは、常に変るのですか?そうでなかったら、 Public Const STR_PATH As String = ○○○○ だと思いますが、ThisWorkbook.Path なら、Openイベントで設定するか、Public変数自体が必要ありませんね。 ここは、 >Public Sub Workbook_Open() Private です。もし、そうでないなら、Application イベントです。 >myName = Dir(strPath & "\*.xls", vbDirectory) vbDirectory は、「*.xls」にするなら必要ないはずです。 If myName <> "" Then FCnt = FCnt + 1 Worksheets("Sheet1").OLEObjects("btn" & FCnt).Object.Caption = myName Do ・・・(略) Loop 全てのボタンにファイル名を入れるわけですよね。ボタンとファイル名の数が合っているのでしょうか?整合性が合わないとなると、たぶん、 >Worksheets("Sheet1").OLEObjects("btn" & FCnt).Object.Caption = myName こちら側にエラーが出るはずです。 ただ、設計としては、イベントで登録するよりも、ファイル名(Book)を固定させるべきですね。それに、登録したファイル名をCaption で使えなければ、意味がありません。 しかし、以下の部分は、直接、上記のこととは関係ありませんね。 >手順3.book2の戻るボタンでbook2を閉じ、book1を開く >戻った後の2回目のbook2の表示ではファイル名が1回目のときのままになってしまいます。 その文面にある「ファイル名」とは、登録されたCaption 名のことでしょうか?それは、きちんとOpenイベントが動いていないということでしょうか? 前回と同じことですが、全体の構成が見えていないので、よく分りません。もしかして、それぞれのフォルダにあるブックによって、そのボタン名が変るということでしょうか?もし、そうなら、不可能とは言いませんが、それは、ちょっと設計のアイデア倒れになりかねませんね。 この部分を、もう少し「詳しい言葉」で説明していただけませんか? そうすれば、もう少し他の人も答えやすいかとも思います。

miammi
質問者

補足

Wendy02様 度々ご回答ありがとうございます。 >Module1 の >>Public strPath as Stringのこれは、常に変るのですか? →はい、常に変わります。 >全てのボタンにファイル名を入れるわけですよね。ボタンとファイル名の数が合っているのでしょうか? →ループ処理でボタンの数を超えるとメッセージを表示する処理を記述しています。 >その文面にある「ファイル名」とは、登録されたCaption 名のことでしょうか? →そのとおりです。Caption名で判断させています。 >それは、きちんとOpenイベントが動いていないということでしょうか? →おそらくそうだとにらんでいるのですが・・・。 >それぞれのフォルダにあるブックによって、そのボタン名が変るということでしょうか? →はい。フォルダに格納されているブックを次に開くbookのボタンのCaption名に表示させています。 >不可能とは言いませんが、それは、ちょっと設計のアイデア倒れになりかねませんね。 →設計の改善が必要なのでしょうか・・・。 >この部分を、もう少し「詳しい言葉」で説明していただけませんか? →申し訳ございません。コードをすべて貼り付けることに専念してしまいました・・・。 大変恐縮ですがご指導お願いいたします。

関連するQ&A

  • WorkbookのCopyについて

    Workbookのコピーについて教えてください。 下記のマクロにセル内の数式もコピーしたいのですが、出来ないで困ってます。 値と数式をコピーする、マクロを入れると指定した範囲にコピーされません。 Sub CopyWorkbookToWorkbook() Windows("sheet2.xls").Activate Workbooks.Open Filename:="D:\book1.xls" Workbooks("book1.xls").Worksheets("sheet1").Range("A6:k1000").Copy Workbooks("book2.xls").Worksheets("sheet1").Range("A6").PasteSpecial    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False,Transpose:=False          Workbooks("book1.xls").Close End Sub よろしくお願いします。

  • 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のブックやシートのコピー(操作)についてご教授お願いいたします。 Windows XP x64 OFFICE2003 を使用しております。 D:\Book1.elxのsheet1のシートをD:\test\Book2.elxのsheet1のシートに コピーする方法が恥ずかしながら理解できておりません。 以下が行いたい事です。 Sub ボタン1_Click() 'text1ブックを開く 'Workbooks.Open "D:\micro\test1.xls" 'ブック間のシートをコピー Workbooks("test2.xls").Worksheets("シート2").Copy _ After:=Workbooks("test1.xls").Worksheets("Sheet2") End Sub VBのファイル操作とは違い、どのように行えば良いのか検索しても同じような部分サンプルのようなものしか無く、理解できておりません。 参考でも結構ですのでご教授いただけませんでしょうか? よろしくお願いいたします。

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

  • エクセルVBA 無駄な部分をおしえてください

    VBA初心者です。 多数のシートを条件によって二つのブックに分ける、というVBAを作ろうとしています。 なにぶん素人なので、無駄な文章が多いのではないかと心配で、 お知恵を拝借できればと思い投稿いたしました。どうぞよろしくお願いいたします。 やりたいこと:Book1のA列に100程度の文字列があり、そのいずれかと一致するシート名(Book1のSheets(2)以降)を持つシートはBook2の最終シートの後ろへ、どの文字列ともシート名が一致しないシートはBook3の最終シートの後ろへ移動。(「最終シートの後ろへ移動」がうまくいっていません) VBAの内容:Book1のH1に「=countif(A:A,G1)」と入力しておき、G1にシート名を入力させ H1>0ならば該当シートをBook2へ、それ以外はBook3へ移動 の繰り返し   Application.ScreenUpdating = False Dim j As Integer, k As Integer j = Workbooks("Book2.xls").Worksheets.Count k = Workbooks("Book3.xls").Worksheets.Count Do While Workbooks("Book1.xls").Sheets.Count > 1 Range("G1").Value = Worksheets(2).Name If Range("H1").Value > 0 Then Worksheets(2).Move after:=Workbooks("Book2.xls").Sheets(j) Else Worksheets(2).Move after:=Workbooks("Book3.xls").Sheets(k) End If Loop

  • VBA 実行エラーの原因

    次のコードは、アクティブブックのSheet2を、Book222のSheet1の後ろにコピーします。 とあって、実際Book111、Book222を開いて実行するも、 実行時エラー9:インデックスが有効範囲にありませんがでます。 どこが悪いかさっぱりわかりません。教えてください。 Sub Sample05() Worksheets"Sheet2").CopyAfter:=Workbooks"Book222").Worksheets("Sheet1") End Sub

  • 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に値が入ってしまったりします。 長くなってしまってすみません。 もちろん、他の方法で実現することができるのはわかるのですが、なぜこのコードが実行できないのかがわかりません。 理由を教えていただけたら・・・と思います。 よろしくお願いいたします。

  • 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でパスの¥マークについて

    このマクロを記述したBOOKと同じフォルダー内にある、シート001.xls を開くマクロです。 同一フォルダーにあるのですから、このような記述になると思います。 Sub kakunin1() Workbooks.Open (ThisWorkbook.Path & "\" & "シート001.xls") End Sub しかし、以下の3つはすべてシート001.xls を開くことができました。 Sub kakunin2() Workbooks.Open (ThisWorkbook.Path & "\" & "\" & "シート001.xls") End Sub Sub kakunin3() Workbooks.Open (ThisWorkbook.Path & "\" & "\" & "\" & "シート001.xls") End Sub Sub kakunin4() Workbooks.Open (ThisWorkbook.Path & "\" & "\" & "\" & "\" & "\" & "\" & "シート001.xls") End Sub パスの¥マークは階層をあらわすのだと思っていましたがいくつ重ねてもなぜ開くのでしょうか?非常に初歩的な質問だと思いますが、ご教示いただければ幸いです。

  • Excel VBAを使って、Excelデータを別のExcelファイルに取り込みします

    報告書にexcel VBAを使って、(報告書を開いたまま)報告書のデータを別のexcelファイル(一覧)に取り込みします。 Sub k() Dim ブック As Workbook Set ブック = Workbooks.Open("c:\テスト\" & "一覧.xls") ブック.Worksheets("Sheet1").Cells(3, 2) = Worksheets("企業情報シート").Cells(3, 3) End Sub 報告書の"Worksheets("企業情報シート").Cells(3, 3)"は書き方がおかしいみたいで、正しい書き方を教えてください。

専門家に質問してみよう