Zellinhalt in Userform laden

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von vba-neulingin.

    Zellinhalt in Userform laden

    Hallo,

    ich bin nicht nur neu in diesem Forum, sondern auch ein Neuling in der VBA-Programmierung. Ich hoffe, Ihr seht es mir nach, wenn ich "blöde" Fragen stellen sollte...

    Derzeit programmiere ich eine Excel-Adress-Datenbank. Das Formular, um neue Adressen anzulegen, ist bereits fertig. Jeder neue Datensatz erhält hierbei eine fortlaufende Nummer.

    Das Formular, bestehende Datensätze zu ändern, ist ebenfalls fast fertig. Mithilfe der fortlaufenden Nummer wird der entsprechende Datensatz in die Userform geladen. Bestimmte Felder können dann hierin geändert und in die Exceltabelle zurückgeschrieben werden. Funktioniert alles prima. Nur eine Sache bekomme ich leider nicht hin, wofür ich Eure Hilfe benötige:
    In der Spalte B der Exceldatei stehen Ziffern, hinter denen sich eine Legende verbirgt: z.B: 1 = Basistarif, 2 = Basistarif plus Zusatzpaket 1, etc.
    Wenn ich die Daten in die Userform lade, soll nicht die Ziffer (z.B. 1) aus Spalte B, sondern die Bezeichnung (z.B. Basistarif) in der Userform angezeigt werden. Ich könnte mir vorstellen, dass ich das mit der if-Anweisung lösen könnte, weiss aber leider nicht wie :(

    Bisher sieht das so aus:

    Private Sub UserForm_Initialize()
    'Daten in das Formular laden
    Textbox1 = Cells(zeile, 2)
    Textbox2 = Cells(zeile, 3)
    ...
    end sub

    Textbox1 = Cells(zeile, 2) müsste irgendwie umgeschrieben werden ?(

    Ich danke schon mal für Eure Hilfe!
    Du benötigst kein VBA!

    Binde deine Controls an Excel-Ranges.
    Eine Textbox hat die Eigenschaft LinkedCell.

    Im entsprechenden Excel-Range machst du einen SVERWEIS auf deine Übersetzungstabelle.
    oder, falls die nicht existiert, eben direkt eine Übersetzungsformel =VERWEIS(Nr;{1;2;3;4;5};{"Text1";"Text2";"Text3";"Text4";"Text5"})
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Eine Übersetzungstabelle hab ich nicht, müsste daher den alternativen Weg gehen. Das verstehe ich auch, aber ich kann das leider nicht umsetzen. An welcher Stelle setze ich das ein und ist es richtig, dass ich zunächst irgendwas (?) als range definieren soll? Wie gesagt, das ist absolutes Neuland für mich...

    Private Sub UserForm_Initialize()
    dim ? as range
    'Daten in das Formular laden
    ?
    Textbox2 = Cells(zeile, 3)
    ...
    end sub?
    Ich habe mir deinen Beitrag (auch ohne deinen Link) ziemlich oft durchgelesen...das bringt mich nur leider nicht weiter, da ich nicht weiß, wie ich es umsetzen soll.

    Zunächst weiß ich nicht, was eine Excel-Range ist (gebe ich -leicht beschämt- zu). Vielleicht wende ich die sogar tagtäglich an, ohne zu wissen, dass man das so nennt!? Mit Sverweisen z.B. arbeite ich immerhin regelmäßig. Ich kenne auch die von dir o.g. alternative Formel, obwohl ich diese bisher noch nie benutzt habe.
    Ich habe lediglich eine vage Vermutung: Demnach müsste ich (ohne VBA) diese Übersetzungsformel in irgendeiner Zelle des Datenblattes platzieren, um es mit meinen laienhaften Worten zu formulieren. Nur wo? In den jeweiligen Zellen der Spalte B? Da käme dann nämlich ein neues Problem auf: Wenn ich mit dem ersten Userform neue Datensätze anlege, kreuze ich in dieser Formular an, ob es Basispaket oder Basispaket + Zusatzpaket 1 etc. ist. In der Excel-Datei wird dann aber nur die Ziffer (in Spalte B) eingetragen. Damit dann aber dort die Formel steht (sollte so die Umsetzung aussehen), muss ich ja schon in dem ersten Formular was ändern!?

    Oder bin ich auf dem Holzweg?
    - Trage in Zelle A1 eine 1 ein.
    - Trage in Zelle B1 die Formel =WENNNV(VERWEIS(A1;{0;1;2;3;4;5;6};{"kein Wert";"Text1";"Text2";"Text3";"Text4";"Text5";"Sonstiges"});"ungültiger Wert") ein
    (Ich gehe jetzt mal davon aus, dass dein Excel auf deutsch eingestellt ist).
    - Rechtsklick auf deine TextBox...Eigenschaften
    - Trage in LinkedCell B1 ein.

    Das Verfahren funktioniert dann vor allem nicht nur beim Laden der Form, sondern passt sich dynamisch an die Veränderungen im Arbeitsblatt an.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ahhh...das kann ich nachvollziehen!!! :)

    Aber LinkedCell gibt es (in meiner Userform) nicht. Muss ich dann in der Userfrom ControlSource nehmen? Allerdings krieg ich dann immer die folgende Fehlermeldung:

    Eigenschaft ControlSourse konnte nicht gesetzt werden. Ungültiger Eigenschaftenwert!"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vba-neulingin“ ()

    vba-neulingin schrieb:

    LinkedCell gibt es (in meiner Userform) nicht
    Ich hätte jetzt erwartet, dass du dein Textfeld als ActiveX-Control auf dem Sheet hast.
    Aber wenn du unbedingt mit umständlichen Userforms arbeiten willst:
    Trage in ControlSource ​Tabelle1!B1 ein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Super! Nach etwas längerem Rumprobieren, habe ich es nun dank deiner Hilfe hinbekommen. Ich habe es folgendermaßen gelöst:
    1. Wenn ich mithilfe der laufenden Nr. die Userform einlade, wird diese laufende Nr. gleichzeitig in Zelle A1 geschrieben
    2. In Zelle A2 wird dadurch automatisch die Ziffer ausgewiesen (Sverweis),
    3. in Zelle A3 wird der dazugehörige Text (mithilfe des verweises wie oben beschrieben) angezeigt,
    4. die entsprechende Textbox habe ich mit Zelle A3 verlinkt

    und es funktioniert!!!

    PS: Schritt 2 werde ich nun noch mit Schritt 3 in einer Zelle verknüpfen.

    Danke dir!!!!