1

あるワークブックの範囲をアクティブなワークブックの範囲変数にコピーする必要があるワークブックがあります。次のコマンドを実行するとエラーが発生します。これを行う他の方法はありますか。

Dim NTwbk As Workbook
Dim AppExcel As Excel.Application
Dim NewRng As Range
Dim res As Range
Sub OpenWBK()
Set AppExcel = New Excel.Application
Set NTwbk = AppExcel.Workbooks.Open(Sheet1.Range("SecondWorkbookPath"))
NewRng= NTwbk.Sheets("Sheet1").Range("B3")

AppExcel.Quit

End Sub

私もこれを試しました:

NewRng.Value = NTwbk.Sheets("Sheet1").Range("B3").Value

また、動作しませんでした

4

2 に答える 2

1

スクリプトの主な問題は、2 番目のワークブックを (他の回答リストとして AppExcel.Quit または NTwbk.close を介して) 閉じると、参照した範囲オブジェクトがメモリ内になくなり、変数が使用できなくなることです。また、オブジェクトを変数に割り当てるときは、set を使用する必要があります。

Set NewRng = Ntwbk.Sheets("Sheet1").Range("B3")

これは失敗しませんが、Ntwbk を閉じてしまうため役に立ちません。

ブック内の範囲で実行する必要があるアクションは、そのブックを閉じる前に実行する必要があります。

範囲の値だけが必要な場合は、次のように変更できます。

Dim NTwbk As Workbook
Dim AppExcel As Excel.Application
Dim NewRng As Range
Dim res As String 'Note the change from Range to String
Sub OpenWBK()
Set AppExcel = New Excel.Application
Set NTwbk = AppExcel.Workbooks.Open(Sheet1.Range("SecondWorkbookPath"))
NewRng = NTwbk.Sheets("Sheet1").Range("B3").Value

AppExcel.Quit

End Sub

その後、他のワークブックの特定の範囲の値として NewRng を自由に使用できます。

于 2012-04-07T21:23:27.633 に答える
0

既に Excel を開いているので、2 つ目のコピーを開く必要はないので破棄します。

Dim AppExcel As Excel.Application
Set AppExcel = New Excel.Application
AppExcel.Quit

オープンを次のように変更します。

Set NTwbk = Workbooks.Open(Sheet1.Range("SecondWorkbookPath"))

ただし、「SecondWorkbookPath」は有効な範囲ではありません。ワークシート "Sheet1" のセル A1 に有効なパスとファイル名が含まれている場合、次のように記述しても問題ありません。

Set NTwbk = Workbooks.Open(Worksheets("Sheet1").Range("A1").Value)
Set NewRng = NTwbk.Sheets("Sheet1").Range("B3")
NTwbk.Close SaveChanges := False

上記の変更を加えて、再試行してください。

于 2012-04-07T20:14:55.450 に答える