Daten aus einer Textbox in Userform in mehrere Arbeitsblätter eintragen

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von tulla.

    Daten aus einer Textbox in Userform in mehrere Arbeitsblätter eintragen

    Hallo zusammen,
    ist vermutlich was ganz einfaches, aber irgendwie will die Technik nicht, wie ich will.
    Ich habe eine Userform mit mehreren Textboxen. Nun möchte ich, dass die Daten aus Textbox1 nicht nur in das erste Arbeitsblatt eingetragen werden, sondern auch in das zweite und dritte an der gleichen Stelle. Der ursprüngliche Code sah so aus:

    Quellcode

    1. Private Sub CommandButton1_Click()
    2. On Error Resume Next
    3. Dim z As Integer
    4. z = Range("A65536").End(xlUp).Row + 1
    5. Cells(z, 1).Value = TextBox1.Text
    6. Cells(z, 24).Value = TextBox14.Text
    7. For sp = 2 To 13
    8. Cells(z, sp) = Replace(Controls("TextBox" & sp).Text, ".", "") * 1
    9. Next sp
    10. Range("A65536").End(xlUp).Select
    11. Unload Me
    12. End Sub


    Also dachte ich mir, ich ändere es einfach hierzu ab:

    Quellcode

    1. Private Sub CommandButton1_Click()
    2. On Error Resume Next
    3. Dim z As Integer
    4. z = Range("A65536").End(xlUp).Row + 1
    5. Cells(z, 24).Value = TextBox14.Text
    6. For sp = 2 To 13
    7. Cells(z, sp) = Replace(Controls("TextBox" & sp).Text, ".", "") * 1
    8. Next sp
    9. Sheets(Array("Kundendaten", "Berechnung", "Ergebnis")).Select
    10. Cells(z, 1).Value = TextBox1.Text
    11. Range("A65536").End(xlUp).Select
    12. Unload Me
    13. End Sub

    Allerdings hat das nicht den gewünschten Effekt gebracht, die Daten werden auch weiterhin nur ins erste Arbeitsblatt eingetragen. Was mache ich falsch und wie muss ich den Code ändern, dass er mir die Daten aus TextBox1 auf allen drei Arbeitsblättern an der gleichen Stelle einfügt?
    Danke schonmal im Voraus :)
    VG Katey
    Du musst die anweisung einfach 3 mal ausführen.
    Wenn du Inhalte mit einem Cells oder Range in ein Tabellenblatt schreiben willst, ist es am sichersten du benennst sie beim Namen. Denn eine Einfach Angaben eines Cells bezieht sich immer
    auf das aktuelle Tabellenblatt.

    also bau deine Anweisung cells so um:

    Visual Basic-Quellcode

    1. worksheets("Kundendaten").Cells.....
    2. worksheets("Berechnung").Cells.....
    3. worksheets("Ergebnis").Cells.....


    eine weitere Möglichkeit wäre es über eine Schleife mit dem workbook(count) zu machen.
    Da bist:
    1. Namen unabhängig
    2. schreibst die Anweisung nur einmal

    Beipiel:

    Visual Basic-Quellcode

    1. 'Deine ExcelTabelle hat 3 Blätter
    2. for i=1 to 3
    3. worksheets(i).cells...
    4. next i
    Danke schonmal, habe den Code jetzt so umgeschrieben:

    Visual Basic-Quellcode

    1. Private Sub CommandButton1_Click()
    2. On Error Resume Next
    3. Dim z As Integer
    4. z = Range("A65536").End(xlUp).Row + 1
    5. Cells(z, 24).Value = TextBox14.Text
    6. For sp = 2 To 13
    7. Cells(z, sp) = Replace(Controls("TextBox" & sp).Text, ".", "") * 1
    8. Next sp
    9. For i = 1 To 3
    10. Worksheets(i).Cells(z, 1).Value = TextBox1.Text
    11. Next i
    12. Range("A65536").End(xlUp).Select
    13. Unload Me
    14. End Sub


    Allerdings klappt es jetzt ein bisschen zu gut.
    Alles, was ich in einem der Blätter mache, wird in den anderen kopiert. Ziehe ich eine Formel von Zelle B570 in Zelle B571 in Berechnung, zieht er die auch in Ergebnis und in Kundendaten (was nicht wünschenswert ist, weil er dabei in Kundendaten die Werte runterzieht und kopiert...). Kann man das irgendwie anders schreiben, dass dieses Problem nicht auftritt?
    Ich will, dass der Wert, den ich in das Userform in Textbox1 eingebe, in den drei genannten Arbeitsblättern an der gleichen Stelle auftaucht. Das klappt wunderbar.
    Ein Nebeneffekt ist aber der: (Das folgende ist ein Beispiel, es klappt auch mit allen anderen Befehlen)
    Wenn ich wieder beim normalen Bearbeiten des Dokuments bin (also raus aus der Userform, einfach so am Daten-spielen) und beispielsweise im Arbeitsblatt "Berechnungen" in Zelle B3 etwas an der Formel ändere und die geänderte Formel dann mit diesem kleinen Kreuz in der unteren rechten Ecke des Markierungskästchens runterziehe, um die eben auf alle Zeilen anzuwenden... Dann macht er das mit dem Runterziehen nicht nur im Tabellenblatt "Berechnungen" sondern auch in "Ergebnis" und "Kundendaten". Er markiert also jeweils Zelle B3 und zieht das, was auch immer da drin steht, die gesamte Länge der Tabelle runter. Heißt im Klartext, dass er bei den Kundendaten den Wert des Kunden in Zeile 3 in alle anderen Zeilen kopiert. Das will ich aber nicht. Ich will überhaupt nicht, dass das Userform noch Auswirkungen hat, wenn ich es schließe und normal an den Daten arbeite.
    Ich verstehe was du meinst. Für mich aber gedanklich nicht nachvollziehbar, ausser du hast die Blätter in Abhängigkeit gestellt(wenn sowas im Excel möglich ist)

    Habe es gerade mal getestet.

    Blatt 1. FEld nach untent gezogen mit dem kleinen Kreuz.
    Blatt 2. hat verweis auf Blatt 1. gleiches Feld
    Blatt 3. dito

    Nach dem ziehen hat sich in Blatt 3 das gleiche Bild wie in Blatt 1 gezeigt.
    Ncah dem ich es einmal per hand aus Blatt 3 gelöscht habe hat diese Abhängigkeit ihre Gültigkeit verloren.

    Katey schrieb:


    Meine Blätter waren aus irgend einem Grund gruppiert.
    Hab's aufgehoben, jetzt klappt alles, danke.

    Aus diesem Grund:

    Katey schrieb:

    Sheets(Array("Kundendaten", "Berechnung", "Ergebnis")).Select

    ;)
    :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!: