1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   | ' Add Option Strict Off to the top of your program.
Option Strict Off
 ' Declare necessary API routines:
   Declare Function FindWindow Lib "user32" Alias _
      "FindWindowA" (ByVal lpClassName As String, _
      ByVal lpWindowName As Long) As Long
 
   Declare Function SendMessage Lib "user32" Alias _
   "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
      ByVal wParam As Long, ByVal lParam As Long) As Long
 
Sub GetExcel()
   Dim MyXL As Object   ' Variable to hold reference
   ' to Microsoft Excel.
   Dim ExcelWasNotRunning As Boolean   ' Flag for final release.
 
   ' Test to see if there is a copy of Microsoft Excel already running.
   On Error Resume Next   ' Defer error trapping.
   ' Getobject function called without the first argument returns a
   ' reference to an instance of the application. 
   ' If the application is not running, an error occurs.
   MyXL = GetObject(, "Excel.Application")
   If Err().Number <> 0 Then ExcelWasNotRunning = True
   Err().Clear() ' Clear Err object in case error occurred.
 
   ' Check for Microsoft Excel. If Microsoft Excel is running,
   ' enter it into the Running Object table.
   DetectExcel()
 
   ' Set the object variable to reference the file you want to see.
   MyXL = GetObject("c:\vb\TEST.XLS")
 
   ' Show Microsoft Excel through its Application property. Then
   ' show the actual window containing the file using the Windows
   ' collection of the MyXL object reference.
   MyXL.Application.Visible = True
   MyXL.Parent.Windows(1).Visible = True
   '  Do manipulations of your  file here.
   '
End Sub
 
Sub DetectExcel()
   ' Procedure dectects a running Excel and registers it.
   Const WM_USER = 1024
   Dim hWnd As Long
   ' If Excel is running this API call returns its handle.
   hWnd = FindWindow("XLMAIN", 0)
   If hWnd = 0 Then   ' 0 means Excel not running.
      Exit Sub
   Else
      ' Excel is running so use the SendMessage API
      ' function to enter it in the Running Object Table.
      SendMessage(hWnd, WM_USER + 18, 0, 0)
   End If
End Sub | 
Partager