• ベストアンサー

カレントドライブの変更をしても、そのマクロの実行ができない

VIsta SP1 ExcelXPでマクロ作成中の超初心者です。今日昼から4時間かけて試行錯誤しましたが、深みにはまるばかりで、途方に暮れています。お助けください。  1)現状    Aブック-----マクロ記述用    Bブック-----請求用紙データ  2)Bブックにマクロを記述しました。そのマクロはBブックから正常に実行できました。  3)Bブックのマクロを、Aブックに複写し、カレントフォルダを変更しても、そのマクロがAブックにしか実行されません。このマクロををBブックに実行したいのですが、どうしてもできません。ご教示をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

ThisWorkbookのヘルプから抜粋です。 『ThisWorkbook プロパティ』 ...現在実行中のマクロ コードが記述されているブック (Workbook オブジェクト) を返します。... もっと基本から見直しましょうよ。 >Sub 請求書作成() > Application.ScreenUpdating = False > ChDrive ThisWorkbook.Path > ChDir ThisWorkbook.Path > 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 > Application.DisplayFormulaBar = True > Call 請求書入力 > Worksheets(1).Activate > Application.ScreenUpdating = True >End Sub このコードなどを見ると、掲示板でアドバイスを受けたコードの内容を理解しないまま 継ぎ接ぎしてるだけのような印象を受けてしまいます。 コードを提示してもらって、1回は動いたとしても理解して応用できないと メンテナンスや、不具合が出た時の対応に苦労しますよ。 まして、それが業務に使われているのであれば、損失を招く場合もあります。 今からでも遅くはありません。勉強し直してください。 http://www.asahi-net.or.jp/~ef2o-inue/top01.html 本ケースについては、先ほどの#2に書いてる事ですが ThisWorkbook ActiveWorkbook Workbooks("会社請求.xls") というWorkbookの指定の仕方の違いを理解してください。 その上で、あなたが処理したいBookを、どのように指定したらいいか考えて 自分で修正してみてください。 提示されたコードの情報だけで判断すると、ChDrive, ChDir は関係ありません。不要です。 カレントドライブ、カレントディレクトリを変更しても、処理するBookが自動的に変わるわけではありません。 Bookを開いた上で、Workbooks("会社請求.xls").Sheets(1).Range("A1")...などのように指定してください。

aitaine
質問者

お礼

まさにあなたのおっしゃるとおりです。もう少し基本から勉強しないと、時間ばかりかかります。ありがとうございました。これから、あなたの書いた文を一字一句噛みしめて、でなおします。すごい、参考になる文章です。ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

「個人用マクロブック」をなぜ使わないのでしょう。 そういうことは知っていて、そういう問題ではないのでしょうかね。 「個人用マクロブック」はWEBで沢山記事が出ます。 http://www1.plala.or.jp/happyday/sample/s4/s4_14.html

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

それだけの情報ではアドバイスしようがないですよ。 > 3)Bブックのマクロを、Aブックに複写し、カレントフォルダを変更しても、そのマクロがAブックにしか実行されません。 その『Bブックのマクロ』内での記述で、『ThisWorkbook』や『ActiveWorkbook』という記述がないですか? それが『Bブック』に対して処理したい内容であれば、 Workbooks("Bブック.xls")...などのように明示する必要があります。 『カレントフォルダを変更しても』...についてはそのマクロ内容を見てみない事にはなんとも言えません。

aitaine
質問者

補足

Aブックのフォームに以下を追加しましたが、だめでした。 ChDir ThisWorkbook.Path & "\会社関係\" '---対象ブックのフォルダへ移動 myFLName = "会社請求.xls" '---ファイル名だけ指定

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

コードを提示してみた方が、回答がつきやすいと思います。 単にBブックを指定していないのではないかと思いますけど。 念のため。

aitaine
質問者

補足

すいません。よろしくお願いします。 ------------------------------- Aブックのフォーム Private Sub CommandButton1_Click() 請求書作成 Workbooks("会社請求.xls").Activate Unload Me Unload 表紙----Aブックのシート 会社追加.Show End Sub ---------------------------------- Aブックの標準モジュール Sub 請求書作成() Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path 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 Application.DisplayFormulaBar = True Call 請求書入力 Worksheets(1).Activate Application.ScreenUpdating = True End Sub --------------------- 'Aブックのコマンドボタン------会社の追加 Private Sub CommandButton1_Click() Dim strSheetName As String, ws As Worksheet Dim intindex As Integer On Error GoTo ErrorHandler strSheetName = TextBox1.Text If strSheetName = "" Then MsgBox "シート名を指定してください", vbOKOnly + vbExclamation, ThisWorkbook.Name Exit Sub End If '現ブックの全シートをループで見く For Each ws In ThisWorkbook.Sheets '対象シート名が変更後シート名と同じ場合(シート既存時) If ws.Name = strSheetName Then MsgBox "'" & strSheetName & "' シートは既に存在しています。", vbOKOnly + vbExclamation, ThisWorkbook.Name Exit Sub Next ws 'コピー元シートのインデックスを取得します intindex = ThisWorkbook.Worksheets(1).Index 'シートのコピー ThisWorkbook.Worksheets(1).Copy After:=ThisWorkbook.Worksheets(1) 'コピーシート名の変更 ThisWorkbook.Worksheets(intindex + 1).Name = strSheetName Cells(8, 3).Value = TextBox1.Value Range("c8").Select MsgBox "会社を追加しました " Unload Me Exit Sub '------------------- 'エラー処理 '------------------- ErrorHandler: MsgBox "Err: " & Err.Number & vbCr & Err.Description, vbOKOnly + vbExclamation, ThisWorkbook.Name Resume Next End Sub

関連するQ&A