Daten in Tabelle über UserForm ändern

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Tina.

    Daten in Tabelle über UserForm ändern

    Hallo,
    ich fange grade an mich mit VBA in Excel zu beschäftigen und habe mir ein kleines User Form gebaut wo ich über eine Combobox mir einen Wert aus Spalte B in einer Tabelle auswähle und dann mehrere Textboxen mit den entsprechenden Werte aus den Spalten C,D,E,F fülle, soweit so gut. Jetzt würde ich aber auch gerne etwas an diesen Daten ändern/aktualisieren und dann beim klicken auf einen Speicher Button die Daten in der Tabelle aktualisieren.

    Leider fehlt mir grade jegliche idee wie ich das machen kann.

    Würde mich über ein paar Tips freuen in welche richtungich denken muss um mein anliegen umzusetzen.

    Danke
    LG Tina
    Hab mich noch ein wenig versucht, allerdings bis jetzt erfolglos, hab es hiermit versucht:

    Visual Basic-Quellcode

    1. ​Private Sub cmdSpeichernAendern_Click()
    2. For s = 2 To 20
    3. For r = 2 To 1000
    4. If cobAuswahl.Value = Cells(r, 2) Then
    5. Cells(r, s) = txtAnsprechpartner
    6. Cells(r, s) = txtTelefonnummer
    7. Cells(r, s) = txtEmail
    8. End If
    9. Next
    10. End Sub


    S steht für die Spalten und r für die Zeilen, wenn der Wert in der Combobox "cobAuswahl.Value" gleich Cells(r,2) ist, was ja im ersten durchlauf B2 sein müsste, dann sollen die Cells mit denn entsprechnden Werten gefüllt werden.
    Allerdings werden nur die Werte in Spalte B und F geändert, alle anderen bleiben gleich. B sollte auch gar nicht geändert werden.
    Wo habe ich denn Fehler? Die Tabelle sieht so aus


    NrNameName2TeleEmail
    5MayerHans0815Mayer@Hans.de
    Ich sehe da 2x for, aber nur 1x next. Die Anzahl muss natürlich identisch sein. Zudem empfehle ich, zur besseren Lesbarkeit, hinter next die jeweilige Variable anzugeben, z. B. next s.

    Und logischer wäre es, wenn man erst die Zeilen und dann die Spalten durchläuft.

    Und du schreibst 3x Cells(r, s). D. h. immer in dieselbe Zelle.

    EDIT: Stell doch mal die Einstellungen von VBA wie im Anhang ein (das Markierte), damit du Fehler direkt siehst. Anscheinend sind deine Einstellungen so, dass VBA erstmal alles annimmt.
    Bilder
    • 2.jpg

      29,82 kB, 445×361, 62 mal angesehen
    • 1.jpg

      28,1 kB, 445×361, 55 mal angesehen
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi, Danke für deine Rückmeldung,das war der richtige Tip in die richtige richtung, habe es jetzt so abgeändert

    Visual Basic-Quellcode

    1. Private Sub cmdSpeichernAendern_Click()
    2. Dim r As Integer
    3. For r = 2 To 1000
    4. If cobAuswahl.Value = Cells(r, 2) Then
    5. Cells(r, 4) = txtAnsprechpartner
    6. Cells(r, 5) = txtTelefonnummer
    7. Cells(r, 6) = txtEmail
    8. End If
    9. Next r
    10. ActiveWorkbook.Save
    11. MsgBox ("Speichern der Änderungen erfolgreich!"), vbOKOnly + vbInformation, "Gespeichert"
    12. End Sub


    Bis jetzt konnte ich noch kein Fehlverhalten feststellen, solltest du aber einen Verbesserungsvorschlag haben, nehme ich den gerne:-)
    Ich lasse ja jetzt die Zeilen 2-1000 durchlaufen, aktuelle hat das Tabellenblatt aber nur ca. 400 Zeilen (kann aber noch mehr werden) macht es da sinn das so zu machen oder kostet es zu viel performance?

    Danke für die Hilfe

    CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Ich würde r als Long deklarieren. Denn das Tabellenblatt kann mehr Zeilen haben als in einen Integer passen.

    Ansonsten sieht das gut aus.

    Du könntest über dem If noch das hier machen, damit nicht zuviele Zeilen durchlaufen werden:

    Visual Basic-Quellcode

    1. If Cells(r, 2) = vbNullstring Then Exit For

    Oder direkt so:

    Visual Basic-Quellcode

    1. Private Sub cmdSpeichernAendern_Click()
    2. Dim r As Long
    3. r = 2
    4. While Cells(r, 2) <> vbNullstring
    5. If cobAuswahl.Value = Cells(r, 2) Then
    6. Cells(r, 4) = txtAnsprechpartner
    7. Cells(r, 5) = txtTelefonnummer
    8. Cells(r, 6) = txtEmail
    9. End If
    10. r = r + 1
    11. Wend
    12. ActiveWorkbook.Save
    13. MsgBox ("Speichern der Änderungen erfolgreich!"), vbOKOnly + vbInformation, "Gespeichert"
    14. End Sub
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum