Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
textbox mit sverweis
Sveb
Hallo Forummitglieder,
habe mich aufgrund eines Problems gerade registriert und hoffe (bin mir da ziemlich sicher) dass ihr mir bei diesem weiterhelfen könnt! Bitte seht mir es nach wenn ich manchmal bisschen auf der Leitung stehe, bzw. mitunter dumme fragen stellen sollte. Bin gerade in der VBA Lernphase und noch ein ziemlich blutiger Anfänger.
Nun zu meinem Problem. Ich möchte eine Userform erstellen und bekomme ständig eine Fehlermeldung: "laufzeitfehler 1004 anwendungs- oder objektdefinierter fehler". Folgender Code sollte jedoch ausgeführt werden:
Private Sub txtPersNr_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Intzeile As Integer
Sheets("Grunddaten Personalstamm").Select
Intzeile = Cells(65536, 1).End(xlUp).Row
If txtPersNr  "" Then
txtName = Evaluate(Application.WorksheetFunction.VLookup(txtPersNr.Value, _
Worksheets("Grunddaten Personalstamm") _
.Range(Cells(2, 1), Cells(Intzeile, 3)), 2, False))
End If
End Sub

Es soll eben in einer Textbox(2) ein SVERWEIS erstellt werden, der sich auf einen "Zahlenstring" in einer anderen Textbox(1) bezieht. Dieser Code soll bei verlassen der Textbox(1), natürlich nach Eingabe des Strings, ausgeführt werden.
Vielen Dank schonmal für eure Hilfe
MfG
ohne Evaluate
23.04.2011 17:21:03
Tino
Hallo,
versuch es mal so.
Private Sub txtPersNr_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngZeile As Long

With Worksheets("Grunddaten Personalstamm")
    lngZeile = .Cells(65536, 1).End(xlUp).Row

    If txtPersNr <> "" Then
        txtName = Application.WorksheetFunction.VLookup( _
        txtPersNr.Value, .Range(Cells(2, 1), .Cells(lngZeile, 3)), 2, False)
    End If
    
    'Oder mit Evaluate 
    txtName = Evaluate("VLookup(""" & txtPersNr.Value & """," & .Range(Cells(2, 1), .Cells(lngZeile, 3)).Address & ",2,0)")
End With
End Sub
Gruß Tino
Anzeige
OT-@Tino
23.04.2011 17:26:02
robert
Hi Tino,
wieso wird Dein Code seit einiger Zeit in nur einer Zeile angezeigt?
Gruß
robert
robert
23.04.2011 17:40:53
Sveb
Hallo Robert,
danke für die schnelle Antwort! Habe den Code folgendermaßen eingefügt:
Private Sub txtPersNr_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngZeile As Long
With Worksheets("Grunddaten Personalstamm")
lngZeile = .Cells(65536, 1).End(xlUp).Row
If txtPersNr  "" Then
txtName = Application.WorksheetFunction.VLookup( _
txtPersNr.Value, .Range(Cells(2, 1), .Cells(lngZeile, 3)), 2, False)
End If
End With
End Sub
Nun bekomme ich jedoch wieder eine Fehlermeldung: "Laufzeitfehler 1004: Die VLookup-Eigenschaft des WorksheetFunction - Objektes kann nicht zugeordnet werden."
Danke im Voraus.
Gruß Sven
Anzeige
der Dank gebührt TINO !! owT
23.04.2011 17:45:35
robert
AW: hier ein Beispiel
23.04.2011 18:02:03
Sven
Ok sry... ich danke natürlich dir Tino. Musste mich erstma in bisschen in dem Forum zurechfinden, aber ich glaube so langsam hab ich es mitgeschnitten. :-D
Das Beispiel ist mir schon klar, aber inwiefern hilft es mir bei meinem Problem? Soll ich meine Range als Bereich festlegen?
Kann es evtl an einem Formatierungsproblem liegen? Die Textbox müsste doch eigentl. als text formatiert sein oder? Demzufolge sollen ja auch die Werte in der 1. Spalte der Matrix als Text formatiert sein. Aber anderenfalls müsste doch bei keinem gefundenen Wert des SVERWEIS ein #NV erscheinen und sich nicht gleich der Debugger öffnen.
Gruß Sven
Anzeige
AW: hier ein Beispiel
23.04.2011 18:05:03
Sven
Sry... ich danke natürlich dir Tino! :-)
Das Beispiel hab ich soweit verstanden. Ich verstehe aber nicht, was dieses mit meinem Problem zu tun hat. Meinst du etwa, dass ich meine Range als bereich festlegen sollte? Sorry aber ich verstehs gerade echt nich.
Kann es evtl an einem Formatierungsproblem liegen? Die Textbox müsste doch eigentl. als text formatiert sein oder? Demzufolge sollen ja auch die Werte in der 1. Spalte der Matrix als Text formatiert sein. Aber anderenfalls müsste doch bei keinem gefundenen Wert des SVERWEIS ein #NV erscheinen und sich nicht gleich der Debugger öffnen.
Anzeige
bei mir ist es richtig?!
23.04.2011 17:41:09
Tino
Hallo,
bei mir nicht, IE8 und Mozilla beide zeigen so wie es sein soll.
Userbild
Private Sub txtPersNr_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngZeile As Long
With Worksheets("Grunddaten Personalstamm")
lngZeile = .Cells(65536, 1).End(xlUp).Row
If txtPersNr  "" Then
txtName = Application.WorksheetFunction.VLookup( _
txtPersNr.Value, .Range(Cells(2, 1), .Cells(lngZeile, 3)), 2, False)
End If
'Oder mit Evaluate
txtName = Evaluate("VLookup(""" & txtPersNr.Value & """," & _
.Range(Cells(2, 1), .Cells(lngZeile, 3)).Address & _
",2,0)")
End With
End Sub
Gruß Tino
Anzeige
AW: bei mir ist es richtig?!
23.04.2011 17:52:54
robert
Hi Tino,
erst wenn ich deine Zeile kopiere und einfüge, ist es so, wie es sein soll.
Ich arbeite mit Mozilla, alle anderen Codes sind normal, nur bei Dir ist es so-komisch...
Naja , ich kann damit leben ;-)
Frohe Ostern
robert
AW: bei mir ist es richtig?!
23.04.2011 17:53:07
Sven
Kann es evtl an einem Formatierungsproblem liegen? Die Textbox müsste doch eigentl. als text formatiert sein oder? Demzufolge sollen ja auch die Werte in der 1. Spalte der Matrix als Text formatiert sein. Aber anderenfalls müsste doch bei keinem gefundenen Wert des SVERWEIS ein #NV erscheinen und sich nicht gleich der Debugger öffnen.
AW: bei mir ist es richtig?!
23.04.2011 18:01:38
Tino
Hallo,
in einer Textbox ist Text.
Wenn es den Wert nicht gibt, läuft diese Version auf einen Fehler.
Du könntest aber zuvor mit application.match(...) prüfen ob der Wert in der Liste ist.
Beispiel:
Private Sub txtPersNr_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngZeile As Long, varIndex
If txtPersNr  "" Then
With Worksheets("Grunddaten Personalstamm")
lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(2, 1), .Cells(lngZeile, 3))
varIndex = Application.Match(txtPersNr, .Columns(1), 0)
If IsNumeric(varIndex) Then
txtName = .Cells(varIndex, 2)
Else
txtName = ""
End If
End With
End With
Else
txtName = ""
End If
End Sub
Grß Tino
Anzeige
AW: bei mir ist es richtig?!
23.04.2011 18:16:36
Sven
Also eine Fehlermeldung kommt nicht mehr, aber den Wert, den ich mittels SVERWEIS mir wiedergeben lassen möchte, erscheint nicht in der textbox.
lade eine Beispieldatei hoch oT.
23.04.2011 18:27:42
Tino
@Tino - OT - Code-Anzeige in einer Zeile
23.04.2011 18:03:00
Erich
Hi Tino,
bei meinem Firefox 4.0 erscheint dein Code als Einzeiler, die Umbrüche fehlen.
Hier mal zwei Snapshots, aktuell und aus dem Archiv:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Userbild
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Userbild
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Keine Ahnung, woran es liegt. Im html-Quelltext kann man Umbrüche erkennen.
Ich habe jetzt nicht nachgesehen, wie die dort erreicht werden.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
ok. danke, ...
23.04.2011 18:26:38
Tino
Hallo,
habe noch die Version 3.6,
werde mal die Version 4 installieren und mal schauen.
Gruß Tino
AW: bei mir ist es richtig?!
23.04.2011 22:40:19
Reinhard
Hallo Tino,
ich surf an sich nur mit FireFox, derzeit, so seit ca. 5 Wochen FF 4.0.
Ich sehe deinen Code wie robert nur als Einzeiler.
Ich habe eben getestet mit IE 6.0, da wird der Code normal mehrzeilig dargestellt.
Du hast mir ja schon oft geholfen bzw. ich habe dich schon oft (mit) gelesen, früher war das mit dem einzeilegen Code nie.
Vielleicht liege ich damit völlig falsch, bin da sehr betriebsblind :-( aber jetzt fällt mir auf daß da die Antwort auf die du dich beziehst nach rechts eingerückt angezeigt wird.
Wenn das schon immer bei hans so war dann haste das nicht gelesen und vergess es :-)))
Ansonsten schau halt mal:
Userbild
Gruß und Frohe Ostern an alle Mitlesende und wie der papst es sagt, für den rest drumrum auch *smile*
Reinhard
Anzeige
AW: bei mir ist es richtig?!
23.04.2011 23:14:25
Tino
Hallo,
es liegt am Firefox, mit der Version 4 habe ich auch den Einzeiler, sollte jetzt wieder gehen.
Sub Test()
    MsgBox "mehrzeilig"
End Sub
Den rest habe ich nicht verstanden,
aber wenn Du Dich auf den Beitrag beziehst, den habe ich gelesen.
Zitat: "Ich verstehe aber nicht, was dieses mit meinem Problem zu tun hat"
Ich bin der Meinung ich behandle im Beispiel sein Problem?!
Ich suche mittels Sverweis in Spalte 1 nach einem Wert und gebe den aus der Spalte 2 aus.
Persönlich würde ich es aber mit Application.Match machen.
Private Sub txtPersNr_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngZeile As Long, varIndex

If txtPersNr <> "" Then
    With Worksheets("Grunddaten Personalstamm")
        lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
        
            With .Range(.Cells(2, 1), .Cells(lngZeile, 3))
                varIndex = Application.Match(txtPersNr, .Columns(1), 0)
                If IsNumeric(varIndex) Then
                    txtName = .Cells(varIndex, 2)
                Else
                    txtName = ""
                End If
            End With
    
    End With
Else
    txtName = ""
End If
End Sub
Gruß Tino
Anzeige
AW: bei mir ist es richtig?!
23.04.2011 23:42:57
Reinhard
Hallo Tino,
ja, die S u b Test() wird korrekt angezeigt.
Nein, ich habe mich nicht auf den Beitrag bzw. um was es da ging bezogen.
Ich hab mich nur auf das bezogen was mit
Text:
Hi Tino,
wieso wird dein Code ...
begann. Daß dies nach rechts versetzt erscheint irritierte mich.
Aber ich habe ja schon vorgewarnt daß das was mir da auffiel ggfs. schon immer so war.
Gruß
Reinhard
kann ich nicht sagen...
23.04.2011 23:59:32
Tino
Hallo,
habe ich noch nie drauf geachtet.
Gruß Tino

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige