VBA übertragen in neue Zelle
#1
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

End If

Next
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = Rechnungsnr
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Kundennr
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Name
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Rechnungsbetrag
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Rechnungsdatum

End Sub
Antworten Top
#2
Hallo,

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.

Grüße

Norbert
Antworten Top
#3
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.


Angehängte Dateien
.xlsm   RechnungenTestDatei.xlsm (Größe: 19,71 KB / Downloads: 0)
Antworten Top
#4
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.


Angehängte Dateien
.xlsm   RechnungenTestDatei.xlsm (Größe: 19,71 KB / Downloads: 4)
Antworten Top
#5
Hi,

ohne Deinen Code jetzt zu verbessern - Du musst nur das hier von A3 auf A4 ändern:

Worksheets("Zahlungsstatus").Range("A4").End(xlDown).Select
Antworten Top
#6
Hi,

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
[-] Folgende(r) 1 Nutzer sagt Danke an {Boris} für diesen Beitrag:
  • Mit001
Antworten Top
#7
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

Code:
Sub Rechnungpdf()

Dim DateiName As String

    DateiName = Range("R2") & Range("R1") & ".pdf"

    Range("A1:I45").ExportAsFixedFormat Type:=xlTypePDF, Filename:=DateiName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
   
    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

End If

ActiveCell.Offset(1, 0).Select
ActiveCell.Value = Rechnungsnr
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Kundennr
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Name
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Rechnungsbetrag
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Rechnungsdatum

Dim sRechnungsnr As Variant, sKundennr As Variant, sRechnungsdatum As Date, sRechnungsbetrag As Double, sName As String
Dim lngNextRow As Long
With Worksheets("Rechnung")
    Rechnungsnr = .Range("R1")
    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
    .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
   
    thisworkbook.Sheets("Rechnung").Range("E17") = thisworkbook.Sheets("Rechnung").Range("E17") + 1
   
End Sub
Antworten Top
#8
Hallöchen,

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:
  • Mit001
Antworten Top
#9
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste