VBA Verständnisfrage If = variable
#1
Hallo Community,

ein besserer Betreff fällt mir nicht ein. Ich habe folgendes Problem gehabt, welches ich "umständlich" gelöst habe. 
Allerdings würde ich in Zukunft es richtig machen!

Folgende If Abfragen gehen nicht:


Code:
If Worksheets("Aufgaben").Cells(ReiheNr, 1) = ListBox2.Column(0) Then


Code:
saveId = ListBox2.Column(0)
If Worksheets("Aufgaben").Cells(ReiheNr, 1) = saveId Then


Folgende If Abfrage mit verstecktem Label geht:

Code:
Label36.caption = ListBox2.Column(0)
If Worksheets("Aufgaben").Cells(ReiheNr, 1) = Label36.caption Then


Was mache ich bei den obigen 2 If Abfragen falsch?

Besten Dank im Voraus!

Vg Steve
Antworten Top
#2
Hallo,

die Datei mit dem vollständigen Quelltext würde helfen, die Frage zu beantworten.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hi,


Code:
If Worksheets("Aufgaben").Cells(ReiheNr, 1) = ListBox2.Column(0) Then


Ist grundsätzlich korrekt: Der Wert aus der angegebenen Zelle wird mit dem ausgewählten Eintrag der ersten Spalte der ListBox2 verglichen.
Hat die Variable ReiheNr denn den gewünschten Wert?
Was ergibt denn


Code:
MsgBox Worksheets("Aufgaben").Cells(ReiheNr, 1) & vbLf & ListBox2.Column(0)

Sind die Werte identisch?
Antworten Top
#4
Wenn Listbox1.Listindex=-1 dann gibt's ein Fehler bei     MsgBox ListBox1.Column(0)


Code:
Private Sub UserForm_Initialize()
    ListBox1.List = Range("A1:D10").Value
End Sub


Private Sub UserForm_Click()
   on error resume next
    Listbox1.listindex=-1
    MsgBox ListBox1.Column(0, 0)

    MsgBox ListBox1.Column(0)
    if err.number<>0 then msgbox "Fehler"

    ListBox1.ListIndex = 2
    MsgBox ListBox1.Column(0)
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Du greifst auf die falsch Property (Eigenschaft) zu
Das ist auch ein typischer Fehler, wenn man immer auf die Defaults draufhaut anstatt sich mit dem Object zu beschäftigen,

Wenn du nicht den in der ListBox selektieren Eintrag willst sondern auf die Liste der ListBox zugreifen willst:

ListBox1.List(0, 0)
oder welche Indizes du auch immer gerade magst.
Antworten Top
#6
Guten Morgen,

vielen Dank für die zahlreichen Antworten.

Ich versuche auch alle hiermit zu beantworten. Wobei ich glaube das snb auf der richtigen Spur ist. 
Ich fülle die Listbox wie folgt:

Code:
ListBox2.ColumnWidths = "15pt;25pt;80pt;55pt;70pt;130pt;50pt;50pt;40pt"
With Worksheets("Aufgaben")
         ReiheNr = 3
            With ListBox2
              Do While IsEmpty(Worksheets("Aufgaben").Cells(ReiheNr, 1)) = False
               If Worksheets("Aufgaben").Cells(ReiheNr, 8) = "Aufgabe" And Worksheets("Aufgaben").Cells(ReiheNr, 13) = Environ$("username") Then
                .AddItem ""
                .Column(0, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 1)
                .Column(1, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 4)
                .Column(2, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 7)
                .Column(3, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 9)
                .Column(4, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 10)
                .Column(5, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 14)
                .Column(6, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 12)
                .Column(7, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 11)
                .Column(8, .ListCount - 1) = Worksheets("Aufgaben").Cells(ReiheNr, 15)
             End If
            ReiheNr = ReiheNr + 1
            Loop
            End With
End With


Und anscheinend liegt es am .Listcount -1

Und der eigentliche Quellcode meiner eigentlichen Frage lautet:

Code:
Private Sub CommandButton3_Click()
Label38.Caption = ListBox2.Column(0)

With Worksheets("Aufgaben")
         ReiheNr = 3
              Do While IsEmpty(Worksheets("Aufgaben").Cells(ReiheNr, 1)) = False
               If Worksheets("Aufgaben").Cells(ReiheNr, 1) = Label38.Caption Then
                   Worksheets("Aufgaben").Cells(ReiheNr, 15) = "erledigt"
               End If
            ReiheNr = ReiheNr + 1
            Loop
End With


End Sub

Dieser funktioniert einwandfrei solange ich erst einen Label mit dem Inhalt aus Listbox2.Column(0) fülle.

Ich hatte mich nur gefragt warum ich den Umweg über eine Label.caption gehen muss und nicht gleich if xxxx = Listbox2.Column(0) gehen kann.

Ein MsgBox ListBox1.Column(0) gibt mir ebenfalls den richtigen Wert (Eine Zahl) aus!!
Antworten Top
#7
Hallo,

ich verweise auf meine Antwort unter #2.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
Hi,

mit Deiner Mappe wäre es natürlich einfacher - aber noch eine Möglichkeit:

Der Wert von ListBox2.Column(0) ist eine ZAHL und der Vergleichswert in der Tabelle ist eine TEXTzahl - also de facto TEXT. Damit wird Zahl mit Text vergleichen - und das gibt immer FALSCH.
Durch den Umweg der Zuweisung des Listboxinhaltes an das Label - genau dessen Caption - wird aus der Listboxzahl ein Text, da die Caption von Haus aus ein Text ist. Dadurch passt dann der Vergleich wieder.

Teste mal ohne das Label mit folgender Zeile, bei der der Listbox-Wert mit der Umwandlungsfunktion CStr zu Text wird:


Code:
If Worksheets("Aufgaben").Cells(ReiheNr, 1) = CStr(Me.ListBox2.Column(0)) Then


Wenn es dann nicht läuft, hab ich (ohne die Mappe zu kennen) keine Idee mehr.
Antworten Top


Gehe zu:


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