1

別の開いているワークブックにある目的の範囲をユーザーに入力するように求める VBA プログラムがあります。エラーが発生した場合、つまり、他のワークブックが手動でアクティブ化されたが範囲が選択されていない場合、またはエラーが発生した場合、プログラムで元のマクロ ワークブック シートをエラー メッセージとともに表示するようにします。以下のコードはデバッグ モードで動作しますが、VBA プログラムを実行すると、エラーは正しく表示されますが、元のマクロ ワークシートは表示されません。ユーザーが手動でアクティブ化したシートに残ります。私は何が欠けていますか?

以下のコードで、「HMArea」は、ユーザー入力を取得するルーチンによって返される Range 変数です。「Macro_Fname」は、元の VBA プログラムのファイル名の文字列変数です。

HM_file = FileName(HMArea)   
If HM_file = "Macro_Fname" Then
    Windows("Macro_Fname").Activate
    Sheets("[name of the sheet in Macro_Fname]").Select
    Range("D4").Select
    MsgBox "ERROR: No data selected"
    Exit Sub
End If
4

2 に答える 2

0

マクロブックの使い方を参照するにはThisWorkbook

別のワークブックが開かれているときは、常にそれを変数に割り当てて、それを制御できるようにします。

Set wbk = Workbooks.Open("D:\test.xlsx")

複数のワークブックを操作する場合は、常にワークブック オブジェクトのプレフィックスを付けます。無視された場合、アクティブなワークブックが使用されます。

`Sheets("[name of the sheet in Macro_Fname]").Select`

Select/Activate の使用は避けてください。こちらをご覧ください

Range("D4").Select

上記の問題が修正されると、コードは期待どおりに実行されます。

于 2013-10-24T02:47:02.403 に答える
0

変更してみる

Windows("Macro_Fname").Activate

Workbooks("Macro_Fname").Activate

ただし、質問の正確な性質はあいまいです。ワークブック A にいると仮定すると、(同時に開いている) ワークブック B の範囲を選択しますか?

于 2013-10-24T01:08:47.340 に答える