2016-08-22 3 views
-1

Ich bin neu bei diesem (und einem Arzt). Ich möchte eine VBA Listbox aus einer Datenbank nur mit bestimmten Zeilen füllen. Das ist, was ich habe. Dank (im Voraus)Listbox füllen mit bestimmten Zeilen

Private Sub UserForm_Initialize() 

Hoja2.Activate 
ListBox1.ColumnCount = 5 
ListBox1.ColumnWidths = "70;90;90;90;70" 


ListBox1.AddItem "FIRST NAME" 
ListBox1.List(0, 1) = "LAST NAME" 
ListBox1.List(0, 2) = "LAST NAME 2" 
ListBox1.List(0, 3) = "BORN DATE" 
ListBox1.List(0, 4) = "AGE" 


Dim seguimiento As Integer 
Dim i As Integer 

seguimiento = Application.WorksheetFunction.CountA(Range("b:b")) 

For i = 1 To seguimiento 
    If Cells(i, 20) = "" Then 
    ListBox1.AddItem Cells(i, 3) 
    Else 
    End If 
Next i 

End Sub` 
+0

Also, was ist die Frage? –

+0

Welche Datenbank möchten Sie verbinden? Bitte stellen Sie die Frage klar – HA560

+0

youre richtig. Ich werde es versuchen. Ich bin ein Muttersprachler. Die Datenbank ist Blatt (hoja2), enthält Daten wie: Name, Nachname, Alter usw .; auf jeder Spalte; und ich möchte, dass die Listbox die bestimmten Zeilen anzeigt, die mit der Spalte T leer, so kann ich eine davon auswählen und einige Zellen dieser Zeile bearbeiten (Patient). –

Antwort

0

es tatsächlich schwierig ist, Listbox füllen Kriterien aus Ihrer Frage

vorausgesetzt, Sie wollen füllen listbox mit Zellen zu verstehen:

  • auf Zeilen, deren Spalte „T“ Zelle ist nicht leer
  • Zeilen von Zeile 2 bis zur letzten nicht leeren Zeile in Spalte "B" scannen
  • Werte von Spalten abrufen "C" Trog "G"

versuchen, den folgenden Code:

Option Explicit 

Private Sub UserForm_Initialize() 
    Dim seguimiento As Long, i As Long 
    Dim Data() As Variant '<--| use an array to store data to eventually fill ListBox list 
    Dim cell As Range 

    With Me.ListBox1 
     .ColumnCount = 5 
     .ColumnWidths = "70;90;90;90;70" 
    End With 

    i = 1 
    With Hoja2 '<--| refer to your worksheet 
     With .Range("T1:T" & .Cells(.Rows.Count, "B").End(xlUp).Row).SpecialCells(xlCellTypeConstants) '<--| refer to non blank cells in its column "T" (i.e. with column index 20) from row 1 to last non blank one in column "B" 
      seguimiento = .Count '<--| count those non empty cells 
      ReDim Data(1 To seguimiento + 1, 1 To Me.ListBox1.ColumnCount) '<--| redim data array rows accordingly (while setting columns to 5) 

      'fill data array first row with "headers" 
      Data(1, 1) = "FIRST NAME" 
      Data(1, 2) = "LAST NAME" 
      Data(1, 3) = "LAST NAME 2" 
      Data(1, 4) = "BORN DATE" 
      Data(1, 5) = "AGE" 

      ' loop through referred non blank cells and fill subsequent data array rows from corresponding cells in columns "C" through "G" 
      For Each cell In .Cells 
       i = i + 1 
       With cell 
        Data(i, 1) = .Offset(, -17) '<--| this refers to a cell in the same row as the current cell and in column "C", being offseted 17 columns back from current cell 
        Data(i, 2) = .Offset(, -16) '<--| this refers to a cell in the same row as the current cell and in column "D", being offseted 16 columns back from current cell 
        Data(i, 3) = .Offset(, -15) ' etc... 
        Data(i, 4) = .Offset(, -14) ' etc... 
        Data(i, 5) = .Offset(, -13) ' etc... 
       End With 
      Next cell 
     End With 
    End With 

    ListBox1.List = Data '<---| finally, fill listbox list with data array 
End Sub 
+0

wow. Danke. Ich bekomme nicht wirklich den ganzen Code, aber es hat mir geholfen. –

+0

Nicht ganz klar für mich, was Sie meinen, aber es ist ein neues Problem, und Sie sollten besser eine neue Frage mit den richtigen Details und Code – user3598756

+0

im obigen Fall, wie könnte ich eine Zeile (Name) in der Listbox auswählen und bearbeiten Referenz des Arbeitsblatts? Ich erkläre es. Ich dachte daran, eine Zeile der Listbox auszuwählen, dann ein Element einer Combobox auszuwählen und mit einem Klick auf eine Schaltfläche zu bestätigen, so dass das Element der Combobox eine bestimmte Zelle auf dem Arbeitsblatt füllen würde. @ user3598756 –

Verwandte Themen