1.5k Aufrufe
Gefragt in Datenbanken von
Mein System; Windows 7
Excel-Version: 2010

Hallo,
ich verwende eine Vorlage zur Rechnungserstellung.
Nun soll bei jedem Aufruf dieser Vorlage die Rechnungsnummer in Feld K11 fortlaufend um 1 erhöht werden.
Bei meiner Recherche im Netz bin ich auf verschiedene Makros gestoßen, die mir nicht den gewünschten Erfolg brachten.
Kann mir jemand mittels ggf. eines Makros und einer kurzen Erklärung weiterhelfen?

Besten Dank vorab und Gruß

VISRef

21 Antworten

0 Punkte
Beantwortet von
so in etwa:
Option Explicit

Private Sub Workbook_Open()
With Worksheets("Tabelle1").Cells(11, 11)
.Value = .Value + 1
End With
End Sub


das Ganze muss ins Klassenmodul "DieseArbeitsmappe"
0 Punkte
Beantwortet von
Hi,

habe es wie folgt versucht:
- Datei (Rechnungsvorlage-KU.xltx) geöffnet.
- Unter "DieseArbeitsmappe" ein Klassenmodul eingefügt.
- Dort den Code eingefügt.
- Den Wert "Tabelle1" in "KU-Rechnung" (so lautet das Tabellenblatt) geändert.
- Das Ganze als "Rechnungsvorlage-KU.xlsm" abgespeichert.

Beim Aufruf dieser Datei passiert leider nichts.
Was mache ich ggf. falsch?

Danke und Gruß / VISRef
0 Punkte
Beantwortet von
nee, sorry, kein Klassenmodul einfügen, das kannst wieder entfernen

einfach rechtsklick auf "DieseArbeitsmappe" > "Code anzeigen"
dann rechts den code einfügen
0 Punkte
Beantwortet von
Hi,
klappt insoweit, dass die Rechnungsnummer nun 1 lautet.
Aber da ich die ausgefüllte Rechnung ja unter z.B. dem Kundennamen abspeichern muss, wird beim 2. 3. usw. Aufruf der Vorlage die Rechnungsnummer nicht erhöht. Es bleibt bei Nr. 1.
Weitere Frage:
Ist es möglich dass die Rechnungsnummer 4stellig (also 0001, 0002 usw.) eingestellt werden kann?

Danke vorab und Gruß /KACZ6
0 Punkte
Beantwortet von
Hi All,

ich habe das vor ein paar Jahren auch mal gemacht. Damals habe
ich das so gelöst:

Die Nr. wird hier extern in einer Textdatei gespeichert. Nur so ist
gewährleistet, dass nicht gleichzeitig, während man die Rechnung
schreibt, ein anderer Nutzer im Netzwerk auch auf die Vorlage
zugreift und eine Rechnung mit gleicher Nr. erwischt. Die
Dateiendung .lnr ist hier frei erfunden und steht für laufende Nr.

Hier der Code für Modul "Diese Arbeitsmappe":

Private Sub Workbook_Open()

Set NrPos = Range("C3") 'Zelle, wo die Nr. eingefügt werden soll

Pfad = ThisWorkbook.Path
'Alternativ: Pfad="Ordner\Subordner" 'Das letzte Zeichen darf nicht "\"
sein.

Datei = Left(ThisWorkbook.Name, InStr(1, ThisWorkbook.Name, ".")
- 1)
'Alternativ: Datei = "Dateiname"

Datei = Datei & ".lnr" 'ausgedachte Dateiendung
'Datei kann im Explorer mit Editor oder Notepad geöffnet werden.

'Prüft ob wirklich von Vorlage geöffnet
dname = ThisWorkbook.Name
If Right(dname, 4) = ".xlt" Or Right(dname, 5) = ".xltx" Then
'Alternativ: If ThisWorkbook.Name = "MeineDateiVorlage.xlsx" then

On Error GoTo Fehler

'Öffnet lnr-Datei und liest diese aus.
Open Pfad & "\" & Datei For Input As #1
Input #1, Nr
Close #1

'zählt die Nr. hoch und schreibt sie ins Formular
Nr = Nr + 1
NrPos.Value = Nr
NrPos.NumberFormat = "0000"

'Speichert die neue Nr. wieder in der lnr-Datei
Open Pfad & "\" & Datei For Output As #1
Print #1, Nr
Close #1
End If


'Beendet den Code da nachfolgender nur sehr selten ausgeführt
wird.
Exit Sub

'wenn lnr-Datei nicht existent wird sie mit Standardnr. 0 erstellt
Fehler:
Open Pfad & "\" & Datei For Output As #1
Print #1, 0 '0 = Standardnr. von der hochgezählt werden soll.
Close #1
Resume Next

End Sub
Das Ganze ist natürlich nur ein Behelf. In der Regel wird für
das Schreiben von Rechnungen in Firmen ein IDW-Zertifiziertes
oder zumindest GoB-Testiertes ERP-System vorausgesetzt. Oder in
Vereinen ein Datenbankprogramm wie Access genutzt.

Gruß Mr. K.
0 Punkte
Beantwortet von
,,, und wieder hat das schmale Postingfenster hier zugeschlagen. Bei der
roten CodeZeile zum Dateinamen muss das -1) hinter die vorherige Zeile.
0 Punkte
Beantwortet von
Trotz eingiebiger Tests ist, glaube ich doch noch ein Bug drin, der nur in
Excel 2010 auffällt, das ich nicht habe. Ich arbeite noch mit einer älteren
Version.
Ändere die Zeile
If Right(dname, 4) = ".xlt" Or Right(dname, 5) = ".xltx" Then in
If Right(dname, 4) = ".xlt" Or Right(dname, 5) = ".xltm" Then
Das setzt natürlich voraus, dass du deine Vorlage als Excel-Vorlage mit
Makros (xltm) gespeichert hast. Oder du nutzt die Alternativvariante.

Mr. K.
0 Punkte
Beantwortet von
@ Mr. K.

Danke zunächst einmal.
Habe den Code (mit deinen Änderungen -ich nutze Excel 2010- und auf die Zelle in meiner Tabelle) in "DieseArbeitsmappe" eingefügt.

Beim Aufruf kommt folgende Fehlermeldung:

Laufzeitfehler: '5':

Ungültiger Prozeduraufruf oder ungültiges Argument

Der Debugger liefert diese Zeile:
Datei = Left(ThisWorkbook.Name, InStr(1, ThisWorkbook.Name, ".") - 1)

Mache ich etwas falsch, oder wo könnte der Fehler liegen?

Gruß / KACZ6
0 Punkte
Beantwortet von
Hallo,

wie gesagt. Auch nach vielen Jahren funktioniert das bei mir noch
einwandfrei.

Die Codezeile sollte auch in Excel 2010 funktionieren. Hier wird mit Instr.
der Punkt im Dateinamen der ExcelDatei gesucht und mit Left nur der
Teil des Dateinamens zurückgegeben, der vor dem Punkt steht. Damit
dann die eigene Endung .lnr angefügt werden kann. Der von dir
beschriebene Fehler kommt bei mir nur dann, wenn die Arbeitsmappe
noch nicht gespeichert wurde, es also noch keine Dateiendung und
somit keinen Punkt im Dateinamen gibt.

Oder (aus welchem Grund auch immer) liefert dir auf deinem System die
Eigenschaft ThisWorkbook.Name einen Nullstring "" zurück.

Hilft dir das irgendwie weiter? Beides kann ich mir nicht so richtig
vorstellen.

Mr. K.
0 Punkte
Beantwortet von
Alternativ kannst du für diese Zeile auch einfach nur
Datei = ThisWorkbook.name oder Datei = "MeineNr.lnr" schreiben.
Im ersten Fall würden dann die NrDatei halt einfach nur Vorlage.xlsx.lnr
heißen. Sieht doof aus, geht aber auch.
...