
VBAが書かれたEXCELのブックがあります。これは、一定時間ごとに処理を行います。その間、別のEXCELブックをひらいて、アクティブにしておきます。そして、VBAが書かれたEXCELファイルの一定間隔ごとの処理が呼ばれたときに、エラーメッセージが表示されます。
エラーメッセージ
実行時エラー 1004
RangeクラスのSelectメソッドが失敗しました。
エラー発生箇所
ThisWorkbook.Sheets("シート1").Range("A2:AZ")).Select
エラー発生箇所の前に
ThisWorkbook.Activate
を入れるとエラーが発生しませんが、画面が切り替わってしまいます。
画面が切り替わらずに、処理を続ける方法を教えてください。
宜しくお願いします。
No.6ベストアンサー
- 回答日時:
回答5、myRangeです。
>Workbooks("20091031.xls")の"20091031.xls"をマクロが実行しているファイルに動的にかえることはできますか、
>ThisWorkbook.Nameは、複数あるとACTIVEなものに変更されてしまいますので
上記の文言では状況がつかみにくいです。
特に、
>ThisWorkbook.Nameは、複数あるとACTIVEなものに変更されて
の【複数ある】とは、何が複数?
●何れにしろ、
現在の状況を具体例を挙げて説明した方が回答が付きやすいでしょう。
例えば、
Workbooks("ああ.xls")
Workbooks("いい.xls")
Workbooks("うう.xls")
の3つのブックが開いているとして。
アクティブなブックが、"うう.xls" の時、
裏のブック、"ああ.xls" のマクロを実行したい。
そして、
3ブックともマクロがある、とか、無いとか。。
それぞれのマクロは、どんな処理をするとか
(ああ.xlsはSort処理。。)
と、まあ、こんな感じで具体例を。
--------------------------------------------------
ま、それらが不明な時点で敢えて回答すると。。
Workbooks("20091031.xls")
を
ThisWorkbook
に変更するだけでいいように思いますが。。。
で、実際にここを変更して試してみたのですか?
以上です。
ご回答ありがとうございます。
質問の意図ですが、おっしゃるとおりです。
> Workbooks("ああ.xls")
> Workbooks("いい.xls")
> Workbooks("うう.xls")
>の3つのブックが開いているとして。
>アクティブなブックが、"うう.xls" の時、
>裏のブック、"ああ.xls" のマクロを実行したい。
それぞれにマクロが含まれており、裏ブック”ああ.xls”のマクロを
実行したいということです。
ThisWorkbookに変更するだけで大丈夫でした。
ActiveSheetを使用していたため、不具合が発生していたため、
まちがった報告をしていました。
どうもありがとうございます。
No.7
- 回答日時:
こんにちは。
少し割り込みさせていただきます。
>別のEXCELブックをひらいて、アクティブにしておきます。
>そして、VBAが書かれたEXCELファイルの『一定間隔ごとの処理が呼ばれ』たときに、エラーメッセージが表示されます。(『』加筆)
その『一定間隔ごとの処理が呼ばれ』とは、何でしょうか?
OnTime メソッドなのでしょうか?
OnTime なら、
OnTime(EarliestTime, Procedure, LatestTime, Schedule)
のLatesstTime で、余裕を持たせるとかすれはよいし、
現在使用しているブックと独立させるなら、CreateObject のオートメーションで、Win側のATコマンドで、WScript で動かせば、コードによっては、ワークブック目の前にブックは現れることもありますが、エラーは発生せずに勝手にマクロは動くはずです。
答えは出ていますが、
>ThisWorkbook.Nameは、複数あるとACTIVEなものに変更されてしまいますので、どうすればよいわかりませんでした。
動いているマクロ側で、そのマクロのThisWorkbook で、ブック・オブジェクトは取得できます。
『一定間隔ごとの処理が呼ばれ』とは
OnTimeメソッドのことです。
はい、エラー回避するばあいは、前面に出すようにします。
ありがとうございました。ThisWorkbookでうまくいきました。
No.5
- 回答日時:
Key1に指定するRange("B2")が、
どのブックのどのシートのセルか明示してやらないと拙いでしょう。
Workbooks("20091031.xls").Sheets("00").Range("A1:AD" & CStr(数 + 1)).Sort _
Key1:=Workbooks("20091031.xls").Sheets("00").Range("AB2"), _
Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod:=xlPinYin
それから、引数Headerは、xlGuessより、xlYesがいいでしょう。
以上です。
感謝します。ありがとうございます。
もう一つ教えていただければ幸いですが。
Workbooks("20091031.xls")の
"20091031.xls"をマクロが実行しているファイルに
動的にかえることはできますか、
ThisWorkbook.Nameは、複数あるとACTIVEなものに変更されてしまいますので、どうすればよいわかりませんでした。
基本的な質問で申し訳ありませんが、何卒宜しくお願いします。
No.4
- 回答日時:
Sortの引数を指定しないとエラーになりますが・・・
・マクロの記録かヘルプで引数を調べて追加してください。
Workbooks("20091031.xls").Sheets("00").Range("A1:AD" & CStr(数 + 1)).Sort 引数
早速の回答ありがとうございます。
sortの引数は省略してしまいました。
Workbooks("20091031.xls").Sheets("00").Range("A1:AD" & CStr(数 + 1)).Sort Key1:=Range("AB2"), Order1:=xlDescending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin
です。
うまくいかせる方法があればよいのですが。
No.3
- 回答日時:
だからExcelのアイコンをダブルクリックして、そこから目的のExcelBookを開くようにすればマクロの動作しているBookから影響を受けることはありません。
マクロの入ったExcelを開くときも同様にすれば先に開いているBookに影響はありません。
これでもエラーがでるなら単独でも出るはずです。
ご回答の意味わかりました。
操作は、
1.最初のEXCELファイルは、ファイルのダブルクリックで開く
2.EXCELを起動する。
3.新しいEXCELのBook1をクローズする。
4.新しいEXCELから目的のEXCELファイルを開く
ですね。
2操作増えるわけですね。
マクロを含んだファイルは、ユーザに配布します。
マクロ等を使って、手間を省く方法はありますでしょうか。
宜しくお願いします。
No.2
- 回答日時:
単一シート以外の場合は
他のシートや他のBookのことも考慮しないといけないので
面倒な上に難しくもなりますが、
・Rangeを指定するときにBook名.シート名.Range( ) のように
省略しないで指定する書き方に変更します。
・また、SelectやActivateを使わない書き方に変更します。
ご回答どうもありがとうございます。
>・Rangeを指定するときにBook名.シート名.Range( ) のように
>省略しないで指定する書き方に変更します。
教えていただいたように、修正しましたが、別のところでエラー(sortメソッドで失敗します。)が発生しました。
Workbooks("20091031.xls").Sheets("00").Range("A1:AD" & CStr(数 + 1)).Sort
バックグランドで作業を行う場合、なにか必要な作業がありますでしょうか。お教えください。
宜しくお願いします。
No.1
- 回答日時:
>その間、別のEXCELブックをひらいて
この別のExcelブックを開くときにExcelを起動してから開くようにします。
つまり1つのExcelが2つのBookを開くのではなく2つのExcelがそれぞれ1つづつのブックを開くようにすればいいのではないでしょうか。
まず、一つ目のEXCELを起動したあと、再度EXCELを起動して、マクロを含んだEXCELファイルを「メニュー開く」から開いても、現象は再現しました。
やり方が間違っているのでしょうか。
あと、マクロを含んだEXCELは、先に開くこともありますし、後から開くこともあります。
具体的にはどのよなVBAのコードを書けばよいかわかりません。
基本的な質問とは、思いますが何卒宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Visual Basic(VBA) Vba 互換モードでのAppActiveについて教えてください 2 2022/06/27 18:47
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) エクセルVBA 3 2022/06/23 20:00
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAで今開いているユーザ...
-
EXCEL VBAアドイン:シートの右...
-
フォルダ内の全ブックのシート...
-
エクセルVBA Workbook変数に変...
-
【ExcelVBA】指定の書式で、マ...
-
EXCELマクロで上書きメッ...
-
マクロでログ抽出し、日付ごと...
-
EXCELマクロでxlsとxlsxを開く方法
-
複数のデータ系列の線の太さを...
-
VBAを一度起動するとずっと出て...
-
エクセルで印刷する方法 エクセ...
-
エクセルでツールバーに「縮小...
-
VBA[Private Sub]のコードをシ...
-
Excel VBAで、実行時にsheet上...
-
Excelが勝手にシート移動してし...
-
ファイル名を今日の日付、時刻...
-
excelファイルに使われているVB...
-
Excelからnotesメールを自動で...
-
エクセルファイルを自身のファ...
-
EXCEL マクロ クリップボードク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAで今開いているユーザ...
-
フォルダ内の全ブックのシート...
-
エクセルVBA Workbook変数に変...
-
VB2010でExcelの行をコピーして...
-
【ExcelVBA】指定の書式で、マ...
-
【Excel VBA】ブックを複数開い...
-
フォルダ内の全ブックのシート...
-
EXCELマクロでxlsとxlsxを開く方法
-
すでに開いているブックのマク...
-
VBAでEXCELのワークシートを削...
-
EXCEL VBA起動時の処理
-
excelマクロ、任意セルの値で名...
-
フォルダ内の全てのBookに同じ...
-
excelでハイパーリンク 別ブッ...
-
同じ名前で拡張子が違うファイル
-
[Excel VBA] フォルダ内の複数...
-
VBAでファイル名を変更したい
-
VBA セル入力された日付データ...
-
他のBookのユーザー定義関数を使う
-
【VBA】他のExcelを起動し、呼...
おすすめ情報