Daten aus Zellen in TextBoxen einlesen/ändern

Dieses Thema im Forum "Excel und VBA" wurde erstellt von Danndu, 19 Juli 2008.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Danndu

    Danndu
    Expand Collapse
    New Member

    Registriert seit:
    16 Juli 2008
    Beiträge:
    5
    Zustimmungen:
    0
    Moin,
    da ich gerade die ersten Schritte in VBA(Excel 2007) mache habe ich hier mal ein Problem mit dem ich nun schon seit Tagen festhänge. Ich starte über einen Button in "Tabelle1" eine "UserForm3", auf welcher sich 6 Textboxen befinden. jede TextBox bezieht die Daten aus einer festen Zelle der "Tabelle6" (A1:A6). Je 2 TextBoxen sind zudem noch zu einem Frame zusammengefasst (TextBox1 + TextBox2 etc.). Eigentlich sollte das sich doch mit einem einfachen Code lösen lassen, wie diesem hier:

    Code:
    Option Explicit
    Private Sub TextBox1_Change()
    
        TextBox1.Value = Worksheets("Tabelle6").Range("A1")
    
    End Sub
    Doch leider erzeugt dieser beim eingeben eines Zeichens einen "Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs". Außerdem wird auch nur die erste TextBox mit den Daten gefüllt, die anderen sind leer. Hat jemand einen Rat? :5:
     
  2. dasta

    dasta
    Expand Collapse
    New Member

    Registriert seit:
    16 August 2007
    Beiträge:
    1
    Zustimmungen:
    0
    Hallo Danndu,

    bist du sicher, dass du auf TextBox1_Change() reagieren willst?
     
  3. Danndu

    Danndu
    Expand Collapse
    New Member

    Registriert seit:
    16 Juli 2008
    Beiträge:
    5
    Zustimmungen:
    0
    Wenn ich ehrlich bin, möchte ich nur, dass die Zellen eingelesen und verändert werden können. Das ist das einzige was mir dazu einfiel. Wie schon gesagt ich bin in den Kinderschuhen...

    Eine konstruktive Hilfe wäre mir schon lieber gewesen. Wenn der Ansatz falsch ist, dann bitte sag mir, wie es anders geht. Vllt muß ich ja auf den Frame verzichten, was nicht schlimm wäre.
     
  4. Danndu

    Danndu
    Expand Collapse
    New Member

    Registriert seit:
    16 Juli 2008
    Beiträge:
    5
    Zustimmungen:
    0
    Antwort selber gefunden!

    Moin,
    danke für die vielen Meldungen! :50:
    Dachte eigentlich hier bekommt man Unterstützung. Habe nun die Lösung doch noch selber erarbeitet, die da lautet:

    Code:
    Option Explicit
    Private Sub UserForm_Initialize()
        TextBox1 = Sheets(6).Range("A1")
    
    etc.
    
    Die Eingabe lässt sich dabei aber nur ändern, wenn in den "Eigenschaften" "ControlSource" einen Wert
    enthält, aber genau das verstehe ich nicht, denn der Wert MUß nicht wie üblich "Tabelle6!A1" lauten,
    sondern den Real Namen der Tabelle haben(in diesem Fall "Config!A1").

    Kann mir zumindest dazu jemand etwas Input geben, denn das kann ich nun garnicht nachvollziehen.
     
  5. RO_SCH

    RO_SCH
    Expand Collapse
    Moderator

    Registriert seit:
    27 August 2006
    Beiträge:
    2.480
    Zustimmungen:
    14
    Hi danndu,

    dein Sarkasmus ist absolut nicht angebracht !!!

    Wenn du nicht fähig bist eine ordentliche Frage zu stellen, dann hast du es auch nicht verdient eine ordentliche Antwort zu kriegen !!!

    Du kannst nicht einfach einen Codeschnippsel hier rein stellen, und drauf hoffen, dass ein Helfer einen Glückstreffer landet bei seiner Antwort.
    Also ehrlich.

    Schöne Zeit noch !
    Roland
     
  6. bst

    bst
    Expand Collapse
    <font color="#FF0000">Excel Moderator</font><br><i

    Registriert seit:
    26 Oktober 2004
    Beiträge:
    3.063
    Zustimmungen:
    1
    Abend auch,

    dieses ist ein eher 'kleines Excel-Forum' mit relativ wenig 'Verkehr'. Wir bemühen uns zwar alle Anfragen zu beantworten, aber Du kannst an einem Samstag nicht unbedingt erwarten sofort eine Antwort zu bekommen.

    Was genau ist Dir jetzt noch nicht klar?

    Userform_Initialize wird übrigens nur einmalig beim Start einer Userform aufgerufen.

    cu, Bernd
     
  7. Danndu

    Danndu
    Expand Collapse
    New Member

    Registriert seit:
    16 Juli 2008
    Beiträge:
    5
    Zustimmungen:
    0
    Moin,

    @Roland:
    erstmal sorry, wenn das so rüberkam, aber ich dachte mir dass zumindest einer eine "vernünftige" Antwort gibt - siehe Bernd. Zum anderen habe ich meine Frage so präziese wie möglich und so kurz wie nötig gestellt um die lesbarkeit zu gewähleisten. Wenn also etwas nicht richtig verstanden wird, hätte ich mich gefreut, wenn man mir dieses mitteilt, da ich es nicht vorher sehen kann, denn ich hatte mich darum bemüht. Voll müllen kann jeder....
    Nun denn, ich hoffe du siehst es mir nach und ihr helft einem Anfänger auf die Sprünge(nun ja nicht mehr, da es nun so läuft, wie es soll.)

    @Bernd:
    Also, verstehen kann ich nicht, wie ich es schon schieb, dass wenn ich ein Wert in einer Textbox aktualisieren möchte, ich in den Eigenschaften der TextBox den Wert für "ControlSource" nicht den "immer gültigen Namen des Tabellenblattes" "Tabelle6"(in meinem Beispiel) eingeben kann, sondern den "Real Namen" - der lautet bei mir "Config" - eingeben muss. Leider weis ich nicht, wie ich das anders beschreiben soll...

    Gruß (ebenfalls) Bernd
     
  8. bst

    bst
    Expand Collapse
    <font color="#FF0000">Excel Moderator</font><br><i

    Registriert seit:
    26 Oktober 2004
    Beiträge:
    3.063
    Zustimmungen:
    1
    Abend Bernd,

    ich denke, ich habe es jetzt verstanden.

    Im Vba gibt es für jede Tabelle 2 unterschiedliche Namen. Den 'normalen' TabellenNamen sowie den ObjektNamen oder auch CodeNamen der Tabelle.

    Du siehst übrigens beide im VBA-Projektexplorer in der Form: CodeName (TabellenName).

    Bei WorkSheets("Tabelle1") kannst Du nur den 'normalen' TabellenNamen benutzen, bei Tabelle1.Range("A1") nur den CodeNamen.

    Bei ControlSource benötigst Du aber einen String, keinen Range. Damit geht hier nur sowas:

    Code:
    Private Sub UserForm_Initialize()
       ' a) in Excel (!) Syntax mit dem normalen TabellenNamen:
       TextBox1.ControlSource = "Tabelle1!A1"
       ' b) in VBA-Syntax mit dem normalen TabellenNamen:
       TextBox1.ControlSource = Worksheets("Tabelle1").Range("A1").Address(External:=True)
       ' c) in VBA-Syntax mit dem CodeNamen
       TextBox1.ControlSource = Tabelle1.Range("A1").Address(External:=True)
       ' d) natürlich auch über den Index
       TextBox1.ControlSource = Worksheets(1).Range("A1").Address(External:=True)
    End Sub
    
    cu, Bernd
     
    #8 bst, 20 Juli 2008
    Zuletzt bearbeitet: 20 Juli 2008
  9. Danndu

    Danndu
    Expand Collapse
    New Member

    Registriert seit:
    16 Juli 2008
    Beiträge:
    5
    Zustimmungen:
    0
    N'abend ebenfalls,
    wenn ich dich richtig verstanden habe, dann beschreibst du die Programmierung in VBA generell. Ich meinte das aber nicht - so weit sind meine Kenntisse (noch) nicht. :13:

    Ich versuch es nochmal. Projekt-Explorer ist der richtige Name - kam ich nicht drauf...
    In dem befinde ich mich ja, wenn ich eine UF erstelle. Dort kreire ich dann eine Textbox. Wenn ich diese markiere habe ich im Projekt-Explorer die Eigenschaften selbiger zu sehen. Dort, wenn ich auf Kategorien gehe, habe ich unter "Daten" den Eintrag "ControlSouce". In genau diesem Eintrag kann ich dann, wenn ich eingelesene Daten der Textbox ändern möchte, diese nur ändern, wenn eben der Vergebene Tabellenname(in meinem Beispiel: Config) in der Form "Config!A1" und nicht wie sonst üblich in VBA ansprechbar "Tabelle(x)" steht. Warum das in diesem Fall so ist habe ich nicht verstanden.

    Wünsche euch beiden noch einen ruhigen Abend,
    Bernd

    Ansonsten kann hier geschlossen werden.
     
Die Seite wird geladen...
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen