PDA

View Full Version : AUTOMAZIONE ED EXCEL


CIUFFO
21-01-2004, 16:10
Ho scritto del codice in Access 2004 (vedi sotto) che utilizzo per controllare se un file di Excel 2004 (“CAMBI.xls”) è aperto e lo apre non non lo è, utilizzando le API.
Il mio codice funzionava bene col 98, ma con XP mi dà un problema: aprendo altri file di Excel quando spengo il Pc, XP non riesce a chiudere “CAMBI.xls”, infatti aprendo il Task Manager ho notato che Excel.exe compare 2 volte.

Come posso aprire “CAMBI.xls” da Access utilizzando l’automazione invece delle API?

Ho provato con l’automazione (vedi sotto) ma non ho molta dimestichezza, “CAMBI.xls” lo apre (sembra!) visualizzando per un attimo solo l’UserForm1 che “CAMBI.xls” lancia con .Show all’apertura, poi si chiude sigh!(è un form utilizzato come casella di dialogo personalizzata che contiene un pulsante che esegue delle operazioni poi riduce ad icona il foglio), io invece vorrei visualizzare il foglio compresa la barra degli strumenti.
---------------------------------------------------------------------------------------------------------------
CON LE API

IN UN MODULO ( CAMBI.xls è nella stessa cartella che contiene il DB )
Option Compare Database
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Const SW_SHOWNORMAL = 1

Dim path, fs, s, h
Dim hwnd As Long

Sub MyEXCEL()

Set fs = CreateObject("Scripting.FileSystemObject")
h = CurrentDb.Properties("name").Value
s = fs.GetparentfolderName(h)

path = s + "\cambi.xls"

hwnd = FindWindow(vbNullString, "Microsoft Excel - CAMBI.xls")
If hwnd = 0 Then ' 0 significa che il file di Excel non è in esecuzione.

ShellExecute hwnd, vbNullString, path, vbNullString, vbNullString, SW_SHOWNORMAL
Else
Exit Sub
End If

End Sub

IN UNA MASCHERA
Private Sub Comando1_Click()
MyEXCEL 'vedi Modulo1
End Sub
--------------------------------------------------------------------------------------------------------------
CON L’AUTOMAZIONE

IN UNA MASCHERA ( CAMBI.xls è nella stessa cartella che contiene il DB )
Private Sub Comando2_Click()
Dim path, fs, s, h
Dim xl As Object
Set xl = CreateObject("Excel.sheet")
Set fs = CreateObject("Scripting.FileSystemObject")
h = CurrentDb.Properties("name").Value
s = fs.GetparentfolderName(h)

path = s + "\cambi.xls"
xl.Application.Workbooks.Open path
End Sub