2

I could open another workbook in separate window by using two methods

TheEmu_Path = "excel.exe " & ThisWorkbook.Path & "\" & "myexcel.xlsx" 
call Shell(TheEmu_Path, 3)

or

Set oExcel = New Excel.Application
oExcel.Workbooks.Open Filename:=TheEmu_Path & "myexcel.xlsx"

The first method I could Open but don't know how to set a reference for the open workbook The second I could reference when opening the workbook but later for any later process I don't know how to reference that separately-opened worksheet

Set oExcel = ??
Set oWB = oExcel.Workbooks("myexcel.xlsx")
Set oWS = oWB.Sheets("F1")

How can I set the reference for oExcel (the already separately opened workbook)?

After creating and opening, later I want to change value in that open separately workbook in new button command

Set oExcel = CreateObject("Excel.Application")
Set oWB = oExcel.Workbooks("myexcel.xlsx")
Set oWS = oWB.Sheets("1")
oWS.Cells(1, 1) = 55

I have a mistake in line two as I believe that I still haven't referenced oExcel correctly.


Comment on David revision

Impressive, thanks a lot.

It works perfectly with very little addition, oExcel will be considered as workbook directly - great!

Dim oExcel As Object 'or Dim oExcel As Workbook
Dim oWS As Excel.Worksheet 'or Dim oWS As Worksheet

Set oExcel = GetObject(ThisWorkbook.Path & "\" & "myexcel.xlsx").Application
'or Set oExcel = GetObject(ThisWorkbook.Path & "\" & "myexcel.xlsx")

Set oWS = oExcel.Sheets("1")
oWS.Cells(1, 1) = 4

This is exciting and encouraging to ask other question as I have my file crashes when using UpdateRemoteReferences that result in #na values.

4

1 に答える 1

2

Excel の新しいインスタンスを作成します。

Dim oExcel as Excel.Application 'or As New Excel.Application
Set oExcel = New Excel.Application
'Dim oExcel as Object
'Set oExcel = CreateObject("Excel.Application") 'Alternative method for late-binding

これを行うと、新しい Excel が開き、空のブック ファイルが 1 つ表示されます。このワークブックを参照するには:

Dim oWB as Workbook
Set oWB = oExcel.Workbooks(1)

このインスタンス内でファイルを開くには:

Dim anotherWB as Workbook
Set anotherWB = oExcel.Workbooks.Open("c:\test.xlsx")

等。

通常、アプリケーションの複数のインスタンスで作業することはお勧めしませんが、これを行う必要がなく、すべてのブックを Excel.Application の 1 つのインスタンスで開くだけです。

コメントリクエストごとに更新

複数のインスタンス (IMO) を制御する最も簡単な方法は、白紙の状態から始めて新しいオブジェクトを作成し、上記の例に従って実行時にそれらを制御することです。

これが不可能な場合でも、他のインスタンスを取得することは可能です。どちらの場合も、Excel の他のインスタンスで開いているブック ファイルの名前を知る必要があると思います。

より簡単に

ワークブック名​​がわかっている場合は、次のようなアクセスを取得できます。

Dim oExcel As Object ' or Excel.Application
Set oExcel = GetObject("Workbook_Name.xlsx").Application

次に、使用していることを証明する限り、通常の方法を使用してワークブックを参照できます。oExcelたとえば、次のようになります。

Dim otherWorkbook as Workbook
Set otherWorkbook = oExcel.Workbooks(1) 'or oExcel.Workbooks("Workbook_Name.xlsx")

より難しく、おそらくより用途が広い

もう 1 つのオプションは、WinAPI 関数を使用して Windows ハンドルを取得することです。以前に WinAPI を使用してこのようなことを行ったことがあります。以下のサンプル コードはまだテストしていませんが、ここから始めるのがよいでしょう。

http://excelribbon.tips.net/T009452_Finding_Other_Instances_of_Excel_in_a_Macro.html

于 2013-10-04T21:49:39.397 に答える