Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA - Rechnungsnummer

VBA - Rechnungsnummer
07.01.2008 11:01:25
Charly
Hallo zusammen
Ich habe Probleme mit diesen VBA-CODE - "Generieren einer Rechnungsnummer"
http://excel-vba.info/files_excel_tip_139.html
Nun habe ich denn oberen ersten VBA-Code genau so bearbeitet wie es beschrieben ist.
Sollte ja einfach sein.
Jetzt Funktioniert das ganze einfach nicht. Es generiert mir überhaupt nichts.
Wo weiss der CODE in welches Feld er die RECH.-Nummer bei meiner Rechnung aktualisieren soll?
Liegt das daran, das oben, bei der Seite für Version Excel 97, 2000, 2002(XP) heisst?
Denn ich Arbeite mit Excel 2003.
Oder gibt es ein besseres VBA-Script?
Vielen Dank für Eure Hilfe
und Grüsse aus der Schweiz
Charly

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 12:12:41
Rudi
Hallo,
der Code ist Müll.
Eine .xls zu benutzen, um die Re-Nr. zu speichern ist viel zu langsam.

Function RechnungsNr()
Dim intFree As Integer
'Datei mit Re-Nr.; anpassen
Const strFile As String = "c:\Temp\ReNr.txt"
intFree = FreeFile
If Dir(strFile, vbNormal)  "" Then
Open strFile For Input As #1
Line Input #1, RechnungsNr
Close 1
End If
RechnungsNr = RechnungsNr + 1
Open strFile For Output As intFree
Print #1, RechnungsNr
Close 1
End Function



Sub test()
Sheets("Tabelle1").Range("A1") = RechnungsNr
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 13:14:00
Erich
Hallo Charly und Rudi,
ein kleiner Lapsus in Rudis Code: intFree wird belegt, aber nur manchmal genutzt.
Hier eine neue Version und eine durch Fehlerhinweise erweiterte Funktion:

Function RechnungsNr() '      von Rudi
Dim intK As Integer
Const strFile As String = "c:\Temp\ReNr.txt" 'Datei mit Re-Nr.; anpassen
intK = FreeFile
If Dir(strFile, vbNormal)  "" Then
Open strFile For Input As #intK
Line Input #intK, RechnungsNr
Close intK
End If
RechnungsNr = RechnungsNr + 1
Open strFile For Output As intK
Print #intK, RechnungsNr
Close intK
End Function
Function RechnungsNummer()
Dim intK As Integer
Const strDat As String = "C:\Daten\Zaehler.txt" ' anpassen
If Dir(strDat) = "" Then
On Error Resume Next
Open strDat For Output As #intK
If Err > 0 Then
MsgBox "Kann Datei '" & strDat & "'nicht anlegen - Abbruch", _
vbCritical, "Funktion RechnungsNummer"
Exit Function
End If
On Error GoTo 0
Write #intK, 0
Close intK
End If
On Error Resume Next
Open strDat For Input As #intK
If Err > 0 Then
MsgBox "Kann Datei '" & strDat & "'nicht öffnen - Abbruch", _
vbCritical, "Funktion RechnungsNummer"
Exit Function
End If
On Error GoTo 0
Line Input #intK, RechnungsNummer
Close intK
RechnungsNummer = RechnungsNummer + 1
Open strDat For Output As #intK
Write #intK, RechnungsNummer
Close intK
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 13:18:35
Charly
Hallo Rudi
Super, ich DANKE dir recht HERZLICH!
Habe aber trotzdem noch ein paar Fragen. Da ich mich mit VBA nicht gut auskenne.
- Der erste Code, muss der in das "Modul1"?
- Und der "Sub test"?
- Oder wo kommen die VBA`s hin?
- Was muss ich in die ReNr.txt Datei hinenschreiben?
Kannst du mir bitte nochmlas Helfen.
Vielen Dank
und Grüsse aus der Schweiz
Charly

AW: VBA - Rechnungsnummer
07.01.2008 14:12:49
Rudi
Hallo,

Der erste Code, muss der in das "Modul1"? 


in irgendein allgemeines Modul.


- Und der "Sub test"? 


ist nur zum testen, auch in ein Modul.


- Was muss ich in die ReNr.txt Datei hinenschreiben?


Die wird automatisch erstellt. Du kannst sie aber auch von Hand erstellen und deine letzte Re-Nr. reinschreiben.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 14:41:00
Charly
Hallo Erich
Hallo Rudi
Dieser VBA ist bei mir nicht gegangen:
Sub test()
Sheets("Tabelle1").Range("A1") = RechnungsNr
End Sub


Aber mit dem VBA habe ich es jetzt soweit geschaft das es mir 1 Zahl hinaufzählt:


Private Sub Workbook_Open()
Tabelle1.Cells(7, 13) = Tabelle1.Cells(7, 13) + 1
End Sub


Aber ich will ja jetzt nicht mit der Nummer 1 Anfangen sondern 1000. oder 1200
Und das klappt bei mir nicht. Obwohl ich bei der Zaehler.txt Datei die Zahl 1000 eingegeben habe.
Hier noch meine Rechnung.xls, wahrscheinlich habe ich was falsch gemacht.
Könnt Ihr mir mal das anschauen?
http://www.teamkaufmann.ch/xls/Rechnung.xls
Konnte hier kein File Uploaden (kam immer Fehlermeldung) deshalb habe ich jetzt mein Server genommen.
Vielen Dank im Voraus
Charly

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 15:25:00
Renee
Hi Charly,
Vielleicht hilft ein Klick hier drauf ? Die Rechnungsnummer wird bei diesem Code in der Registry hinterlegt und fängt beim Jahreswechsel automatisch wieder bei der Konstanten an.
Für den Start einfach die Zeile mit Const... entsprechend ändern.
GreetZ Renée

AW: VBA - Rechnungsnummer
07.01.2008 16:16:54
Erich
Hallo Charly,
sorry, bei meiner Prozedur fehlte noch eine Zeile (intK = FreeFile). Deshalb nochmal:

Option Explicit
Function RechnungsNummer()
Dim intK As Integer
Const strDat As String = "C:\Daten\Zaehler.txt" ' anpassen
intK = FreeFile
If Dir(strDat) = "" Then
On Error Resume Next
Open strDat For Output As #intK
If Err > 0 Then
MsgBox "Kann Datei '" & strDat & "'nicht anlegen - Abbruch", _
vbCritical, "Funktion RechnungsNummer"
Exit Function
End If
On Error GoTo 0
Write #intK, 0
Close intK
End If
On Error Resume Next
Open strDat For Input As #intK
If Err > 0 Then
MsgBox "Kann Datei '" & strDat & "'nicht öffnen - Abbruch", _
vbCritical, "Funktion RechnungsNummer"
Exit Function
End If
On Error GoTo 0
Line Input #intK, RechnungsNummer
Close intK
RechnungsNummer = RechnungsNummer + 1
Open strDat For Output As #intK
Write #intK, RechnungsNummer
Close intK
End Function

Vielleicht solltest du noch mal darüber nachdenken, WANN eine neue Re-Nr zu vergeben ist.
Das ist keine Excel- oder VBA-Frage, sondern eine rein fachliche.
Soll die neue Nummer beim Anlegen oder Fertigstellen oder Drucken vergeben werden?
Wenn die Nummer zu früh vergeben wird, werden viele Nummern verbraucht, zu denen es keine Rechnung gibt.
(Menschen machen Fehler, werden bei der Arbeit gestört, ...)
Du wolltest jetzt die Nr. beim Öffnen der Rechnung.xls hochzählen.
Dazu brauchst du nur (wie bisher im Modul der Arbeitsmappe)


Option Explicit
Private Sub Workbook_Open()
Tabelle1.Cells(7, 13) = RechnungsNummer
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 16:34:00
Charly
WOW danke für deine Grosse hilfe!
Also das Rechnungsformular-Vorlage sollte immer leer sein. (ausser die leere Tabelle usw.)
Dann öffne ich es, die RE-Nr. wird generiert, und dann speichere ich es mit einem anderen Namen ab.
Bei der nächsten Rechnung öffne ich dann wieder das Rechnungsformular-Vorlage
......usw.
D.h. Wenn ich wieder das Rechnungsformular-Vorlage öffne habe ich dort nicht mehr die aktuelle RE-Nr. sonder die allererste die damals eingegeben habe.
Geht das überhaut so?
Mein Überlegung: Also sobald ich die Vorlage öffne wird eine neue RE-Nr. erzeugt. Die sollte dann ja irgendwo gespeichert werden, so dass die Vorlage erkennen kann welche Nummer zuletzt war.
Ich habe jetzt noch einen anderen Code gefunden. Weiss aber nicht ob der i.o. ist.
Der sollte doch die aktuellste Generierte RE-Nr. dort Speichern?
(Probiere jetzt denn noch deinen aktuellen Vorschlag aus)
Denn habe ich gefunden:

Sub lfdNr()
Dim Nr%
Dim dName$
Dim Zielordner$, Dateiname$
'Hier den Pfad verändern
Zielordner = "c:\"
'Hier den Dateinamen verändern
Dateiname = "Excel_lfdNr"
dName = Zielordner & Dateiname & ".ini"
Close
On Error Resume Next
Open dName For Input As #1
If Err > 0 Then
Nr = 1
Close
Open dName For Output As #1
Print #1, Nr
Close
Exit Sub
Else
Input #1, Nr
Close
Open dName For Output As #1
Print #1, Nr + 1
Close
End If
ActiveCell.Value = Nr
End Sub


Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 16:42:00
Charly
OK -SUPER
Der letzte VBA denn du mir gegeben hast funktioniert einwandfrei. WOW
Jetzt muss ich dann einfach aufpassen wenn ich daran Arbeite:
Denn wenn ich eine neue Vorlage öffne, wird eine neue Nummer Generiert.
Könnte das zu Probleme führen?
ausser das halt im dümsten fall einfach eine Nummer ausbleit. Oder?

AW: VBA - Rechnungsnummer
07.01.2008 16:48:08
Charly
Könnet man die Nummer mit einem Button Verbinden?
Oder ist dann die Gefahr, dass wenn man jedesmal auf denn Button Click eine Nummer vergeben wird.
Gruss Charly

AW: VBA - Rechnungsnummer
07.01.2008 17:08:00
Erich
Hallo Charly,
zu "Denn wenn ich eine neue Vorlage öffne, wird eine neue Nummer Generiert.":
Ja, das ist so, denn die Vergabe der Re-Nr. wird im Workbook_Open ausgelöst.
Aber dieses Problem geht noch weiter:
Wenn du Rechnung.xls öffnest, wird eine neue Nr. (z. B. 4711) vergeben.
Du speicherst die ausgefüllte Mappe dann z. B. als Re4711.xls und schließt sie.
Was wird passieren, wenn du jetzt noch mal in Re4711.xls etwas nachsehen willst?
Du öffnest die Mappe und - eine neue Re-Nr. wird vergeben.
Denn auch Re4711.xls enthält die Makros zur Vergabe einer Re-Nr.!
Man könnte mit einigem Aufwand die Makros löschen.
Alternativ könnte man dem Makro beibringen, dass die Re-Nr nur dann erhöht wird,
wenn der Dateiname exakt "Rechnung.xls" ist.
Oder: Bei Anlage einer neuen Rechnung wird eine neue Mappe erzeugt,
das Vorlagenblatt in die neue Mappe kopiert und ausgefüllt.
Dann hat die neue Mappe keine Makros, die Probleme machen können.
zu "Könnet man die Nummer mit einem Button Verbinden?
Oder ist dann die Gefahr, dass wenn man jedesmal auf denn Button Click eine Nummer vergeben wird."
Ja, auch das ist so.
Dazu kann man auch vergessen, auf den Button zu drücken,
und dann hast du vielleicht mehrere verschiedene Rechnungen mit derselben Re-Nr.
Das mit dem Button würde ich nicht machen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 17:27:28
Charly
Hallo Erich
Du hast ja Vollkommen recht, diese überlegung habe ich natürlich nicht gemacht.
Das mit dem "Alternativ könnte man dem Makro beibringen, dass die Re-Nr nur dann erhöht wird,
wenn der Dateiname exakt "Rechnung.xls" ist." wäre sehr Interresant. Denn das, dass eine neue Mappe erzeugt wird, dänke ich mir, das dann mein Vater Schwirigkeiten bekommen könnte.
Jetzt einmal eine Frage Vorab. Könntest Du mir dies mit der Êrsten Alternative helfen?
Und was möchtest du dafür, denn ich will ja niemand Ausnützen um dann alles Gratis zu bekommen.
recht Herzlichen Dank
Charly von Bern
PS: Ist Kamp-Lintfort in der nähe von Moers (Hülsdonk)? Denn meine Grossmutter Wohnt in Moers.
Denn meine Mutter geht diese Woche wieder nach Moers.

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 19:15:00
Erich
Hallo Charly,
die erste Alternative ist sicher nicht die beste (weil die Makros in den Rechnungen überflüssigen Ballast darstellen),
aber dafür leichter zu bewerkstelligen:

Option Explicit
Private Sub Workbook_Open()
If ThisWorkbook.Name  "Rechnung.xls" Then Tabelle1.Cells(7, 13) = RechnungsNummer
End Sub

Dann passiert beim Öffnen einer unter anderem Namen gespeicherten Mappe nichts.
"Und was möchtest du dafür"? Natürlich nichts, dafür ist das Forum ja da.
Ja, Kamp-Lintfort ist eine Nachbarstadt von Moers - so klein ist die Welt!
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA - Rechnungsnummer
07.01.2008 20:28:56
Charly
Hallo Erich
DANKE DANKE DANKE
Bei mir tut sich aber im moment nichts!
Habe jetzt die abgänderte Rechnung.xls nochmals hochgeladen.
Kannst du mir bitte nochmals reinschauen?
http://www.teamkaufmann.ch/xls/Rechnung.xls
Vielleicht bin ich ja ein bissel doof. :-)
Herzlichen DANK
Charly

AW: VBA - Rechnungsnummer
07.01.2008 20:54:52
Erich
Hi Charly,
da hast du wohl versehentlich die Workbook_Open-Prozedur in das Modul der Tabelle1 geschrieben.
Wenn du den Code in das Modul der Arbeitsmappe (DieseArbeitsmappe) kopierst und
dann im Modul der Tabelle1 löschst, sollte es funzen.
Noch ein Tipp:
Der Textdatei Zaehler.txt würde ich einen aussagekräftigeren Namen geben, z. B. RechnungsNr.txt
Wer weiß in einem halben Jahr noch, wofür Zaehler.txt gut ist? Die Datei wäre dann schnell gelöscht...
Sicher hast du auch ein Verzeichnis, in dem die Textdatei besser aufgehoben ist als in C:\Daten\.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

- immer Probleme mit Rechnungsnummer
08.01.2008 09:51:27
Charly
Guten Morgen Erich
Guten Morgen alle zusammen
Ich bekomme das mit der Rechnungsnummer einfach nicht hin.
Habe mit allen verschiedenen möglichkeiten Propiert.
Bitte um Hilfe
Gruss Charly

AW: - immer Probleme mit Rechnungsnummer
08.01.2008 10:19:00
Erich
Hallo Charly,
sorry, da habe ich dir mit einem dummen Fehler wohl unnötig Arbeit gemacht.
In Workbook_Open muss nicht auf ungleich, sondern auf gleich "Rechnung.xls" geprüft werden.
Nur wenn der Dateiname "Rechnung.xls" ist, soll ja hochgezählt werden.

Option Explicit
Private Sub Workbook_Open()
If ThisWorkbook.Name = "Rechnung.xls" Then Tabelle1.Cells(7, 13) = RechnungsNummer
End Sub

Hier auch gleich die Mappe zum ausprobieren (musst du als "Rechnung.xls" speichern):
https://www.herber.de/bbs/user/48872.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Erich du bist Genial ! Danke
08.01.2008 10:31:20
Charly
Hallo Erich
Ist absolut nicht schlimm, ich habe es gestern Abend mal das ganze in ruhe gelassen und habe mal darüber geschlafen.
Und jetzt gehts es WUNDERBAR dank deiner Super Geniale Hilfe.
Vielen Vielen Dank, ist echt nett von Dir das du mir so viel geholfen hast.
Gruss Charly
PS: Bist du Programierer oder wie hast du all das gelernt?

AW: noch ne Frage, Sorry
08.01.2008 10:35:03
Charly
Hi
Jetzt habe ich doch noch ne Frage.
In der Tabelle unten bei der Mehrwertsteuer habe ich:
=WENN(UND(L45"";$M$44"");RUNDEN(L45*$M$44;1);"")
Jetzt Rundet er mir z.B. sFr. 2.75 auf sFr. 2.80
Was kann man da ändern?
Ist mir schon fast peinlich dich so viel zu Fragen.
Gruss Charly

AW: noch ne Frage, Sorry
08.01.2008 14:58:00
Rudi
Hallo,
kein Wunder, wenn du auf eine Nachkommastelle rundest.
=WENN(UND(L45"";$M$44"");RUNDEN(L45*$M$44;2);"")
btw:
Du hast einen fatalen Fehler in deiner Mappe: Rechnungsdatum =Heute(). Wenn du die Rechnung in einem Monat nochmal druckst, steht das aktuelle Datum drin!
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: noch ne Frage, Sorry
09.01.2008 15:20:00
Charly
Hallo Rudi
Vielen Dank für deine Antwort. Das mir der Nachkommastelle konnte ich lösen.
Gibt es denn beim Datum eine Lösung?
So das dass Datum nicht mehr erneuert wird, wenn ich das Formular (natürlich mit einem anderen Name zB. Rechnung_10224.xls) zu einem Späteren Zeitpunkt wieder aufmache.
Vielen Dank und Grüsse aus der Schweiz
Charly

AW: noch ne Frage, Sorry
09.01.2008 22:00:51
Erich
Hallo Charly,
eine Möglichkeit: Du ergänzt ein wenig die Workbook_Open-Prozedur.

Private Sub Workbook_Open()
If ThisWorkbook.Name = "Rechnung.xls" Then
Tabelle1.Cells(7, 13) = RechnungsNummer
Tabelle1.Cells(8, 13) = Date
End If
End Sub

Dann steht in M8 ein festes Datum, nicht mehr HEUTE().
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige