• ベストアンサー

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

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/17068)
回答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

  • マクロを実行すると2つのBookで実行されてしまう

    AというBookとBというBookを同時に開いています。 どちらにもそれぞれ違った複数のマクロを登録しています。 マクロの中にはAの内容をBにコピーするというマクロもありますので、この2つは同時に開いておく必要があります。 困っているのはAのマクロを実行するとBでも同じように実行されてしまうのです。 マクロによってはその現象が起きないマクロもあります。 逆にBのマクロを実行してもAでは何も起きません。 Aのマクロを作成登録してる時にBも開いていたからでしょうか? この現象がいつから起きたのか分かりません。 例えばAの表の内容を一括で消すマクロを実行すると、 Bの方でも消えてしまうのです。 Aのマクロの内容を見てもBでも動作させるような内容はありません。 何度おこなっても同じです。 どうすれば元に戻せますか? 数時間かけて作成したマクロが無駄になってしまい困っています。 宜しくお願いします。

  • EXCELのマクロの有効範囲について

    (1)EXCEL2000にてブックが2つあって、それぞれに個人用マクロブックがある場合、お互いの個人用マクロブックのマクロの実行するにはどのようにマクロの記述をすればいいですか? BOOK1 マクロA1、A2、・・・、A5 BOOK2 マクロB1、B2、・・・、B5 のとき マクロA1の中でマクロB2を実行する (2)EXCEL2000にてブックが1つあって、個人用マクロブックとPERSONAL.XLSがある場合、PERSONAL.XLSの中で個人用マクロブックのマクロの実行するにはどのようにマクロの記述をすればいいですか? PERSONAL.XLS マクロA1、A2、・・・、A5 BOOK1     マクロB1、B2、・・・、B5 のとき マクロA1の中でマクロB2を実行する

  • カレントプロジェクトの記述を変更するマクロ

    DドライブのないPCでマクロを実行するため、カレントプロジェクトに記述してある「D:\」という文字を全て「C:\」に変えるマクロを作りたいので教えて下さい。 編集→置換キーを使って変更する方法をマクロで実行する方法です。

  • エクセル マクロの同時実行について

    エクセルのマクロについての質問なんですが、AというBookのA´マクロを実行しながら、BというBookのB´マクロ、C・・・というように、複数のBookの複数のマクロを同時に実行することは可能でしょうか?可能でしたらどのようにすればいいのか教えてください。  一つのマクロが終わるのに時間か結構掛かるもので、複数できれば能率が上がるのかな?って考えています。マクロ初心者なのでくだらない質問かもしれませんがよろしくお願いいたします。

  • 【Excelマクロ】ファイルを開き、マクロを実行する方法を教えてください

    マクロをひとつのブックに保存してマクロボタンを作成しています。そのマクロを別のファイルに実行したいのですが、その記述がわかりません。 [ファイルを開く]ダイアログから指定したファイルを開き、その開いたファイルに対して、すでに別のブックに保存してあるマクロを実行するには、どのように記述したらよいのでしょうか? ご存知の方いらっしゃいましたら、よろしくお願いいたします。

  • エクセル タスクスケジューラでマクロ自動実行

    お世話になります。 win7/エクセル2010使用です。 エクセルのThisWorkbook_openでマクロを実行するファイルAを作っています。 ※Auto_Openは記述していません。 ファイルAをタスクスケジューラに設定いたしました。 問題なくマクロが自動実行されて、目的は果たしています。 ただ、不思議な点があります。 このファイルAをダブルクリックして開いても マクロは自動実行されていきます。 このファイルAをコピーして、ファイルBを作り それをダブルクリックで開くと、 ファイルBは、ブックが開いた後に、「セキュリティーの警告」がされて マクロの自動実行ができません。 通常は、「セキュリティーの警告」を出さないために Auto_Openなどでコードを記述すると思うのですが、 なぜ、Auto_Openを記述していないファイルAが自動実行されるのかがわかりません。 タスクスケジューラの設定に何か関係はあるのでしょうか? よろしくお願いします。

  • アクティブなブックのマクロの実行について

    現在使用しているエクセルのブックがあり、ブック名はA(Ver1.0)とします。 このブックにApplication.Run "'A(Ver1.0).xls'!(1)"…Application.Run "'A(Ver1.0).xls'!(20)"というマクロがあります。 ブック名をマクロ実行前に必ず変更しなければならなくて、そのブック名は毎回違ったものになります。 わざわざブック名を変更せずに、現在開いているブックのマクロを実行するという風にしたいのですがどうしたらいいですか? よろしくお願いします。

  • 複数のシートでマクロの実行

    同じブック内のSheet1~Sheet10で同一のマクロを実行させたいのですが。 VBEditorにどのような記述をすればいいでしょうか。

  • EXCEL2010 マクロにつきまして

    excel vbaでマクロが作りたいのですが、まったくの初心者で 試行錯誤していますが、なかなか出来ずに困っています。 どなたか、教えていただけませんでしょうか。 ○sheet1 --日付---|A-B-C -------------------- 2013/1/20|1 2 3 2013/1/21|4 5 6 2013/1/22|7 8 9 2013/1/23|5 4 3 2013/1/24|4 5 6 2013/1/25|4 4 4 2013/1/26   ・   ・   ・ ○sheet2 実行ボタンを作成 日付を入力して実行ボタンをクリックすると指定した日付のデータが抽出される 例 2013/1/22 → 実行 A B C ------- 7 8 9 このようなマクロを組みたいのです。 わかりづらくて申し訳ありません。 また、初心者向けのおすすめの参考書や、ホームページがありましたら 教えて頂けると助かります。

  • マクロの実行について

    エクセルで料金計算をする、セル1Aに開始時刻を入力しセル1Bに終了時刻を入力するとセル1Cに料金が出力されるというマクロファイルを作りました。 現状1Aと1Bを入力しマクロ実行のスイッチを押して1Cを出力する、というやり方をしているのですが、スイッチを押す手間を省くために、1Aを入力しておいて1Bを入力したらスイッチを押さなくても自動的に1Cが出力されるようにしたいと考えています。 そのような設定をすることはできますか? ご回答よろしくお願い致します。

専門家に質問してみよう