Listbox um Funktion erweitern
#1
Hallo an alle,

habe eine Userform mit folgendem Code:

Code:
Private Sub ListBox1_Click()
 Dim pfadPDF As String
 Dim lZeile As Long
 
   'Wenn der Benutzer einen Namen anklickt, suchen wir
   'diesen in der Tabelle3 heraus und tragen die Daten
   'in die TextBoxen ein.
   
   'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte
   TextBox1 = ""
   TextBox2 = ""
   TextBox3 = ""
   TextBox4 = ""
   TextBox5 = ""
   TextBox6 = ""
   TextBox7 = ""
   TextBox8 = ""
   
   'Nur wenn ein Eintrag selektiert/markiert ist
   'If ListBox1.ListIndex >= 0 Then
   
       lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriftrn
       'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
       Do While Trim(CStr(Tabelle6.Cells(lZeile, 2).Value)) <> ""
       
           'Wenn wir den Namen aus der ListBox1 in der Tabelle3 Spalte 1
           'gefunden haben, übertragen wir die anderen Spalteninhalte
           'in die TextBoxen!
           If ListBox1.Text = Trim(CStr(Tabelle6.Cells(lZeile, 2).Value)) Then
           
               'TextBoxen füllen
               TextBox1 = Trim(CStr(Tabelle6.Cells(lZeile, 1).Value))
               TextBox2 = "Nr_" & Tabelle6.Cells(lZeile, 2).Value
               TextBox3 = Tabelle6.Cells(lZeile, 3).Value
               TextBox4 = Tabelle6.Cells(lZeile, 4).Value
               TextBox5 = Tabelle6.Cells(lZeile, 5).Value
               TextBox6 = Tabelle6.Cells(lZeile, 6).Value
               TextBox7 = Format(Tabelle6.Cells(lZeile, 7).Value, "Currency")
               TextBox7.BackColor = Tabelle6.Cells(lZeile, 12).DisplayFormat.Interior.Color
               TextBox8 = Tabelle6.Cells(lZeile, 9).Value
                           
               Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
           End If
       
           lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
       Loop
       
       pfadPDF = Worksheets("Konfiguration").Range("C3").Value
       Dim MyObj As Object, MySource As Object, file As Variant
       file = Dir(pfadPDF)
       While (file <> "")
       If InStr(file, UserForm2.TextBox2) Then
       UserForm2.TextBox9.Value = pfadPDF & file
       Exit Sub
       End If
       file = Dir
 Wend
   
End Sub

Code:
Private Sub UserForm_Initialize()
 
 Dim lZeile As Long
 
   'Alle TextBoxen leer machen
   TextBox1 = ""
   TextBox2 = ""
   TextBox3 = ""
   TextBox4 = ""
   TextBox5 = ""
   TextBox6 = ""
   TextBox7 = ""
   TextBox8 = ""
 
   'In dieser Routine laden wir alle vorhandenen
   'Einträge in die ListBox1
   ListBox1.Clear 'Zuerst einmal die Liste leeren
       
   lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriftrn
   'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
   Do While Trim(CStr(Tabelle6.Cells(lZeile, 2).Value)) <> ""
       
       'Aktuelle Zeile in die ListBox eintragen
       'ListBox1.AddItem "Rechnung Nr. " & Trim(CStr(Tabelle6.Cells(lZeile, 2).Value) & " vom " & Trim(CStr(Tabelle6.Cells(lZeile, 1).Value)) & " - " & Trim(CStr(Tabelle6.Cells(lZeile, 4).Value)))
       ListBox1.AddItem Trim(CStr(Tabelle6.Cells(lZeile, 2).Value))
       lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
   Loop
End Sub

Funktioniert soweit recht gut, nur möchte ich in der Listbox1 nicht alle Einträge von Spalte 1 haben, sondern sie an ein Bedingung knüpfn, z.B., wenn Tabelle6.Cells(lZeile, 11).Value = "" oder wenn Tabelle6.Cells(lZeile, 12).Value ist rot markiert.

Der Code befindet sich in der Tabelle Jahresübersicht und die Userform wird über den Button Mahnung senden ausgeführt.

Im Tabellenblatt Eingabe gibt es den Administratorbutton mit Passwort: "123" für die Bearbeitung.

Bin für jede Hilfe dankbar
Mfg


Angehängte Dateien
.xlsm   Verrechnung.xlsm (Größe: 961,47 KB / Downloads: 3)
Top
#2
Hallo Hatsch,

Du verwendest in Deinen codes doch schon Bedingungen, wo ist denn da nun das Problem?
Zitat:wenn Tabelle6.Cells(lZeile, 11).Value = ""

da wäre dann doch einfach das wenn durch if zu ersetzen ???

If Tabelle6.Cells(lZeile, 11).Value = ""
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo,

ja, das ist schon klar, aber wo genau muß ich diese Bedingung einfügen, daß sie greift?

Habe jetzt schon allerhand versucht, ohne Erfolg.

lg
Top
#4
Hallo,

im zweiten Code hast Du
ListBox1.AddItem Trim(CStr(Tabelle6.Cells(lZeile, 2).Value))

Das kommt dann unmittelbar darüber und drunter End If.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Hatsch
Top
#5
Ahhh...perfekt, dankeschön, jetzt hab ichs, nur noch eine Kleinigkeit, müßte auch prüfen ob die Zelle in Spalte L rot ist, hab das so gemacht:

Code:
If Tabelle6.Cells(lZeile, 11).Value = "" & Tabelle6.Cells(lZeile, 12).Interior.ColorIndex = 3 Then
       ListBox1.AddItem Trim(CStr(Tabelle6.Cells(lZeile, 2).Value))
       End If
       lZeile = lZeile + 1 'Nächste Zeile bearbeiten

Funktioniert aber komischerweise nicht, die Liste bleibt mit diesem Code leer.

Interior.ColorIndex = 3 sollte passen und es sind einige Zellen mit bedingter Formatierung rot eingefärbt, also versteh ich das Problem nicht. :/
Top
#6
https://stackoverflow.com/questions/2820...-using-vba
Beispiel
Code:
Sub FormCondExample()
Dim rg As Range: Set rg = Range("F16")
Dim cond As FormatCondition
   Set cond = rg.FormatConditions(1)
   Debug.Print cond.Interior.Color
End Sub
Top
#7
Hallo Storax,

wenn ich richtig verstanden habe wäre dieser Codeschnipsel zum bestimmen des color index, bei mir kommt 255 heraus, was mir aber nicht weiterhilft.

Habe jetzt aber gesehen, daß Zellen, die mit bedingter Formatierung eingefärbt sind, in den Eigenschaften nicht wirklich rot sind, d.h., wenn ich eine Zelle manuell rot einfärbe und meinen Code ausführe, funkt es.

Die Frage wäre also, wie ich diese bedingte Formatierung abrufen kann.

Danke
Top
#8
Zitat:.Die Frage wäre also, wie ich diese bedingte Formatierung abrufen kann.

Wie das prinzipiell geht, steht ich in meinem Codeschnipsel
Top
#9
Hallo

und was hat das kaufmännische & in der If-Abfrage zu suchen?

MfG Tom
Top
#10
@Storax

Hmmm...wenn ich deinen Codeschnipsel ausführe bekomme ich die Zahl 255 zurück.

Müßte abfragen, falls die Zelle bedingt formatiert rot ist, dann mach was:

if Tabelle6.Cells(lZeile, 12).Interior.ColorIndex = 3 funktioniert so leider nicht.

@Crazy Tom

Stimmt, das ist Unsinn, sollte AND sein
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste