Registriert seit: 04.02.2016
Version(en): 2016
Hallo zusammen,
habe das halbe Internet durchforstet und irgendwie komme ich zu keiner Lösung. Bin auch noch Makroneuling. Ich denke es kann nicht so schwer sein, oder vielleicht doch? Ich bin selbstständig und baue mir gerade eine Buchführungstool in Excel. Die Datei sieht so aus, dass alle Rechnungen von 1- 2399 in Tabellenblättern von links nach rechts in einer Arbeitsmappe angeordnet werden sollen. Im ersten Tabellenblatt "2016001" gibt es eine Zelle mit der entsprechenden Rechnungsnummer "2016001". Ich möchte nun erreichen, dass beim Erstellen eines neuen Tabellenblattes folgendes passiert:
- Neues Tabellenblatt heißt automatisch "2016002" - im neuen Tabellenblatt ist die Rechnungsnummer um 1 erhöht, also 2016002
Könnt ihr mir erklären was der einfachste Weg/Code ist?
Ich bedanke mich recht herzlich,
Grüße
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Hallo Grüße! Die andere Hälfte des Internets hat sich darauf geeinigt, dass ein (übertriebenes) Splitten auf Sheets zu mehr Problemen führt, als dass es sie löst. (siehe auch grundsätzliches zu Listen: http://www.online-excel.de/excel/singsel.php?f=52) Mache eine Datentabelle mit allen Angaben und werte sie mittels Autofilter oder besser mit einer Pivot-Tabelle aus. Dies beinhaltet auch den Ausdruck. (im Sinne eines "Formulars") Ansonsten sind Deine Infos zu dürftig. Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 04.02.2016
Version(en): 2016
(04.02.2016, 16:10)RPP63 schrieb: Hallo Grüße! Die andere Hälfte des Internets hat sich darauf geeinigt, dass ein (übertriebenes) Splitten auf Sheets zu mehr Problemen führt, als dass es sie löst. (siehe auch grundsätzliches zu Listen: http://www.online-excel.de/excel/singsel.php?f=52)
Mache eine Datentabelle mit allen Angaben und werte sie mittels Autofilter oder besser mit einer Pivot-Tabelle aus. Dies beinhaltet auch den Ausdruck. (im Sinne eines "Formulars") Ansonsten sind Deine Infos zu dürftig.
Gruß Ralf Hallo Ralf, mein Name steht doch oben :). Danke für deine Antwort. Rechnungen von 1-2399 war nur ein Beispiel. Tatsächlich werden es nur 10 Tabellenblätter pro Jahr maximal. Das geht von der Komplexität. Die einzelnen Sheets sind auch gleichzeitig meine druckbaren Rechnungen, weswegen eine einzige Datentabelle nicht funktioniert. Wenn ich also die gleiche Frage stelle, und die Information zu 1-10 TB ändere, gibt es dann eine Möglichkeit? Und welche Infos würden dir denn noch fehlen um eine Lösung zu finden? Vielen Dank Agentsmith
Registriert seit: 10.04.2014
Version(en): 2016 + 365
05.02.2016, 09:50
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2016, 09:50 von Rabe.
Bearbeitungsgrund: fehlender Satzteil ergänzt
)
Hi, (04.02.2016, 16:36)Agentsmith schrieb: Die einzelnen Sheets sind auch gleichzeitig meine druckbaren Rechnungen, weswegen eine einzige Datentabelle nicht funktioniert. das geht doch ganz einfach, indem Du ein einziges Arbeitsblatt als Rechnungsformular einrichtest und die ganzen Daten in einem weiteren Arbeitsblatt. Wenn Du dann mit einem Dropdown (Gültigkeitsliste, Bezug auf die Spalte in der Datentabelle) die Rechnungsnummer auf dem Rechnungsblatt eingibst, und dann mittels SVERWEIS die ganzen Daten aus dem Datenblatt in die Rechnung rüberholst, kannst Du jeden einzelnen Datensatz anzeigen und ausdrucken lassen. Geht einwandfrei und die Datei ist klein und schnell.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Agentsmith, ob nur max 10 oder mehr, ich würde trotzdem eine Liste erstellen. Ich beschreib' mal, wie so etwas aufgebaut werden kann. Du hast eine Mappe in der folgende Tabellen enthalten sind: 1. Ein Blatt mit Deinem Rechnungsformular. 2. Ein Blatt mit Kundendaten 3. Ein Blatt in dem alle Rechnungen als Liste geführt werden. Man kann dann später jederzeit aus dieser Liste verschiedenste Abfragen starten. z.B. Umsatz pro Kunde, pro Zeitraum, MWSt pro Zeitraum etc. Du füllst Dein Rechnungsformular aus und per Knopfdruck wird dann alles in die Liste übertragen. Außerdem wird das Rechnungsblatt alleine als neue Datei im Ordner Rechnungen gespeichert. Den Dateinamen kann man dann nach Wunsch festlegen. Er könnte aus Rechnungsnummer und Datum zusammengestellt sein. Das mal nur grob als allgemeine Info, es können noch einige Sachen hinzukommen. Dein Vorhaben kann man mit unten stehendem Code umsetzen. Ich gehe davon aus, dass Du eine Schaltfläche aus den Formularsteuerelementen nutzt um den Code zu starten. Lies Dir die Kommentare im Code durch. Gegebenenfalls musst Du Anpassungen vornehmen. Code: Sub mach() Dim RechnungsNummer As Long With Sheets("RechnungsVorlage") 'Name der Tabelle Rechnung -> anpassen .PrintOut 'Rechnung wird gedruckt RechnungsNummer = .Range("A1") 'Zelle mit der Rechnungsnummer ActiveSheet.Copy After:=Sheets(Sheets.Count) 'Rechnung wird ans Ende Tabellen kopiert ActiveSheet.Name = RechnungsNummer 'Die Kopie wird benannt nach der Rechnungsnummer ActiveSheet.Shapes("Button 1").Delete 'Schaltfläsche in der Kopie wird gelöscht .Range("A1") = RechnungsNummer + 1 'Rechnungsnummer wird erhöht .Select End With End Sub
Gruß Atilla
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Nik, (05.02.2016, 13:46)atilla schrieb: Lies Dir die Kommentare im Code durch. Gegebenenfalls musst Du Anpassungen vornehmen. ich habe das Makro jetzt mal in Deine anonymisierte Datei eingebaut. Vorarbeiten Du füllst das Blatt Kundendaten aus durch untereinander eintragen der erforderlichen Daten für alle Deine Kunden. Rechnungsdatum ist momentan das aktuelle Datum, evtl. sollte das auch per Hand eingegeben werden. Dann gibst Du die gewünschte Kundennummer im Formular ein und die Kundendaten werden aus dem vorher ausgefüllten Blatt geholt. Dann gibst Du die gekauften Produkte/Services ein und drückst auf den Button. Die Rechnung wird ausgedruckt und als extra Arbeitsblatt hinten angehängt. Das Abspeichern der Rechnung als extra Datei und das kopieren der Rechnungsdaten in die Datenbankliste fehlt noch.
2016 Rechnungen.xlsb (Größe: 22,74 KB / Downloads: 7)
Registriert seit: 04.02.2016
Version(en): 2016
Vielen Dank für eure Infos und Tipps, vielen Dank Rabe für das erstellen!! Viele Grüße, Asm
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Nick, (05.02.2016, 21:55)Agentsmith schrieb: vielen Dank Rabe für das erstellen!! vielleicht kann sich atilla die Datei noch anschauen und die beiden fehlenden Sachen einbauen.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
10.02.2016, 11:54
(Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2016, 11:54 von Rabe.)
Hi, ich habe nun das Übertragen der Rechnungs-Daten in die Datenbankliste und Speichern der Rechnung als PDF eingebaut. Es muß noch das Löschen der aktuellen Rechnung bestätigt werden. noch zu tun: - Ausschalten der Lösch-Bestätigung
- Einbau der Erweiterung der Datenbankliste auf mehrere verkaufte Artikel
- Erweiterung der Datenbankliste um Gesamt-Rechnungsbetrag und MWSt
Hier das Makro: Option Explicit
Sub mach() Dim RechnungsNummer As Long Dim loLetzte As Long Dim loErste As Long Dim strDatei As String With Sheets("Datenbankliste") loLetzte = .Cells(Rows.Count, 2).End(xlUp).Row 'letzte belegte Zeile in Spalte B (2) ermitteln loErste = loLetzte + 1 'erste freie Zeile End With With Sheets("RechnungsVorlage") 'Name der Tabelle Rechnung -> anpassen .PrintOut 'Rechnung wird gedruckt RechnungsNummer = .Range("K23") 'Zelle mit der Rechnungsnummer Sheets("Datenbankliste").Range("A" & loErste) = .Range("K22") 'KD-Nr Sheets("Datenbankliste").Range("B" & loErste) = .Range("C16") 'Name Sheets("Datenbankliste").Range("C" & loErste) = .Range("C17") 'Firma Sheets("Datenbankliste").Range("D" & loErste) = .Range("C18") 'Strasse Sheets("Datenbankliste").Range("E" & loErste) = .Range("C19") 'Ort Sheets("Datenbankliste").Range("F" & loErste) = .Range("C20") 'Land Sheets("Datenbankliste").Range("G" & loErste) = .Range("C21") 'PLZ Sheets("Datenbankliste").Range("H" & loErste) = .Range("K23") 'Re-Nr Sheets("Datenbankliste").Range("I" & loErste) = .Range("K21") 'Re-Datum Sheets("Datenbankliste").Range("J" & loErste) = .Range("D30") 'Bezeichnung 1 Sheets("Datenbankliste").Range("K" & loErste) = .Range("F30") 'Bezeichnung 2 Sheets("Datenbankliste").Range("L" & loErste) = .Range("G30") 'Anzahl Sheets("Datenbankliste").Range("M" & loErste) = .Range("H30") 'Preis/Einheit Sheets("Datenbankliste").Range("N" & loErste) = .Range("J30") 'Gesamt ActiveSheet.Copy After:=Sheets(Sheets.Count) 'Rechnung wird ans Ende der Tabellen kopiert ActiveSheet.Name = RechnungsNummer 'Die Kopie wird benannt nach der Rechnungsnummer ActiveSheet.Shapes("Button 1").Delete 'Schaltfläche in der Kopie wird gelöscht strDatei = "C:\Temp\" & RechnungsNummer & ".pdf" 'Definition des Datei-/Blattnamens, Pfad anpassen! ActiveSheet.Copy 'Erzeugen einer neuen Datei End With With ActiveWorkbook 'Speichern als PDF .ExportAsFixedFormat Type:=xlTypePDF, Filename:=strDatei, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False .Close savechanges:=False End With With ThisWorkbook ActiveSheet.Delete 'Löschen der Rechnungskopie Sheets("RechnungsVorlage").Select 'Sprung zur Vorlage Sheets("RechnungsVorlage").Range("K23") = RechnungsNummer + 1 'Rechnungsnummer wird erhöht End With End Sub
Hier die Datei:
2016 Rechnungen -Rabe.xlsb (Größe: 24,28 KB / Downloads: 4)
hier die ältere Version:
2016 Rechnungen.xlsb (Größe: 22,74 KB / Downloads: 0)
Registriert seit: 29.09.2015
Version(en): 2030,5
Code: Sub M_snb() With Sheets("RechnungsVorlage") .PrintOut .ExportAsFixedFormat 0, "G:\OF\Beispiel" & .[K23] & ".pdf"
Sheets("Datenbankliste").Cells(Rows.Count, 2).End(xlUp).Offset(1, -1).Resize(, 14) = Array(.[K22], .[C16], .[C17], .[C18], .[C19], .[C20], .[C21], .[K23], .[K21], .[D30], .[F30], .[G30], .[H30], .[J30]) .Cells(23, 11) = .Cells(23, 11) + 1 End With End Sub
|