Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Excel





Frage

Hallo Hätte da ein Problem.Ich habe mir bei Excel in der Mustervorlage eine Rechnung erstellt, und hinbekommen,das wenn ich eine Nummer eingebe es mir den Name und Adresse einfügt.Nun mein Frage. Wie kann ich das machen das wenn ich speichere es mir den Betrag in Kundendatei einträgt und beim nächsten mal speichern den Betrag in die Zeile darunter!!!!!!!.Wäre für einen Tip sehr Dankbar Im vorhinen sage ich schon mal Danke Helmut

Antwort 1 von coros

Moin Helmut,

nachfolgenden Code kopiere in das VBA Projekt "DieseArbeitsmappe".

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Zeile As Long
Application.ScreenUpdating = False
Zeile = Sheets("Kundendatei"). _
Range("A65536").End(xlUp).Offset(1, 0).Row
Cells(1, 1).Copy
Sheets("Kundendatei").Cells(Zeile, 1).PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub


Bei diesem Code wird immer bevor gespeichert wird, der Inhalt aus Zelle A1 des aktiven Blatt´s in die erste leere Zeile in Blatt "Kundendatei" in Spalte kopiert.

Da ich mal davon ausgehe, das Dein Betrag in einer anderen zelle als A1 steht, dann musst Du in dem Code in der Zeile

Cells(1, 1).Copy

eine andere Zelleadresse angeben. Die erste Zahl in der Klammer sagt die Zeile aus.Die zweite ist die Spaltenindexzahl und steht für die Spalte. In diesem Fall steht die 1 für Spalte A. Wenn der Wert z.B. in Spalte B steht, dann muss anstelle der 1 eine 2 stehen, wenn es um Spalte C geht, eine 3 usw. Ebenso nehme ich mal an, dass der kopierte Wert nicht unbeding in Spalte A eingefügt werden soll. Daher musst Du in dem Code in der Zeile

Sheets("Kundendatei").Cells(Zeile, 1).PasteSpecial Paste:=xlPasteValues, _

die Spaltenindexzahl ebenfalls abändern. Wenn das Tabellenblatt, wohin der Wert kopiert werden sollen, nicht "Kundendatei" heißt, dann musst Du den bitte in der obigen Zeile ebenfalls ändern.

Wenn Du nicht weißt, wie Du den Code in Deine Datei bekommst, dann schau doch mal auf meiner HP in der Rubrik Anleitungen und dort dann Anleitung zum VBA Projekt “Diese Arbeitsmappe" vorbei. Dort habe ich eine bebilderte Anleitung, die Dir sicherlich behilflich sein wird.

Wenn Du noch Fragen zu dem VBA Code hast, oder Probleme damit auftauchen, dann melde Dich hier wieder.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Helmut46

Moin coros
Erst mal Danke für die schnelle Hilfe.
Habe es genauso gemacht wie du es mir geschrieben hast, es schreibt mir den Betrag in die Zeile wo ich sie hinhaben wollte,einfach super ! Nun aber noch ein Problem. Habe mir den Code in die Mustervorlage gespeichert. Wenn ich nun einen Betrag speichere, wird es mir unter einen Namen gespeichert, super!
Wenn ich die Mustervorlage wieder öffne schreibt es mir den Betrag aber wieder in die gleiche Zeile in der
Rechnungsdaten. Was ich meine..es überschreibt den alten Betrag wieder. Ich möchte aber das die Beträge untereinander stehen.
Vieleicht kannst du mir nochmal weiterhelfen.

Helmut

habe den Code wie folgt geändert

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Zeile As Long
Application.ScreenUpdating = False
Zeile = Sheets("Rechnungsdaten"). _
Range("A65536").End(xlUp).Offset(1, 0).Row
Cells(44, 8).Copy
Sheets("Rechnungsdaten").Cells(15, 5).PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

Antwort 3 von coros

Moin Helmut,

sorry, ich hatte vergessen zu schreiben, dass wenn der Wert in eine andere Spalte als die Spalte A kopiert wird, auch die Zeile

Range("A65536").End(xlUp).Offset(1, 0).Row

geändert werden muss. Diese Zeile ermittelt in der Spalte A die nächste freie Zeile. Da Du den Wert in die Zeile E schreibst, muss in dem VBA Code die Zeile in

Range("E65536").End(xlUp).Offset(1, 0).Row

geändert werden.

Ich hoffe, Du kommst klar. Ansonsten wieder melden. Ich gehe jetzt erst mal frühstücken.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von Helmut46

Hallo coros

Tut mir leid das ich schon wieder da bin .
Aber es haut nicht ganz so hin,ich öffne die Datei setze Betrag ein speichere sie mit einem Namen,steht alles schön drin E 15.Öffne wieder Rechnung.. anderer Betrag.. speichern ..anderer Name,bei jeder Datei steht der eingegebene Betrag, aber alle auf E15 und nichts
untereinander.
Rechnung und Rechnungsdaten habe ich in der gleichen Arbeitsmappe. Meinst du es hat damit zutun das es nicht geht?

Danke Helmut

Habe den Code nach deinen Anweisungen geändert

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Zeile As Long
Application.ScreenUpdating = False
Zeile = Sheets("Rechnungsdaten"). _
Range("E65536").End(xlUp).Offset(1, 0).Row
Cells(44, 8).Copy
Sheets("Rechnungsdaten").Cells(15, 5).PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

Gruß Helmut

Antwort 5 von coros

Hi Helmut,

Dein Fehler liegt in der Zeile

Sheets("Rechnungsdaten").Cells(15, 5).PasteSpecial Paste:=xlPasteValues, _

Bei meinem Ausgangscode stand dort

Sheets("Kundendatei").Cells(Zeile, 1).PasteSpecial Paste:=xlPasteValues, _

Du hast den Code wie oben abgeändert. Falsch daran ist, dass Du das Wort Zeile gelöscht hast und durch den Zeilenindex 15 ersetzt hast. Damit sagst Du dem Code, dass die kopierte Zahl immer in E15 eingefügt werden soll. Das Wort Zeile muss aber bleiben, da das eine Variable ist, die immer die Zeilenindexzahl der nächsten freien Zeile angibt. Lösche also in dem Code die gesamte Zeile und füge statt dessen die Zeile

Sheets("Rechnungsdaten").Cells(Zeile, 5).PasteSpecial Paste:=xlPasteValues, _

ein, dann sollte es funktionieren. Wenn nicht, dann wieder melden.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von helmut46

Hallo coros

Es klappt ist ja super !!!!!!!!!
Vielen dank für deine hilfe
Bin Maler wenn du mal deine Bude streichen wilst,
kannst dir auch ein paar Tips bei mir holen !!!!!

Gruß Helmut

Antwort 7 von helmut46

Hallo coros

Ich hoffe du schaust nochmal rein hier.
Hätte nochmals eine Frage,ich habe vergessen zu erwähnen das ich die Zellen wo der Betrag steht
auch hin und wieder verschieben muß. Normal steht sie auf H44 .Es kommt auch vor das die Rechnung über zwei Seiten geht,muß also den Bereich dann auf die zweite Seite manuell verschieben,macht mir da deine Formel mit oder muß mann da noch was ändern.
Würde mich über Antwort freuen

gruß Helmut

Antwort 8 von schnallgonz

Salve Helmut,

nur für den Fall, dass Coros hier nicht mehr vorbeikommen sollte (was aber unwahrscheinlich ist):
ich arbeite gerne mit Namen in Excel, d.h. ich weise einer Zelle eine feste Bezeichnung zu über "Einfügen / Namen / Festlegen".

Wenn du das mit Deiner "Betragszelle" in H44 machst, also z.B. den Namen "ZelleWoBetrag" vergibst, kannst Du diese Zelle immer mit folgendem Befehl anspringen:

Application.Goto Reference:="ZelleWoBetrag"
Selection.Copy

Ob dann nach Zelleneinfügen oder Zellenverschieben ein anderer Zellenindex entsteht, ist egal.

Den obigen Code stellst Du anstatt

Cells(44, 8).Copy

in Dein Listing, fertig.
Kann wahrscheinlich nicht nur Coros eleganter lösen, sollte aber funzen.
MfG
schnallgonz

Antwort 9 von Helmut46

Danke

hat Super funktioniert !!!!
So Exeldoofis wie ich können nur froh sein das es so nette User gibt die einem weiterhelfen :-)
Danke nochmal bis zur nächsten Frage..gg

Helmut