|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
problemi con FINDWINDOW
Chi sà spiegarmi perché, se ci sono altri file di excel aperti (ridotti a icona), questa sub non riesce ad aprire “cambi.xls”?
Se Excel non è in esecuzione tutto ok, su load della maschera di access viene aperto il file di excel e attivato il foglio “query web”, se “CAMBI.xls” è già aperto, ma solo lui!, esce dalla sub e carica direttamente la maschera. Codice:
'In un modulo di access 2000' Option Compare Database Option Explicit Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub excel() Dim path Dim MyXL Dim hWnd As Long hWnd = FindWindow(vbNullString, "Microsoft Excel - CAMBI.xls") If hWnd = 0 Then '0 significa che il file di Excel non è in esecuzione. Set MyXL = GetObject("C:\documenti\CAMBI.xls") MyXL.Application.Visible = True MyXL.Parent.Windows(1).Visible = True MyXL.Sheets("query web").Activate Set MyXL = Nothing Else Exit Sub End If End Sub 'In una maschera di access' Private Sub Form_Load() excel End Sub |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non ho capito bene qual è il problema... Me lo potresti rispiegare ?
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Questa sub mi serve per aprire CAMBI.xls da access all'apertura di una maschera, ma se ci sono altri file di excel aperti la sub non riesce ad aprire il file.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quale ramo dell' If fa nel caso che sia già aperto un file di Excel ?
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
La modifica è per togliere 2 dim che non c'entravano nulla.
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Con questa riga vorrei controllare se CAMBI.xls è aperto :If hWnd = 0 Then '0 significa che "CAMBI.xls" non è in esecuzione.
Codice:
'In un modulo di access 2000' Option Compare Database Option Explicit Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub excel() Dim path Dim MyXL Dim hWnd As Long hWnd = FindWindow(vbNullString, "Microsoft Excel - CAMBI.xls") If hWnd = 0 Then '0 significa che "CAMBI.xls" non è in esecuzione. Set MyXL = GetObject("C:\documenti\CAMBI.xls") MyXL.Application.Visible = True MyXL.Parent.Windows(1).Visible = True MyXL.Sheets("query web").Activate Set MyXL = Nothing Else Exit Sub End If End Sub 'In una maschera di access' Private Sub Form_Load() excel End Sub |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
forse perchè devi portare cambi.xls in primo piano |
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Per misterX:
come lo porto in primo piano da VB? Già c'è Codice:
MyXL.Sheets("query web").Activate |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Per Cionci
Non c'è un ramo dell'if per il caso che un'altro .xls sia aperto
L'if controlla solo se "CAMBI.xls" è già aperto ed esce dalla sub se è gia aperto altrimenti lo apre, solo che se ci sono altri .xls non ci riesce e non capisco perchè. Ciao |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
ho provato anch'io le API da te proposte, in effetti, se sul titolo della windows non compare per intero
"Microsoft Excel - Cartel1.xls" la window non viene trovata non sono un profondo conoscitore di VB ma per similitudine, ho idea che devi utilizzare ulteriori API del tipo GetNextWindow() passandogli come handle hwnd = FindWindow(0,"Microsoft Excel") GetNextWindow(hwnd,GW_HWNDNEXT) ma sicuramente in VB vi è un metodo più semplice hai provato la FindWindowEx()? a me purtroppo molte API sotto Excel non funzionano quindi non posso fare molte prove |
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Se metti un msgbox qualunque nella open del workbook del file .xls richiesto:
Codice:
Private Sub Workbook_Open() MsgBox "ciao" End Sub ![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma se è già aperto CAMBI.xls, ma non ha il focus, FindWindow te lo trova ?
In questo caso dovrebbe bastare usare nuovamente FindWindow per ottenere l'handle alla finestra di CAMBI.xls...poi gli setti il focus con l'API SetFocus... |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Se Cambi.xls è già aperto l'IF va su else ed esce dalla sub.
Io voglio aprire Cambi.xls solo se non è già aperto, solo che se ci sono altri .xls findwindows non ci riesce, ovvero, ci riesce ma una volta dato ok a msgbox sparisce. se provi questo esempio capirai: Codice:
'in un modulo Option Compare Database Option Explicit Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub excel() Dim path Dim MyXL Dim hwnd As Long path = "c:\documenti\excel\Cartel1.xls" hwnd = FindWindow(vbNullString, "Microsoft Excel - Cartel1.xls") If hwnd = 0 Then ' 0 significa che il file di Excel non è in esecuzione. Set MyXL = GetObject(path) MyXL.Application.Visible = True MyXL.Parent.Windows(1).Visible = True Set MyXL = Nothing Else Exit Sub End If End Sub 'in una maschera Private Sub Form_Load() excel End Sub 'in Cartel1.xls Private Sub Workbook_Open() MsgBox "ciao" End Sub |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Codice:
'in un modulo 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 SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long Sub excel() Dim path Dim MyXL Dim hwnd As Long path = "c:\documenti\excel\Cartel1.xls" hwnd = FindWindow(vbNullString, "Microsoft Excel - Cartel1.xls") If hwnd = 0 Then ' 0 significa che il file di Excel non è in esecuzione. Set MyXL = GetObject(path) MyXL.Application.Visible = True MyXL.Parent.Windows(1).Visible = True Set MyXL = Nothing hwnd = FindWindow(vbNullString, "Microsoft Excel - Cartel1.xls") If hwnd <> 0 Then SetForegroundWindow(hwnd) SetFocus(hwnd) End If Else Exit Sub End If End Sub 'in una maschera Private Sub Form_Load() excel End Sub 'in Cartel1.xls Private Sub Workbook_Open() MsgBox "ciao" End Sub |
|
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Ho provato la tua modifica, ma non cambia nulla!
Dopo aver dato l'ok a msgbox cartel1 sparisce! E poi hai messo: Codice:
hwnd = FindWindow(vbNullString, "Microsoft Excel - Cartel1.xls") If hwnd <> 0 Then SetForegroundWindow(hwnd) SetFocus(hwnd) End If E' chiaro che se è già aperto non devo aprirlo ancora. La mia sub serve per aprire Cartel1 solo nel caso non sia già aperta. Spero di essere stato chiaro. |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
devi andare a cercarla la window con GetNextWindow()
ci sono in rete un sacco di esempi adatti allo scopo prova una cosa del genere: Codice:
hwindow = FindWindow(vbNullString, "Microsoft Excel") if hwindow <> 0 then hwindow = FindWindowEx(hwindow, 0, "Cambi.xls", vbNullString) end if If hwindow = 0 Then msgbox "Cambi.xls non trovata" msgbox hwindow |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
sob, doppio post
![]() |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: Feb 2001
Città: Reggio Emilia
Messaggi: 230
|
Già provato, non funzia!
![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
hai provato enumerando le window?
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:54.