Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Neues Tabellenblatt mit Name und geänderten Zellen
#1
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
Antworten Top
#2
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)
Antworten Top
#3
(04.02.2016, 15: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
Antworten Top
#4
Hi,

(04.02.2016, 15: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.
Antworten Top
#5
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
Antworten Top
#6
Hi Nik,

(05.02.2016, 12: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.

.xlsb   2016 Rechnungen.xlsb (Größe: 22,74 KB / Downloads: 7)
Antworten Top
#7
Vielen Dank für eure Infos und Tipps, vielen Dank Rabe für das erstellen!!
Viele Grüße,
Asm
Antworten Top
#8
Hi Nick,

(05.02.2016, 20:55)Agentsmith schrieb: vielen Dank Rabe für das erstellen!!

vielleicht kann sich atilla die Datei noch anschauen und die beiden fehlenden Sachen einbauen.
Antworten Top
#9
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:

.xlsb   2016 Rechnungen -Rabe.xlsb (Größe: 24,28 KB / Downloads: 4)

hier die ältere Version:

.xlsb   2016 Rechnungen.xlsb (Größe: 22,74 KB / Downloads: 0)
Antworten Top
#10
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
Antworten Top


Gehe zu:


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