Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

vba excel: popolare combox con nome fogli

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel: popolare combox con nome fogli

Postdi karug64 » 22/04/20 20:16

Salve a tutti.

Ho questo codice con cui vorrei compilare un combobox con i nomi di un foglio che apro (dopo averne selezionato il nome)

Il mio file xlsm si chiama "Pippo.xlsm"

Codice: Seleziona tutto
Set wbIni = Workbooks.Open(UserForm1.TextIniFile.Text)
       
            UserForm1.ComboBox4.Clear
            For I = 1 To Sheets.Count
                UserForm1.ComboBox4.AddItem Sheets(I).Name
            Next
            UserForm1.ComboBox4.Value = ActiveSheet.Name
           
            wbIni.Close


Ebbene, il codice fa questo:
1) apre il file TextIniFile
2) legge i fogli (ce n'è uno solo)
3) popola il combobox

ma ....

dopo aver finito di popolare, (blocco e verifico che in effetti "count" = 1) invece di chiudere il foglio (wbIni,close) continua a leggere i fogli del fiel "Pippo.xslm" (count diventa 3) e di conseguenza non riesce a chiudere wbIni segnalandomi errore perchè manca oggetto.

Non capisco proprio ....

Un aiuto ? Grazie
Office 2010
karug64
Utente Senior
 
Post: 741
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: vba excel: popolare combox con nome fogli

Postdi Anthony47 » 23/04/20 01:40

Temo che la risposta al quesito sia in quello che non hai detto ma immagino: quel codice fa parte della gestione di qualche controllo della userform, quindi e' inserito nel "modulo di classe" della userform.
Per definizione tutto quello che viene detto all'interno di un modulo di classe e' riferito al "padre", cioe' al workbook in cui e' inserita la userform.
Insomma in Combobox ci finiranno i nomi dei fogli del file che contiene la userform, non quelli del file che vai ad aprire.
Prova indirizzando esplicitamente il workbook, e non lasciarlo all'interpretazione del vba; tipo
Codice: Seleziona tutto
            For I = 1 To wbIni.Sheets.Count
                UserForm1.ComboBox4.AddItem wbIni.Sheets(I).Name
            Next
            UserForm1.ComboBox4.Value = ActiveSheet.Name

Ma non sono certo che fuzioni, continua a leggere.

Comunque sappi che sei una una strada pericolosa...
Se la form e' aperta in modalita' standard=Modal, allora accedere ad altre aree di Excel (un nuovo workbook) sarebbe vietato dalle specifiche Microsoft e in alcune versioni provoca (provocava?) comportamenti assurdi
Ricordo che una volta, ero forse su XL2013, con un combobox pensavo di scegliere quale foglio selezionare. L'effetto era pero' che il foglio che cercavo veniva visualizzato, ma il focus era ancora sul foglio di partenza; insomma mi sembrava di scrivere in A2 di FoglioB ma scrivevo in A2 di FoglioA

Quindi va bene sperimentare, ma collauda con accuratezza l'effetto non solo sul tuo pc ma anche su quello degli utenti.

Valuta anche di aprire le form in modalita' "vbModeless", ma in questo caso la programmazione della form e' un po' piu' articolata.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17044
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: popolare combox con nome fogli

Postdi karug64 » 23/04/20 07:51

Ciao Anthony.

Dici bene, ovviamente....

Il codice è all'interno di una form.
Specifico di più:

1) nella form c'è un controllo TAB
2) nel primo tab c'è codice analogo (per altre elaborazioni) e funziona.
3) avendo necessità di un nuovo pulsante che operi su fogli diversi ho creato un nuovo TAB e vi ho messo i controlli che mi servono ed in più un commadbutton per fare le azioni richieste (so che non è bene duplicare codice, ma avevo bisogno di andare avanti .... e sono rimasto indietro....)
4) il codice postato sta dentro un evento click di quest'ultimo commandbutton (e non funziona)

Non so se la cosa può essere di aiuto per capire il problema ...

Grazie
Office 2010
karug64
Utente Senior
 
Post: 741
Iscritto il: 20/11/11 21:22

Re: vba excel: popolare combox con nome fogli

Postdi Anthony47 » 23/04/20 15:12

Come ti ho detto sei su una strada pericolosa, se mentre la form e' aperta in movalita' "Modal" (quella standard) modifichi parte di excel.
La doc di Microsoft dice "When a UserForm is modal, the user must respond before using any other part of the application"; cioe' devi chiudere la form prima di modificare l'applicazione.
Il problema e' che violare questa cosa non provoca (non e' detto che provochi) un errore run-time, ma provoca (puo' provocare) comportamenti sbagliati.

Ribadendo che "va bene sperimentare, ma collauda con accuratezza l'effetto non solo sul tuo pc ma anche su quello degli utenti" ti chiedo di pubblicare un file dimostrativo con le informazioni su come usarlo; cosi' vedo sulla mia versione come si comporta.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17044
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: popolare combox con nome fogli

Postdi karug64 » 23/04/20 16:26

Ok. Tutto chiaro.

Ma allora, di fatto, le form non vanno utilizzate ? E' uno strumento poco consigliato.

La soluzione allora qual è ? Quella di usare dei controlli in un foglio da cui lanciare le varie macro ? O utilizzare altri linguaggi di programmazione esterni per manipolare i fogli Excel ?

Puoi darmi un consiglio (anche perché il mio software era in una fase avanzata e di fatti per questa cosa mi trovo a dover rifare tutto ....)

Grazie
Office 2010
karug64
Utente Senior
 
Post: 741
Iscritto il: 20/11/11 21:22

Re: vba excel: popolare combox con nome fogli

Postdi Anthony47 » 23/04/20 23:18

Se apri la form in modalita' standard=Modal allora puoi interagire con l'ambiente, non puoi modificarlo.
Ma se apri la form in modalita' "vbModeless" allora la form puo' vivere in un ambiente che si modifica; quindi forse devi provare ad aprire in vbmodeless.
Pero' ho l'impressione che stai costruendo un tuo "ecosistema" all'interno di Excel; non so quale e' l'obiettivo, ma se vuoi creare un modo facile di interagire con le macro allora prima dovresti valutare di utilizzare il "Ribbon" (la Barra Multifunzione) e la Barra di accesso rapido.
Sul ribbon puoi aggiungere "Schede", "Gruppi" e Comandi; sulla Barra di accesso rapido puoi inserire comandi da tenere sempre a disposizione; questi "comandi a disposizione" possono anche essere legati al singolo Workbook.
E' abbastanza facile replicare una personalizzazione su altri Pc tramite l'opzione Esporta /Importa personalizzazione

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17044
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: popolare combox con nome fogli

Postdi karug64 » 24/04/20 23:12

Anthony47 ha scritto:Sul ribbon puoi aggiungere "Schede", "Gruppi" e Comandi; sulla Barra di accesso rapido puoi inserire comandi da tenere sempre a disposizione; questi "comandi a disposizione" possono anche essere legati al singolo Workbook.
E' abbastanza facile replicare una personalizzazione su altri Pc tramite l'opzione Esporta /Importa personalizzazione

Ciao


Potrebbe essere una soluzione.
Il mio problema è che le form mi servono perchè devo permettere all'utente di fare delle scelte del tipo (per esempio):

1) scegli una cartella da dove leggere tutti i file presenti di excel (commandbutton)
2) seleziona se vuoi l'analisi analitica o no (optionbutton)
3) scegli se creare il file di log delle transazioni (optionbutton)

Inserendo una ribbon in cui inserire le Schede e i comandi, come potrei gestire una, benchè minima, parametrizzazione ?

Se è possibile, mi butto a capofitto su questa soluzione...
Grazie
Office 2010
karug64
Utente Senior
 
Post: 741
Iscritto il: 20/11/11 21:22

Re: vba excel: popolare combox con nome fogli

Postdi Anthony47 » 25/04/20 10:04

A) Form in modalita' standard
Puoi benissimo usare una userform per chiedere all'utente di fare delle scelte, ma una volta memorizzate le scelte, se vuoi modificare l'ambiente (aprire un nuovo workbook) allora quella form ha terminato il suo effetto e va chiusa. Nel nuovo ambiente puoi aprire altre form che anche loro devono vivere limitatamente a quell'ambiente.
B) Form in modalita' vbModeless (cioe' laciata con UserformX.Show vbModeless)
La form vive ma non dimentica suo ambiente originale. Puoi farla interagire con l'ambiente esterno sempre indirizzandolo in modo esplicito e completo.
Cioe', ad esempio, non puoi scrivere For I = 1 To Sheets.Count ma dovrai scrivere For I = 1 To Workbooks("Quale?").Sheets.Count



Il mio problema è che le form mi servono perchè devo permettere all'utente di fare delle scelte del tipo (per esempio):
1) scegli una cartella da dove leggere tutti i file presenti di excel (commandbutton)
2) seleziona se vuoi l'analisi analitica o no (optionbutton)
3) scegli se creare il file di log delle transazioni (optionbutton)

Per la 1 puoi usare FileDialog che offre l'interfaccia classica di windows; vedi ad esempio viewtopic.php?f=26&t=111278
Con FileDialog puoi cercare un file o una directory; vedi https://docs.microsoft.com/it-it/office ... filedialog

Per la 2 e 3 puoi o usare una userform che, ottenute le risposte, viene chiusa; ma potresti anche usare due msgbox per chiedere istruzioni all'utente; es
Codice: Seleziona tutto
Rispo = MsgBox("Vuoi eseguire l'analisi analitica?", vbYesNo, "Scegli")
E' meno brillante, ma funziona lo stesso.

Tutto questo fa parte di una macro che puo' essere avviata da un pulsante che hai inserito in un tuo "file Master", o da un pulsante che hai inserito nella Barra di accesso rapido, o da un comando che hai aggiunto in un "Gruppo" di una "Scheda" del tuo Ribbon personalizzato. Sulla personalizzazione del Ribbon pubblichero' a breve un messaggio.

Insomma hai varie opzioni; scegli la piu' semplice da realizzare rapidamente e intanto sperimenti come puoi usare le altre.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17044
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel: popolare combox con nome fogli

Postdi karug64 » 25/04/20 10:51

OK. Grazie.

Ci sto lavorando su.
Attendo i tuoi aggiornamenti !!!
Office 2010
karug64
Utente Senior
 
Post: 741
Iscritto il: 20/11/11 21:22

Re: vba excel: popolare combox con nome fogli

Postdi Anthony47 » 25/04/20 12:21

Ho inserito la procedura di personalizzazione della Barra Multifunzione, vedi viewtopic.php?f=26&t=103893
Avatar utente
Anthony47
Moderatore
 
Post: 17044
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "vba excel: popolare combox con nome fogli":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti