[Excel] Angebotsnummer erstellen

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

ich versuche gerade eine Angebotsnummer für ein Angebotsprogramm zu schreiben.

Funktioniert auch so weit so gut.

Ich will allerdings, das der Code nur einmal und auch beim erneuten Öffnen der abgespeicherten Datei nicht mehr ausgeführt wird.

Mein momentaner Code sieht so aus:

Code:
=TEXT(JETZT();"JJJJTTMMHHMM")

Mit reinen Excelformeln wird das wahrscheinlich nicht zu bewerkstelligen sein nehme ich mal stark an oder?

Kann mir hier wer nen Tip geben? Alle im Netz gefundenen Beispiele sind mit VBA aber mein Chef will keinen Extra Knopf für die Angebotsnummer sonder die soll automatisch generiert werden.

mfg
 
Eine solche Möglichkeit bietet Excel soweit ich es weiß nicht. Entweder eine Formel wird immer ausgeführt oder eben nicht.

Um ein Makro/VBA auszuführen muss man keinen Knopf drücken. Du musst nur das passende Ereignis dafür nehmen.
 
Du brauchst doch keinen Knopf. Du kannst eine Funktion schreiben, die du entweder als Formel
in ein Feld nehmen kannst, oder beim öffnen der Datei ausgeführt wird. Etc.

Abgesehen davon, mit einer Formal in einer Zelle geht das mMn nicht. Die wird ab und an neu berechnet. Du müsstest das Resultat als Wert in eine Zelle schreiben.

Du könntest ein Trigger hinter das Worksheet legen.

zb. sowas. Diesen Code im Makro-Editor direkt hinter das Worksheet speichern
Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    If Not IsArray(Target) Then
        'direkt ausgeben wenn ein einzelnes Feld ausgewählt ist
        If (UCase(Target.Text) = "SETID") Then Target.Value = Format(Now, "YYYYDDMMHHMMSS")
    Else
        'Bei einer Mehrfachauswahl den Inhalt des ersten Feldes ausgeben
        For Each rng In Target
            If (UCase(rng.Text) = "SETID") Then rng.Text = Format(Now, "YYYYDDMMHHMMSS")
        Next rng
    End If
    Set rng = Nothing
End Sub

Wenn du jetzt in ein Feld 'setid' tippst, wird die beim verlassen des Feldes mit einer ID überschrieben, die nicht mehr verändert wird.
 
Moin,

Ich will allerdings, das der Code nur einmal und auch beim erneuten Öffnen der abgespeicherten Datei nicht mehr ausgeführt wird.
...
Mein momentaner Code sieht so aus:
Code:
=TEXT(JETZT();"JJJJTTMMHHMM")
äääh ... nur einmal ... und dann auch nicht mehr ... :confused:
Wie ist das zu verstehen ?
Wirklich nur genau einmal :confused:

Gruß
Klaus
 
Also so wie ich das verstanden habe, soll beim ersten Öffnen der Mappe und wenn das Feld für die Angebotsnummer leer ist ein Wert eingetragen werden.

Warum dann nicht einfach so:

Visual Basic:
Private Sub Workbook_Open()

If Tabelle1.Range("A1") = "" Then
    Tabelle1.Range("A1") = Format(Now, "YYYYMMDDhhmmss")
End If

End Sub

Ist beim Öffnen der Datei in Tabelle1 die Zelle A1 leer, dann wird der Wert eingetragen. Ist schon etwas vorhanden passiert nichts.
 
Ich denke die große Frage ist, wie wird das Angebot generiert, bei dem erst- und einmalig die Angebotsnummer vergeben wird? Ist das Template eine xlt oder xltm?

Wenn ja, dann könntest du es z.B. so machen, dass du dem Template folgenden Code in "Diese Arbeitsmappe" mitgibst:
Visual Basic:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    With ActiveSheet.Cells(1, 1)
        .Value = .Value
    End With
End Sub
Dieser Code setzt den Wert der Zelle in A1 auf den Wert der Zelle in A1. Klingt erstmal sinnlos, ist es aber nicht, denn dabei wird die Zelle fest auf den aktuellen Wert gesetzt und die Formel wird dabei gelöscht. Es ist nur erstmal tricky den Code in das Template zu bekommen, denn das speichern des Templates löst diesen schon aus. Du kannst aber z.B. temporär in den Makroeinstellungen das Ausführen von Makros ausschalten.
 
Danke erstmal für die ganzen Antworten. Ich sollte mir wirklich wieder Internet zu Hause anschaffen sonst wird das nix mit Antwortenverfolgen

Um ein Makro/VBA auszuführen muss man keinen Knopf drücken. Du musst nur das passende Ereignis dafür nehmen.

Ok wusste ich nicht, Danke für den Hinweis.

@vfl_freak

Das ganze wird aus einer Vorlage mit Makros generiert. Das Angebot wird mittels Makro im entsprechened Format und Pfad mit einem generierten Namen als *.xlsm gespeichert. Wenn ich jetzt allerdings das Angebot später nochmals öffnen muss weil der Kunde etwas verändert haben will, muss die Angebotsnummer gleichbleiben. Deswegen darf der Code dann nicht mehr ausgeführt werden.

@HonniClest
Wie bereits beschrieben wird das ganze aus einer *.xltm heraus erstellt und mittels Makro als *.xlsm gespeichert.

Ich könnte deinen Code doch in die Speicherroutine einbauen oder funktioniert der Code nur in solchen aufrufen?

Bin in VBA leider komplett unbewandert und hab mir alles zusammengesucht im Internet, was ich bis jetzt habe.

Ich werde mal eure Beispiele versuchen und mich gegebenenfalls nochmal melden.

Danke erstmal.

mfg
 
Ich könnte deinen Code doch in die Speicherroutine einbauen oder funktioniert der Code nur in solchen aufrufen?

Der Code wird immer automatisch ausgeführt, wenn gespeichert wird, d.h. u.a. beim Speichern in eine *.xslm. Der Vorgang Speichern ist ein "passendes Ereignis", wie es von tombe benannt wurde. Wenn du das VBA-Projekt öffnest (Alt+F11) gibt es im Projektbrwoser ein Element "Diese Arbeitsmappe". Dort muss der Code hineinkopiert werden.

PS.: Beim Kopieren musst du natürlich noch die betroffene Zelle ändern. In meinem Beispiel handelt es sich um die Zelle in der ersten Zeile und der ersten Spalte, d.h. A1.
 
Zuletzt bearbeitet:
Hallo,

ich hab dein Beispiel jetzt in meinen Speichercode eingebaut. Funktioniert ohne Probleme. Den Cells(1,1) teil habe ich schon angepasst.

Danke für die Hilfe, wieder was gelernt.

mfg
 
Sry für Doppelpost bin übers Blackberry drin und da wird mir der Editbutton komischerweise nicht angezeigt.

Ein kleines Problem ist mir noch eingefallen:

Damit der von HoneyCilest gepostete Code funktioniert, darf die Zelle nicht gesperrt sein.

Allerdings ist die Gefahr des unbeabsichtigten Überschreibens gegeben.

Kann man via VBA die Zellen beim Speichern Entsperren und danach wieder Sperren?

mfg
 

Neue Beiträge

Zurück