Come da titolo, il problema è come "riempire" una combobox coi dati da visualizzare, che non risiedono su un foglio excel, ma credo che il mio problema sia più di "logica del VBA" che altro, nel senso, dovrei capire dove recupera il VBA i dati per "costruire" i suoi elementi grafici.
Il problema nasce all'interno di una macro che, da word:
- fa scegliere un file excel tramite finestra di dialogo e ne ricava l'indirizzo (funzionante);
- di questo file excel, viene letto e memorizzato l'elenco dei fogli (funzionante);
- ora il problema: l'elenco dei fogli deve andare a riempire la combobox, affinchè l'utente scelga il foglio desiderato, e l'area di stampa venga inserita nel file di word.
Pensavo che potessi creare una combobox all'interno della macro, riempirla e poi fare combo.show, ma non è possibile, ho provato a creare una userform con all'interno una combobox, pensando di passargli i dati durante combobox_initialize, ma non posso passargli dati, quindi sono bloccato.
Come faccio a passare alla combobox al momento della sua creazione l'elenco dei fogli che ho precedentemente memorizzato in un array? Nel C++ passerei questo array tramite il costruttore, qui nel VBA, mi pare che questo non sia possibile...
Quindi che logica bisogna seguire?
Allego il file di word che sto utilizzando come prova, e qui il codice della macro
codice:Sub insertExcel() Dim wrdApp As Word.Application Dim wrdDoc As Word.Document Set wrdApp = GetObject(, "Word.Application") wrdApp.Visible = True Set wrdDoc = wrdApp.ActiveDocument '.Documents.Add Dim s As Variant Dim Res As Integer Dim dlgOpen As FileDialog Set dlgOpen = Application.FileDialog( _ FileDialogType:=msoFileDialogOpen) dlgOpen.AllowMultiSelect = False dlgOpen.Filters.Clear dlgOpen.Filters.Add "Custom Excel Files", "*.xlsm, *.xlsx, *.csv, *.xls" dlgOpen.FilterIndex = 1 Res = dlgOpen.Show Dim xlApp As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False If Not Res = 0 Then For Each s In dlgOpen.SelectedItems 'There is only one With wrdApp .Selection.TypeText Text:=s 'passaggio fatto solo per verificare che acquisissi correttamente l'indirizzo del file, poi verrà tolto .Selection.TypeParagraph End With xlApp.Workbooks.Open (s) Next End If Dim i As Integer Dim sheets As Integer sheets = xlApp.ActiveWorkbook.sheets.Count Dim fg() As String ReDim fg(0 To sheets - 1) As String For i = 0 To xlApp.ActiveWorkbook.sheets.Count - 1 fg(i) = xlApp.ActiveWorkbook.sheets(i + 1).Name ' Dentro "fg" avrò il nome del foglio di lavoro corrente ' quindi posso decidere di riportarlo da qualche parte. 'MsgBox "Nome foglio : " & fg(i) Next i Dim combo As ComboBox 'pensavo che potessi poi fare combo.show, ma non è possibile... 'ciclo for tramite il quale pensavo di poter inserire i nomi dei fogli nel combobox, e poi visualizzarlo For i = 0 To UBound(fg) - 1 MsgBox "fg(" & i & ") " & fg(i) ' combo.AddItem "ciao" Next Call UserForm1.Show 'come faccio a passare a combobox1 i dati presenti in fg()? MsgBox "Finito!" xlApp.ActiveWorkbook.Close Set wrdDoc = Nothing Set dlgOpen = Nothing Set wrdApp = Nothing Set xlApp = Nothing End Sub

Rispondi quotando