Excel ComboBox Filtra le sole celle piene

Anonimo
2017-04-13T10:17:05+00:00

Buon Giorno a tutti .

Ho creato un DB Excel che viene alimentato attraverso una UserForm1 e aggiornato mediante altra UserForm2 .

Per la UserForm2 uso una ComboBox che legge una certa colonna del DB che ha due possibili contenuti , VUOTO oppure un testo sempre uguale , e in base alla selezione le TextBox della UserForm si rienpie di conseguenza .

Vorrei che aprendo la ComboBox vengano visualizzati , e quindi siano selezionabili , le sole celle del DB che contengono il testo .

Grazie per l'attenzione e per gli eventuali suggerimenti .

Ivo

Parte del Codice :

Option Explicit

Dim Count As Integer

Dim sh As Worksheet

Private Sub UserForm_Initialize()

    Set sh = ThisWorkbook.Worksheets("DataBase")

    Call mCaricaComboBox

End Sub

Private Sub mCaricaComboBox()

    Dim lRiga As Long

    Dim lng As Long

    With sh

        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        For lng = 2 To lRiga

           Me.ComboBox1.AddItem (.Cells(lng, 13).Value)

        Next

    End With

End Sub

Private Sub ComboBox1_Click()

    Dim lRiga As Long

    Dim lng As Long

    With sh

    ' La riga sotto determina il numero di righe piene

        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        For lng = 2 To lRiga

            If CStr(.Cells(lng, 13).Value) = Me.ComboBox1.Text Then

                Me.TextBox1.Text = .Cells(lng, 1).Value

                Me.TextBox2.Text = .Cells(lng, 2).Value

                Me.TextBox3.Text = .Cells(lng, 3).Value

                Me.TextBox4.Text = .Cells(lng, 4).Value

                Me.TextBox5.Text = .Cells(lng, 5).Value

                Me.TextBox6.Text = .Cells(lng, 6).Value

                Me.TextBox7.Text = .Cells(lng, 7).Value

                Me.TextBox8.Text = .Cells(lng, 8).Value

                Me.TextBox9.Text = .Cells(lng, 9).Value

                Me.TextBox10.Text = .Cells(lng, 10).Value

                Me.TextBox11.Text = .Cells(lng, 11).Value

                Me.TextBox12.Text = .Cells(lng, 12).Value

                Me.TextBox13.Text = .Cells(lng, 13).Value

                Exit For

            End If

        Next

    End With

End Sub

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-04-21T09:16:26+00:00

Ho trovato la soluzione , la riporto qui di seguito potrebbe essere utile ad altri !

Private Sub mCaricaComboBox()

' *********************************************************************************************************************************

Dim x As Long      '   Definisce la Variabile "x"

    For x = 2 To Range("M" & Rows.Count).End(xlUp).Row                  '    Esegue un ciclo su tutte i Valori delle Celle in Colonna "M"

        If Cells(x, 13).Value <> "" Then ComboBox1.AddItem Cells(x, 13)   '    Se il Valore delle Celle in Colonna "M" <> "", popola ComboBox

    Next x

' *********************************************************************************************************************************

End Sub

Grazie  a tutti .

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-04-19T08:29:58+00:00

    Grazie Norman per la risposta ma credo di essermi spiegato male .

    Allego il link dove è possibile scaricare l'intero file per maggior chiarezza .

    Ho inserito nel Db alcune righe per rendere ancor più visibile il problema .

    https://drive.google.com/file/d/0BwOpqd7vczipbG1QZUpGWVRzZGc/view?usp=sharing

    PASSWORD PER ACCEDERE AL DATA BASE ( Ivo )

    Sezione Conferma

    Grazie ancora .

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-04-13T15:57:30+00:00

    Ciao Ivano,

    Ho creato un DB Excel che viene alimentato attraverso una UserForm1 e aggiornato mediante altra UserForm2 .

    Per la UserForm2 uso una ComboBox che legge una certa colonna del DB che ha due possibili contenuti , VUOTO oppure un testo sempre uguale , e in base alla selezione le TextBox della UserForm si rienpie di conseguenza .

    Vorrei che aprendo la ComboBox vengano visualizzati , e quindi siano selezionabili , le sole celle del DB che contengono il testo .

    Grazie per l'attenzione e per gli eventuali suggerimenti .

    Ivo

    Parte del Codice :

    Option Explicit

    Dim Count As Integer

    Dim sh As Worksheet

    Private Sub UserForm_Initialize()

        Set sh = ThisWorkbook.Worksheets("DataBase")

        Call mCaricaComboBox

    End Sub

    Private Sub mCaricaComboBox()

        Dim lRiga As Long

        Dim lng As Long

        

        With sh

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

            

            For lng = 2 To lRiga

            

               Me.ComboBox1.AddItem (.Cells(lng, 13).Value)

            

            Next

            

        End With

        

       

    End Sub

    Private Sub ComboBox1_Click()

        Dim lRiga As Long

        Dim lng As Long

         

        With sh

        ' La riga sotto determina il numero di righe piene

        

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

              

            For lng = 2 To lRiga

                If CStr(.Cells(lng, 13).Value) = Me.ComboBox1.Text Then

                    Me.TextBox1.Text = .Cells(lng, 1).Value

                    Me.TextBox2.Text = .Cells(lng, 2).Value

                    Me.TextBox3.Text = .Cells(lng, 3).Value

                    Me.TextBox4.Text = .Cells(lng, 4).Value

                    Me.TextBox5.Text = .Cells(lng, 5).Value

                    Me.TextBox6.Text = .Cells(lng, 6).Value

                    Me.TextBox7.Text = .Cells(lng, 7).Value

                    Me.TextBox8.Text = .Cells(lng, 8).Value

                    Me.TextBox9.Text = .Cells(lng, 9).Value

                    Me.TextBox10.Text = .Cells(lng, 10).Value

                    Me.TextBox11.Text = .Cells(lng, 11).Value

                    Me.TextBox12.Text = .Cells(lng, 12).Value

                    Me.TextBox13.Text = .Cells(lng, 13).Value

                    Exit For

                End If

            Next

        End With  

    End Sub

    Tra diversi possibili approcci, prova qualcosa del genere:

    '=========>>

    Option Explicit

    Dim Count As Long

    Dim SH As Worksheet

    '--------->>

    Private Sub UserForm_Initialize()

        Dim Ctrl As MSForms.Control

        Dim i As Long

        Set SH = ThisWorkbook.Worksheets("DataBase")

        For i = 1 To 13

            Me.Controls("TextBox" & i).Visible = False

        Next i

        Call mCaricaComboBox

    End Sub

    '--------->>

    Private Sub mCaricaComboBox()

        Dim lRiga As Long

        Dim lng As Long

        With SH

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

            For lng = 2 To lRiga

                Me.ComboBox1.AddItem (.Cells(lng, 13).Value)

            Next

        End With

    End Sub

    '--------->>

    Private Sub ComboBox1_Click()

        Dim lRiga As Long

        Dim lng As Long

        Dim i As Long

        Dim vVal As Variant

        With SH

            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

            For lng = 2 To lRiga

                If CStr(.Cells(lng, 13).Value) = Me.ComboBox1.Text Then

                    For i = 1 To 13

                        vVal = .Cells(lng, i).Value

                        If vVal <> vbNullString Then

                            With Me.Controls("TextBox" & i)

                                .Visible = True

                                .Value = vVal

                            End With

                        End If

                       Next i

                    Exit For

                End If

            Next

        End With

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento