Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Initialize vlookup über anderes Tabellenblatt

Betrifft: Initialize vlookup über anderes Tabellenblatt von: Thomas
Geschrieben am: 16.10.2014 09:46:28

Hallo,
ich bin wieder einmal Stunden damit beschäftigt eine sverweis-Funktion über ein anderes Tabellenblatt auszuführen.

Ich bekomme leider einen Laufzeitfehler der mir sagt, dass die Eigenschaft value nicht gesetzt werden konnte.
Was mache ich falsch?!

  • Private Sub UserForm_Initialize()
    
    'On Error Resume Next
                
    the_value = Sheets("Richtpreise Anlagenkosten").range("tab_heizsystem").Value
    
       With Me
        
          .txtdatum.Value = Application.WorksheetFunction.VLookup(the_value, Sheets("Richtpreise  _
    Anlagenkosten").range("Tab_Heizsystem"), 64, False)
    
    '...hier kommen noch mehr Zeilen
    
       end with
    End Sub

  •   

    Betrifft: AW: Initialize vlookup über anderes Tabellenblatt von: {Boris}
    Geschrieben am: 16.10.2014 10:36:36

    Hi,

    der Name "Tab_Heizsystem" bezieht sich offensichtlich ja auf einen Bereich. Und der ganze Bereich hat eben keine Value-Eigenschaft, die Du der Variable the_Value zuweisen könntest.

    VG, Boris


      

    Betrifft: AW: Initialize vlookup über anderes Tabellenblatt von: Thomas
    Geschrieben am: 16.10.2014 10:58:25

    Danke Boris,

    ich bin vielleicht ein Idiot;)...ich habe mich so an dem Code aus einer anderen Userform orientiert das ich ganz übersehen habe das "the_value" sich ja auf den Suchbereich beziehen muss. Und dieser Suchbereich ist auch als Name definiert und befindet sich ja in einem anderen Tabellenblatt.

    the_value = Worksheets("Daten Standort und Ausstattung").range("Heizsystemauswahl").Value
    so funktioniert es jetzt.

    Vielen Dank nocheinmal für den Hinweis.


      

    Betrifft: AW: Initialize vlookup über anderes Tabellenblatt von: Thomas
    Geschrieben am: 16.10.2014 11:05:15

    Vielen Dank auch an Luc und Daniel für die schnelle Hilfe und die ausführlichen Antworten!


      

    Betrifft: Wenn 'Tab_Heizsystem' ein benannter Bereich ... von: Luc:-?
    Geschrieben am: 16.10.2014 10:43:57

    …ist, Thomas,
    muss er mindestens 64 Spalten haben, damit VLookUp fktionieren kann. Hat er die aber (oder wenigstens 2 Werte), kann dein Konstrukt ebenfalls nicht fktionieren, weil the_value dann einen Vektor oder gar eine Matrix beinhalten/referenzieren würde (zumindest bei entsprd Deklaration, die du hier vermissen lässt, wenn .Value weggelassen wird), was ebenfalls nicht mit diesem WorksheetFunction-Objekt fktionieren könnte, denn das verlangt eine Argumentierung seiner ObjektFktt streng nach Bildungs­vorschrift. Alles, was die allgemeine XlSteuerung zur Ergebnis­Ermittlung beiträgt (wie Variation von skalaren Argumenten über einen angegebenen Bereich → die MatrixFktionalität), fehlt in VBA und muss selbst pgmiert wdn, wenn man nicht besser auf eine Lösung mit vbFkt Evaluate ausweichen will bzw kann.
    Das ist hier übrigens schon oft erklärt worden und mit Glück auch im Archiv zu finden.
    Gruß, Luc :-?


      

    Betrifft: AW: Initialize vlookup über anderes Tabellenblatt von: Daniel
    Geschrieben am: 16.10.2014 10:50:43

    Hi
    dein grundlegender Denkfehler ist, dass du den Zellbereich Sheets("Richtpreise Anlagenkosten").range("tab_heizsystem")
    in der VLookUp-Funktion sowohl als Suchmatrix, als auch als Suchwert (über die Variable "the_value") verwendest.

    das kann aber nicht funktionieren, weil der Suchwert ein Einzelwert sein muss, die Suchmatrix jedoch ein grösserer Zellbereich mit vielen Zeilen und in deinem Fall mit mindestes 64 Spalten.

    Da ein Zellbereich entweder aus einer Zelle oder aus vielen Zellen besteht, aber nie beides gleichzeitig, kann den VLookUp nicht funktionieren.

    Gruß Daniel


      

    Betrifft: AW: Initialize vlookup über anderes Tabellenblatt von: Daniel
    Geschrieben am: 16.10.2014 11:09:58

    Sorry, muss das nochmal korrigieren:
    du kannst in Worksheetfunction.VLookUp ein 2-D-Array als Suchwert verwenden!
    Das Ergebnis der Funktion ist dann allerdings ebenfalls ein 2-Dimensionales Array gleicher grösse, welches die Ergbniswerte enthält.

    in die Textbox kannst du alleridings immer nur einen Einzelwert schreiben und kein 2-Dimensionales Array.

    Und es bleibt Unsinn, für Suchmatrix und Suchwert den selben Zellbereich zu verwenden.

    Gruß Daniel


      

    Betrifft: Erstaunlicherweise hat hier der MS-Pgmierer ... von: Luc:-?
    Geschrieben am: 16.10.2014 13:36:57

    …für das 1.Argument auch im Worksheet-Container eine Vektor­Auswertung vorgesehen, Daniel,
    was normalerweise nicht der Fall ist, wenn der FmlAssi nur einen EinzelWert anzeigt, was ein Indiz dafür ist, was mit der VBA-Variante geht und was nicht.
    Allerdings kann man auch ein Array in eine TextBox schreiben, allerdings eben nur als Text. Die Form (BereichsAdresse, einfache Aufzählungs­liste bzw MatrixKonstante) hängt dann von der Organisation des Ganzen (speziell den weiteren PgmSchritten) ab.
    Gruß, Luc :-?


     

    Beiträge aus den Excel-Beispielen zum Thema "Initialize vlookup über anderes Tabellenblatt"