Visualizzazione dei risultati da 1 a 5 su 5

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177

    [VBA] Popolare ComboBox

    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
    File allegati File allegati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.