0

ユーザーがアクションを要求した後、データを Excel にエクスポートするコードを作成しようとしています。基本的に、Excelへのエクスポートは成功していますが、新しいExcelアプリケーションではなく、新しいタブに書き込みたい2番目のインスタンスです。

oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oBook = oExcel.Workbooks.Add
oSheet = oBook.Worksheets(3)
oSheet.Delete()
oSheet = oBook.Worksheets(2)
oSheet.Delete()
oSheet = oBook.Worksheets(1)
oSheet.Name = "Run " & Counter

この時点で、ユーザーがボタンを押すと、Excel はアクティブではなくなります。そのため、新しいシートにさらにデータを書き込みたい場合、コードを正確に繰り返さない限り、オブジェクト コマンドは機能しません。

私は試した:

Counter +=1

'For the first instance
If Counter = 1 Then

        oExcel = CreateObject("Excel.Application")
        oExcel.Visible = True
        oBook = oExcel.Workbooks.Add
        oSheet = oBook.Worksheets(3)
        oSheet.Delete()
        oSheet = oBook.Worksheets(2)
        oSheet.Delete()
        oSheet = oBook.Worksheets(1)
        oSheet.Name = "Run " & Counter

Else
'For every instance after that the user wants to do another run

        oExcel.ActivateObject(Excel.Application)
        oBook = oExcel.Workbooks(1)
        oSheet = oBook.Worksheets.Add
        oSheet.Name = "Run " & Counter

End If

私は何日も探していて、とてもイライラしています。データの書き込みを続行するために、開いている Excel を参照する方法がわかりません。ユーザーが VB フォームのボタンを押して、もう一度実行することを確認した後です。

4

2 に答える 2

0

既に実行されている Excel のインスタンスへの参照を取得するには、 を使用できますGetObject

例えば:

' Test to see if a copy of Excel is already running. 
Private Sub testExcelRunning()
    On Error Resume Next 
    ' GetObject called without the first argument returns a 
    ' reference to an instance of the application. If the 
    ' application is not already running, an error occurs. 
    Dim excelObj As Object = GetObject(, "Excel.Application")
    If Err.Number = 0 Then
        MsgBox("Excel is running")
    Else
        MsgBox("Excel is not running")
    End If
    Err.Clear()
    excelObj = Nothing 
End Sub

http://msdn.microsoft.com/en-us/library/e9waz863(v=vs.90).aspx

Excel がまだ実行されていない場合は、 を使用して新しいインスタンスを開始できますCreateObject

于 2014-05-13T17:54:43.023 に答える