PDA

View Full Version : VBA semplice


misterx
30-07-2003, 12:15
Con uno script presente in "script.xls" apro un file "dati.xls" dal quale prelevo alcuni dati e li deposito inel foglio del file "script.xls"

i miei desideri sono:

a) quando apro "script.xls" e lancio il suo script, "dati.xls" non deve essere visibile all'utente

b) se manipolo "script.xls" non mi deve venire chiesto se intendo salvare le modifiche in quanto "script.xls" è un foglio di lavoro che uso solo per visualizzare dati particolari presenti in altri fogli di lavoro

grazie e buone vacanze :)

octopus_71
30-07-2003, 12:23
allora:

1) aggiungi <Nome_applicazione>.Visible = False

2) aggiungi <Nome_applicazione>.displayAlerts = False

dove <Nome_applicazione> è l'oggetto Application che punta al file "dati.xls" che hai aperto

ciao

misterx
30-07-2003, 20:04
innazitutto grazie per le dritte; ho provato con un:

Application.Visible = False

ed al termine......

Application.Visible = True

ma non è quello che cercavo in quanto viene:

a) mostrata la finestra di Excel (il programma)
b) letta quindi la linea della macro Application.Visible = False, nascosto completamente Excel (programma + foglio di lavoro)

ed al termine rivisualizzato il tutto con un effetto poco professionale purtroppo

sarebbe bello poter caricare un foglio di lavoro Hidden

Poi, ho provato ThisWorkbooks.Saved = True per evitare la richiesta di salvataggio e funziona solo se il foglio di excel non viene aperto in una finestra di Internet Explorer

che casotto !!!

octopus_71
31-07-2003, 09:11
dunque, per il primo punto ti scrivo il codice che io utilizzo generalmente.

Set dati = New Excel.Application
dati.Workbooks.Open <path\nome_file>
dati.Visible = False
dati.ScreenUpdating = False
... operazioni sull'applicazione "dati"

Questo codice non mi apre nessuna finestra, tutto viene eseguito in background.

Per il secondo punto non ho esperienza di Internet Explorer, però anch'io utilizzo la proprietà Saved ma per poter chiudere il foglio di lavoro senza che mi mostri la finestra di salvataggio.

Piuttosto non è che hai esperienza di Functions su Excel?

misterx
31-07-2003, 11:52
ho letto del tuo problema ma non ho mai richiamato Function o Sub in celle di Excel

octopus_71
31-07-2003, 12:25
almeno tu hai risolto?

misterx
31-07-2003, 12:58
purtroppo non come dico io :(

octopus_71
31-07-2003, 13:08
Mi dispiace. Comunque anche io faccio qualcosa che è simile a ciò che stai facendo tu. In pratica apro un file Excel (apro l'applicazione ed il foglio contemporaneamente), vi carico i dati dal db, lo salvo e lo chiudo senza che però venga mostrato alcunché a video (si tratta di un processo in background). Per questo non capisco come mai da te non funzioni...

:(

misterx
31-07-2003, 14:49
aspetta, il mio è un lavoro leggermente diverso

Il file (A) che apre l'utente, contiene uno script VBA.
Quando il file (A) viene aperto, apre un file (B) dal quale (A) eredita alcuni dati contenuti in (B) e li mostra all'utente.

Tradotto in pratica:

a) apro il file A che contiene la macro
b) viene eseguita la macro A
c) la macro apre il file B (sarebbe meglio se in background ma non mi riesce)
d) durante il processo, alcuni dati del file B finiscono nel file A
e) il file B si chiude senza chiedere niente all'utente
f) il file A rimane aperto di modo che l'utente ne vede il risultato
g) essendo ora stato modificato il file A dalla macro, Excel quando l'utente chiude il file A, chiede se salvare o meno il file in quanto è stato modificato (questo almeno in parte è stato risolto)

il punto (c) è il più balordo in quanto se nascondo il foglio, la macro non riesce a trovare i dati in esso contenuti

mah.....

octopus_71
31-07-2003, 15:08
vediamo i punti:

c) hai provato a mettere prima dati.Visible = False poi dati.Workbooks.Open <> ed infine dati.ScreenUpdating = False?

e, g) ho fatto così:
dati.Windows("<Finestra_da_chiudere>").Close False

fammi sapere

misterx
01-08-2003, 09:03
le ho provate un pò di tutte e penso che il mio problema stia nel far parlare le due Application


miofile = "dati.xls"

Set dati = New Excel.Application

dati.Visible = False

dati.Workbooks.Open miofile



For n = 1 To Sheets.Count

Set mf = Worksheets(Sheets(n).Name)

questa :rolleyes: dovrebbe essere l'Applicazione che contiene i dati da prelevare e spedire all'altro foglio ma con molta probabilità la dichiarazione è errata: mf non ritorna nulla

octopus_71
01-08-2003, 11:18
scusa ma non capisco bene questa istruzione:

Set mf = Worksheets(Sheets(n).Name)

sia worksheets che Sheets si riferiscono allo stesso workbook?

misterx
01-08-2003, 13:55
beh, si in quanto un semplice

Set mf = Sheets(n).Name


non è sufficiente

octopus_71
01-08-2003, 14:33
certo, ma dovrebbe essere:

Set mf = ActiveWorkBook.Worksheets(WorkBooks("<l'altro>").Sheets(n).Name))

o qualcosa del genere, ma forse non ho capito ciò che vuoi fare :confused: .

cmq non ti posso aiutare in altro modo :rolleyes: , se ho qualche idea ti faccio sapere

ciao