Guten Tag, Ich bin Neuling in VBA und ich habe ein kleines Problem, wo ich keine Lösung finde. Ich lasse per VBA verschiedene Zelleninhalte in ein anderes Tabellenblatt übertragen. Aber irgendwo hab ich ein Fehler aber finde Ihn nicht.
Wenn ich es ausführen lasse, schreibt er mir beim ersten mal in Zelle A4, beim 2 Ausführen in A5 und dann überschreibe ich jedes mal A5. Es sollte aber in die nächste leere Zeile schreiben.
Wo mach ich was falsch?? Hier der Code
Sub transfert_werte() Dim Rechnungsnr As String, Kundennr As String, Rechnungsdatum As String, Rechnungsbetrag As String, Name As String Worksheets("Rechnung").Select Rechnungsnr = Range("Q4") Kundennr = ("B17") Name = Range("G8") Rechnungsdatum = Range("H17") Rechnungsbetrag = Range("H38") Worksheets("Zahlungsstatus").Select Worksheets("Zahlungsstatus").Range("A3").Select If Worksheets("Zahlungsstatus").Range("A3").Offset(1, 0) <> "" Then Worksheets("Zahlungsstatus").Range("A3").End(xlDown).Select
der Code kann so gar nicht funktionieren, da die For - Next Scheife nur zur Hälfte im Code enthalten ist. Außerdem beschreibst Du zwar, welche Werte mit welcher Variablen zu welcher Zelle gehören sollen, aber nicht von welchem Blatt sie kommen sollen und in welches Blatt sie übertragen werden sollen. Hier wäre eine anonymisierte Test Datei mit ein paar Wunsch Ergebnissen sehr hilfreich um Dir weiterhelfen zu können.
Hier habe ich eine neue Datei angelegt nur mit diesem Code. Es ist dann bestimmt verständlicher. Es sind die Werte aus dem Rechnungs Blatt die in den Zahlungsstatus übertragen werden sollen.
wenn Du Lust hast, kannst Du Dir mal folgenden überarbeiteten Code anschauen, bei dem vornehmlich das Selektieren zu Gunsten direkter Zuweisung wegfällt. Außerdem habe ich Deine Variablentypen teilweise angepasst - und die Variable Name habe ich in sName umbenannt, da Name bereits ein verwendeter VBA-Begriff ist - und diese sollte man tunlichst bei der Bezeichnung von Variablen vermeiden. Habe es auch bewusst "einfach" gehalten.
Code:
Sub transfert_werte() Dim Rechnungsnr As Variant, Kundennr As Variant, Rechnungsdatum As Date, Rechnungsbetrag As Double, sName As String Dim lngNextRow As Long With Worksheets("Rechnung") Rechnungsnr = .Range("C17") Kundennr = .Range("B17") sName = .Range("G8") Rechnungsdatum = .Range("H17") Rechnungsbetrag = .Range("H38") End With With Worksheets("Zahlungsstatus") lngNextRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 If lngNextRow = 3 Then lngNextRow = 4 'damit starten die Einträge in Zeile 4 - wenn sie auch in Zeile 3 starten dürfen, kann diese Zeile ersatzlos gelöscht werden .Cells(lngNextRow, 1).Value = Rechnungsnr .Cells(lngNextRow, 2).Value = Kundennr .Cells(lngNextRow, 3).Value = sName .Cells(lngNextRow, 4).Value = Rechnungsbetrag .Cells(lngNextRow, 5).Value = Rechnungsdatum End With End Sub
06.12.2021, 10:16 (Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2021, 11:02 von WillWissen.
Bearbeitungsgrund: Codetags
)
Ja Super vielen Dank Das funktioniert perfekt jetzt und erleichert mir das Leben sehr.
Konnte nicht früher nachsehen und antworten, da Wochenende war u ich nicht im Büro war.
Ich hab nur ein Problem jetzt, wenn ich den Code alleine durchlaufen lasse, funktioniert er Top. Jedoch wenn ich Ihn in einen andern einarbeite, gibt er mir alles 2x an in dem Tabellenblatt "Zahlungsstatus". Oder liegt es an der Reihenfolge? -> als PDF abspeichern, ->in Zahlungsstatus eintragen ->Rechnungsnummer um 1 erhéhen
Dim Rechnungsnr As String, Kundennr As String, Rechnungsdatum As String, Rechnungsbetrag As String, Name As String Worksheets("Rechnung").Select Rechnungsnr = Range("R1") Kundennr = Range("B17") Name = Range("G8") Rechnungsdatum = Range("H17") Rechnungsbetrag = Range("H38") Worksheets("Zahlungsstatus").Select Worksheets("Zahlungsstatus").Range("A3").Select If Worksheets("Zahlungsstatus").Range("A3").Offset(1, 0) <> "" Then Worksheets("Zahlungsstatus").Range("A3").End(xlDown).Select
nein, es liegt daran, dass die Eintragung 2x programmiert ist. Lies den code mal durch und schaue z.B. nach "Rechnungsnr". Oder lass den Code mit F8 schrittweise laufen und schaue, was passiert.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Mit001
Vielen dank für die Hilfe... Ja, wäre besser für mich gewesen ich hätt es einzeln geschrieben statt einzufügen. Bin Neuling mit VBA , hab eben wieder dazu gelernt Danke