2k 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
Hi,
ich komme damit nicht ganz klar?
Verstehe ich das so, dass die vom Debugger angezeigte Zeile:
"Datei = Left(ThisWorkbook.Name, InStr(1, ThisWorkbook.Name, ".") - 1)"
nur dahingehend geändert werden soll:
"Datei = ThisWorkbook.name" oder aber:
"Datei = "MeineNr.lnr" ?

Und nur diese Zeile?

Ich habe in deinem Makro folgendes geändert:

Set NrPos = Range("K11")
besagte Zeile:
Datei = Left(ThisWorkbook.Name, InStr(1, ThisWorkbook.Name, ".") - 1)
in:
Datei = "MeineNr.lnr"

Vorlage startet nun ohne Fehlermeldung, aber in meinem Feld K11
wird nichts eingetragen.

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

sorry. Ich vergesse immer wieder, dass es da draußen auch noch Leute
gibt, die noch keine Erfahrung mit VBA haben.

Also ja, du verstehst das richtig. Das Wort Datei ist eine Variable. Hier
kannst du hinterlegen, wie die Text-Datei in der die Nr. gespeichert wird,
heißen soll. Den gewählten Dateinamen gibt man in Anführungszeichen
an. Hier: "MeineNr.lnr"

Warum die Vorlage nach deiner Anpassung startet und vorher nicht kann
ich mir immer noch nicht erklären, da es eigentlich egal ist, wie man die
Text-Datei nennt.

Dass jetzt aber immer noch nichts eingetragen wird, liegt wohl an der
Zeile
If Right(dname, 4) = ".xlt" Or Right(dname, 5) = ".xltx" Then
Hier wird geprüft, ob es sich um eine Excel-Vorlage mit der Dateiendung
xlt oder xtlx handelt und der weitere Code nur dann ausgeführt. Da Excel
2010 beim Start aber nur Makros ausführt wenn die Datei auf xltm oder
xlsm endet, solltest du auch diese Zeile (wie in Antwort 7 beschrieben)
an den Namen deiner Excel-Vorlage anpassen.

Prüfe auch, ob der Dateipfad korrekt ist z.B. "C:\Programme" aber nicht
"C:\Programme\" Wenn du hier keine Änderung vorgenommen hast,
sollte die Textdatei im gleichen Ordner wie deine ExcelVorlage liegen.
Prüfe auch, ob du überhaupt Schreibberechtigung auf diesen Ordner
hast.

Mr. K.
0 Punkte
Beantwortet von
Hi,

keine Ursache.
Aber auch an diese Zeile habe ich gedacht und sie geändert.
Auch das hat aber nichts genutzt.
Hier mal ein paar Fakten:
- Ich arbeite mit der Vorlage "Rechnungsvorlage.xltm".
- Habe auch mal die Variante xlt und xltx - indem ich sie neu unter diesen
Endungen abgeseichert hatte - experimentiert.
- Auch den Ordner einmal mit "H:\Test" angegeben.
Alles ohne Erfolg.
Nachfolgend einmal das Makro in meiner "Rechnungsvorlage.xltm":

Private Sub Workbook_Open()

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

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

Datei = "MeineNr.lnr"
'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) = ".xltm" 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

Gruß / KACZ6
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

bei Excel 2010 funktioniert der folgende Code nicht, wenn du deine Datei "Rechnungsvorlage" als xltm (Vorlage) hinterlegt hast und die Vorlage z.B. über "Neu" oder per Doppelklick auf die Rechnungsvorlage.xltm öffnest:

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


Denn die dann neu erstellte Datei hat noch keine Endung.
Lass dir mal den Namen der Datei per Messagebox anzeigen:

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


Du wirst sehen, dass dort nur "Rechnungsvorlage1" steht.
Wenn du die Rechnungsvorlage über das Öffnen-Menü öffnest, also die Vorlage selbst, klappt das hochzählen.

Da die so neu erstellte Datei auch noch nicht gespeichert ist, gibt es natürlich auch keinen Pfad, so dass die Datei mit der letzten Rechnungsnummer nicht gespeichert werden kann.

Probier mal die folgende Version aus:

Private Sub Workbook_Open()

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

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

Datei = "MeineNr"
'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 Left(dname, 16) = "Rechnungsvorlage" 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


Gruß

M.O.
0 Punkte
Beantwortet von
Hi M. O.,

danke vielmals, hast mir sehr geholfen.

Mit Doppelklick auf die Vorlage wäre zwar schön, aber was nicht geht, geht nun mal nicht.
Über Datei öffnen funktioniert es. Damit kann ich leben.

Die zweite Variante hingegen funktioniert nicht.
Wird zwar geöffnet, ohne Fehlermeldung.
Aber auch ohne Rechnungsnummer.

Aber gut, Variante 1 über Datei --> öffnen geht ja.

Gruß und nochmals Danke / KACZ6
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Simon,

bei mir klappt auch die Variante mit dem Doppelklick auf die Datei. Hast du den Pfad entsprechend angepasst, in der die Datei mit der Nummer liegt bzw. liegt diese im richtigen Pfad?

Gruß

M.O.
0 Punkte
Beantwortet von
Hi M.O.,

Ausser "Pfad = ThisWorkbook.Path", die Zeile habe ich auf "H:\Test" angepasst,
habe ich keinen weiteren Pfad angegeben.

Die Datei "MeineNr.lnr" wird korrekt erzeugt und liegt auch im Pfad "H:\Test".
Bei Doppelklick wird, wie ich schon mittelte, keine Nr. eingetragen.

Gruß / KACZ6
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Simon,

Ausser "Pfad = ThisWorkbook.Path", die Zeile habe ich auf "H:\Test" angepasst, habe ich keinen weiteren Pfad angegeben.


Welches Makro hast du ausprobiert? Das Orginale oder das von mir gepostete, das ich geändert habe? Denn bei meinem Makro ist kein "Pfad = ThisWorkbook.Path" vorhanden.

Beachte bitte auch, dass immer nur ein Makro mit Private Sub Workbook_Open()
in dem VBA-Projekt der Arbeitsmappe stehen kann.

Gruß

M.O.
0 Punkte
Beantwortet von
Hi M.O.,

jetzt verstehe ich die Welt nicht mehr. :-0
Hatte beide Makros vergeblich probiert.

Habe sonst keine Makro mit "Private Sub Workbook_Open()" in der Mappe.
Nun habe ich die Vorlage nochmals geöffnet, das betsehende Makro entfernt.
Dann dein neues Makro eingefügt und die Vorlage unter einem anderen Namen
gespeichert.
Und siehe da, nun funktioniert es auf einmal mit dieser neuen Vorlage auch mittels
Doppelklick. Obwohl ich beim ersten Mal mit deinem neuen Makro genau so
vorgegangen bin.

Verstehe das, wer will.

Aber jetzt klappt alles so, wie ich mir das gewünscht habe.

Vielen Dank nochmal und Gruß

KACZ6
0 Punkte
Beantwortet von
Hi All,

da war ich mit Antwort 9 so nah dran und habe es trotzdem nicht gesehen. Hätte nicht gedacht, dass sich Excel 2010 ausgerechnet an dieser Stelle anders verhält, als frühere Versionen. Macht aber durchaus Sinn, da ja noch nicht klar ist, als was man die Child-Tabelle speichern will. Wieder ein Unterschied mehr auf meiner Liste. Sollte mir wohl doch irgendwann mal ne eigene 2010er Version zulegen, damit ich nicht immer meinen Kumpel belästigen muss.

Auch von meiner Seite vielen Dank an M.O. für die zwischenzeitliche Aufklärung und die finale Lösung.

Mr. K.
...