6

私は最も奇妙な問題を抱えています。先日、ラップトップで以下のコードを書いていましたが、うまくいきました。現在、デスクトップでテストしていますが、動作しなくなりました。

まず、ここに私のコードがあります

Dim oApp As Application
Dim oWb As Workbook

Set oApp = New Application
oApp.Visible = True
Set oWb = oApp.Workbooks.Open(Filename:="C:\myFile.xlsx", ReadOnly:=True)

debug.print oWb.name
'returns "SOLVER.XLAM"
' "SOLVER.XLAM" is not "myFile.xlsx'

debug.print oApp.Workbooks.Count
'returns 1

debug.print oApp.Workbooks(1).name
'returns "myFile.xlsx"

これで、ソルバーはアドインであり、作成時に新しいアプリケーションに読み込まれることがわかりました...しかし、この切り替えをどのように実行しますか? 私はまだ正しいファイルに到達できますが、Application オブジェクトにファイルが 1 つしかない (または最初のファイルがロードしたファイルである) という偶然のリスクを冒したくありません。

追加情報

Excel インスタンス内からこのマクロの実行を呼び出しており、別の Excel インスタンスを開き、"C:\myFile.xlsx"その別のインスタンス内で特定のワークブック ( ) を開きたいと考えています。

私が抱えている主な問題は、他のインスタンスを開いてワークブックを追加し、それを oWb 変数に設定すると、後でその oWb 変数を呼び出すと、設定したものとは異なるものを参照することです。に。

'This is how it makes me feel:
Dim x As Integer
x = 5

Debug.Print x
' 12
4

2 に答える 2

3

コードを少し改良して、自分がやりたいことを正確に実行していることを確認すれば、問題はないと思います。Excel内からコードを呼び出しているのか、別のMS Officeアプリケーションからコードを呼び出しているのかが不明なため、以下のサブに配置しました。

Excelで実行する場合は、これを実行します。

Option Explicit

Sub insideXL()

Dim oWb As Workbook
Set oWb = Workbooks.Open("C:\myFile.xlsx", ReadOnly:=True)

Debug.Print oWb.Name
Debug.Print Workbooks.Count
Debug.Print Workbooks(1).Name

oWb.Close false

Set oWb = Nothing    

End Sub

別のプログラムで実行している場合は、これを実行します。私はアーリーバインディングを使用していますが、必要に応じてレイトバインディングを使用することもできます。

Sub outsideXL()
'make sure Microsoft Excel X.X Object Library is checked in Tools > References

Dim oApp As Excel.Application
Set oApp = New Excel.Application

Dim oWb As Excel.Workbook
Set oWb = oApp.Workbooks.Open("C:\myFile.xlsx", ReadOnly:=True)

oApp.Visible = True

Debug.Print oWb.Name
Debug.Print Workbooks.Count
Debug.Print Workbooks(1).Name

oWb.Close = True
Set oWb = Nothing
Set oApp = Nothing    

End Sub
于 2012-10-22T21:27:14.113 に答える