Discussione:
VB e Excel - fare riferimento al file già aperto
(troppo vecchio per rispondere)
LupoNero
2006-05-23 14:41:12 UTC
Permalink
Ciao a tutti,
per aprire un file excel con VB e poi scriverci dentro utilizzo il seguente
codice

'INIZIO APERTURA FILE
Set Xapp = New Excel.Application
Set Xwork = Xapp.Workbooks.Add("C:\NomeFile.xls")
Set Xshit = Xwork.Sheets("NOME FOGLIO")
Xapp.Visible = True
'FINE APERTURA FILE


Questo però mi costringe ad assegnare il percorso e nome del file ed inoltre
non mi consente di far selezionare una o più celle all'utente.
Vorrei pertanto poter aprire manualmente (senza VB) Excel, selezionare le
celle che mi interessano e quindi avviare il codice di cui sopra facendo
riferimento al file correntemente aperto ed in primo piano.

Come posso fare?

Ringrazio tutti in anticipo.
Psoftp
2006-05-23 14:46:24 UTC
Permalink
Post by LupoNero
Ciao a tutti,
per aprire un file excel con VB e poi scriverci dentro utilizzo il seguente
codice
'INIZIO APERTURA FILE
Set Xapp = New Excel.Application
Set Xwork = Xapp.Workbooks.Add("C:\NomeFile.xls")
Set Xshit = Xwork.Sheets("NOME FOGLIO")
Xapp.Visible = True
'FINE APERTURA FILE
Questo però mi costringe ad assegnare il percorso e nome del file ed inoltre
non mi consente di far selezionare una o più celle all'utente.
Vorrei pertanto poter aprire manualmente (senza VB) Excel, selezionare le
celle che mi interessano e quindi avviare il codice di cui sopra facendo
riferimento al file correntemente aperto ed in primo piano.
Come posso fare?
Ringrazio tutti in anticipo.
A questo punto usa VBA direttamente da EXCEL. No?
--
Psoftp -- Eyes on Software --
http://www.mynewsgate.net/mp.php?u=19242
LupoNero
2006-05-23 14:53:22 UTC
Permalink
Post by Psoftp
A questo punto usa VBA direttamente da EXCEL. No?
Vorrei evitarlo, in quanto lo stesso programma VB deve poter lavorare con
più file diversi.
L'utilizzo di VBA mi costringe a copiare il codice VBA su tutti i file che
mi servono con conseguente complicazione della manutenzione degli stessi.

A meno chè non si possa salvare le macro VBA in un file esterno e quindi
caricarle in qualche modo ogni volta che serve....


Ciao e grazie
Elef
2006-05-24 07:35:42 UTC
Permalink
Infatti, poui mettere il tuo codice VBA in un workbook a parte nella
cartella xlstartup in modo che venga aperto all'avvio di excel. In quel modo
le tue macro saranno disponibili su tutti i file aperti.
Tieni presente che da dentro il tuo codice, ovunque si trovi,
ActiveWorkbook ti ritorna il file della finestra attiva; ThisWorkbook quello
in cui si trova il codice.
Ciao
Elef
Post by LupoNero
Post by Psoftp
A questo punto usa VBA direttamente da EXCEL. No?
Vorrei evitarlo, in quanto lo stesso programma VB deve poter lavorare con
più file diversi.
L'utilizzo di VBA mi costringe a copiare il codice VBA su tutti i file che
mi servono con conseguente complicazione della manutenzione degli stessi.
A meno chè non si possa salvare le macro VBA in un file esterno e quindi
caricarle in qualche modo ogni volta che serve....
Ciao e grazie
Fabio
2006-05-23 15:17:24 UTC
Permalink
Post by LupoNero
Ciao a tutti,
per aprire un file excel con VB e poi scriverci dentro utilizzo il
seguente codice
'INIZIO APERTURA FILE
Set Xapp = New Excel.Application
Set Xwork = Xapp.Workbooks.Add("C:\NomeFile.xls")
Set Xshit = Xwork.Sheets("NOME FOGLIO")
Xapp.Visible = True
'FINE APERTURA FILE
Questo però mi costringe ad assegnare il percorso e nome del file ed
inoltre non mi consente di far selezionare una o più celle all'utente.
Prova allora con la GetObject anzichè fare un New Excel.Application,
dovrebbe agganciarsi all'istanza di excel in esecuzione.
Poi con il DOM di Excel (che non conosco bene) dovresti poter facilmente
risalire all'ActiveSheet.

Ciao
LupoNero
2006-05-23 17:32:08 UTC
Permalink
Post by Fabio
Prova allora con la GetObject anzichè fare un New Excel.Application,
dovrebbe agganciarsi all'istanza di excel in esecuzione.
Poi con il DOM di Excel (che non conosco bene) dovresti poter facilmente
risalire all'ActiveSheet.
Ho risolto con il seguente codice:

Private Sub Command4_Click()
Dim Excl As Excel.Application
Dim Wbk As Excel.Workbook
Dim Wsht As Object
Dim nriga As Integer
Dim ncol As Integer
Dim ValCella As Variant

On Error Resume Next

Set Excl = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
MsgBox "Impossibile continuare perchè Microsoft Excel non è
attivo!", vbCritical
Else
Set Wsht = Excl.ActiveSheet
MsgBox "Prova"
'INIZIO LETTURA E SCRITTURA FILE
nriga = 1
ncol = 1
ValCella = Wsht.Cells(nriga, ncol).Value
'FINE LETTURA E SCRITTURA FILE
End If
End Sub




Grazie!
Loading...