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.

Nummer mit Jahreszahl beim öffnen Hochzählen
#1
Moin Leute, 
hab heute mal was anderes zusätzlich, und zwar versuche ich gerade in einer Zelle eine "Protokollnummer" hoch zu zählen die allerdings 3 Bedingungen hat...
1. Die Nummer startet im neuen Jahr immer mit 01
2. Die Nummer bekommt die letzten beiden Stellen der Jahreszahl angehängt ( - 22)
3. Die Nummer muss zwingend in folgender Form dargestellt werden: Nr - JJ also als Beispiel 01 - 22
Das Hochzählen an sich bekomme ich hin, aber dabei die Jahreszahl zu berücksichtigen und diese nicht hoch zu zählen fällt mir grad etwas schwer, versuche schon das zu umgehen indem ich mich auf die ersten beiden Stellen fürs Hochzählen fokussiere, aber irgendwie klappt das nicht...

Hat da jemand eine Idee wie ich das relativ elegant lösen kann?
Antworten Top
#2
Code:
Private Sub Workbook_Open()
Dim Jahr As String
Jahr = Format(Year(Now()), yy)
With ActiveWorkbook.Sheets("Tabelle1")
    .Unprotect
    If Right(ActiveWorksheet.Range("C1").Value, 2) = Jahr Then
        .Range("C1") = Left(ActiveWorksheet.Range("C1").Value, 2) + 1 & " - " & Jahr
    Else:
        .Range("C1") = "01 - " & Jahr
    End If
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=Fals
End With
Workbook.Save

End Sub
Bei diesem Versuch bekomme ich immer wieder einen Fehler, es würde ein Objekt fehlen, ich weiß aber nicht warum oder was da fehlt, kann mir das jemand verraten?

Danke schonmal ^^
Antworten Top
#3
(29.08.2022, 07:30)BuschB schrieb:
Code:
Private Sub Workbook_Open()
Dim Jahr As String
Jahr = Format(Year(Now()), yy)
With ActiveWorkbook.Sheets("Tabelle1")
    .Unprotect
    If Right(ActiveWorksheet.Range("C1").Value, 2) = Jahr Then
        .Range("C1") = Left(ActiveWorksheet.Range("C1").Value, 2) + 1 & " - " & Jahr
    Else:
        .Range("C1") = "01 - " & Jahr
    End If
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=Fals
End With
Workbook.Save

End Sub
Bei diesem Versuch bekomme ich immer wieder einen Fehler, es würde ein Objekt fehlen, ich weiß aber nicht warum oder was da fehlt, kann mir das jemand verraten?

Danke schonmal ^^

Auf den ersten Blick würde ich sagen, bei
Scenarios:=Fals fehlt das e
korrekt wäre: Scenarios:=False
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#4
Meditiere bitte über folgenden Codeauszug:
Code:
Format(Year(Now()), yy)
Was genau tust du da? Ergibt das das Wunschergebnis? Wenn nein: Warum nicht? Bevor du fragst: Erst selber nachdenken bitte.


Code:
Option Explicit

Private Sub Workbook_Open()
Dim Jahr As String

Jahr = Format(Date, "YY")

With Me.Worksheets("Tabelle1")
    .Unprotect
    .Range("C1").NumberFormat = "@"
    If Right(.Range("C1").Value, 2) = Jahr Then
        .Range("C1").Value = Format(CLng(Left(.Range("C1").Value, 2)) + 1, "00") & " - " & Jahr
    Else
        .Range("C1").Value = "01 - " & Jahr
    End If
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=False
End With
Me.Save

End Sub

Bescheidene Rückfrage: Was passiert nach dem 99. Mal Öffnen mit deinem Wunschformat 00 - 00? Was passiert weiterhin mit deiner Abfrage Left(.Range("C1").Value, 2)?

Ich finde es immer wieder toll, dass ihr euch gleich an solche Projekte wagt, für die die Grundlagen einfach perfekt sitzen müssen. Dennoch rate ich dir: Schaffe dir die Grundlagen an. Dazu gehört: Strukturierte Analyse von Code, Fehlern und deren Behebung.
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
[-] Folgende(r) 1 Nutzer sagt Danke an EarlFred für diesen Beitrag:
  • Klaus-Dieter
Antworten Top
#5
Ja und ja, ok, das "YY" ist einen Versuch wert, mein Ziel ist wie schon erwähnt in der Zelle C1 eine Protokollnummer zu bauen deren erste beide stellen die tatsächliche Nummer darstellen und die letzten beiden das Jahr, getrennt durch ein " - " darum der Versuch mit Format um das Jahr als zweistellig rein zu bekommen.

Was nach 99 passiert ist mir ehrlich gesagt ziemlich relativ da dieser Fall wohl nie eintreten wird (bisher haben wir im Jahr vllt 20 Protokolle gebraucht, also keine Gefahr da auf 100 oder mehr zu kommen) und was das Jahr 2100 angeht, darüber mache ich mir erst dann Gedanken wenn wir die nächsten 20 Jahre in Deutschland überleben und auch dann noch Protokolle am Rechner schreiben xD

Was Left... angeht, da ist die Nummer die ich hochzählen will, darum auch das +1 in dem Code, oder was genau meinst du da jetzt?
Antworten Top
#6
Gib doch mal (und darauf wollte @EarlFred hinaus) folgendes ins Direktfenster (Strg+g) ein und drücke Enter
?Format(Year(Now()), yy)
Du erhältst 2022 …
Dies auch nur, weil y eine unbekannte Variable ist (was mich zugegebener Weise jetzt auch überrascht hat!).
Richtig wäre ja
?Format(Year(Now()), "yy")
ergibt wie erwartet 05  19

Erklärung:
Der 2022ste Tag seit dem 0.1.1900 ist der 
14.7.1905
A
114.07.1905

ZelleFormel
A1=DATUM(1900;1;2022)
als "yy" formatiert halt 05

Alles klar? Wink

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
#7
(29.08.2022, 13:44)BuschB schrieb: "YY" ist einen Versuch wert [...] der Versuch mit 
Solange wir uns in diesem doch sehr trivialen Umfeld bewegen bringen die verwendeten und übrigens gut dokumentierten Methoden die zu erwartenden Ergebnisse. Da muss man also nicht "versuchen" im Sinne von "experimentieren", da kann man vorher durch Überlegung und Recherche direkt zum "Wissen" übergehen. Da hilft eben nur eins: Grundlagen aneignen. Lesen. Denken. Erst danach umsetzen. 

Naja, Ralf hat es ja nun schön erklärt. Selber drauf zu kommen bringt dir aber mehr. 

(29.08.2022, 13:44)BuschB schrieb: Was nach 99 passiert ist mir ehrlich gesagt ziemlich relativ
OK. 

(29.08.2022, 13:44)BuschB schrieb: Was Left... angeht, da ist die Nummer die ich hochzählen will, darum auch das +1 in dem Code, oder was genau meinst du da jetzt?
Nein, genau das nicht. Schau doch, in welchem Kontext ich die Frage gestellt habe... Left(100, 2) liefert den Wert "10". 10 +1 = 11. Jetzt ist es klar, denke ich.
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
Antworten Top
#8
Leute, ich hab gerade das Gefühl das ihr mich überhaupt nicht versteht...
Ich WILL das nur die ersten beiden Ziffern zusammen genommen und mit 1 addiert werden !!!!! Das ist Absicht!!!

Wenn wir ihr sagt bei ?Format(Year(Now())"YY") kommt 05 raus, dann ist das nicht was ich will.
Ich will das wenn wir das Jahr 2022 haben auch eine 22 rauskommt, wenn wir das Jahr 2023 haben eine 23 und so weiter.

Wenn ich das Problem durch einfach mal googeln und lesen und denken simpel lösen könnte, hätte ich hier nicht geschrieben.
Ich habe mir meine Funktion dafür aus verschiedenen Stellen zusammengestückelt in der Hoffnung das es funktioniert, aber tut es nicht, darum frage ich hier ob vllt doch jemand eine bessere Lösung kennt als mir über die Suche bei Google und anderen Medien vorgeschlagen wird.

Übrigens, dein Code
Code:
Private Sub Workbook_Open()
Dim Jahr As String

Jahr = Format(Date, "YY")

With Me.Worksheets("Tabelle1")
    .Unprotect
    .Range("C1").NumberFormat = "@"
    If Right(.Range("C1").Value, 2) = Jahr Then
        .Range("C1").Value = Format(CLng(Left(.Range("C1").Value, 2)) + 1, "00") & " - " & Jahr
    Else
        .Range("C1").Value = "01 - " & Jahr
    End If
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=False
End With
Me.Save

End Sub
gibt schon bei Me.Worksheets Fehler aus "Methode oder Datenobjekt nicht gefunden",
dasselbe bei Me.Save.
Schätze mal da ist das mit den "Grundlagen" wohl auch noch nicht perfekt xP
Antworten Top
#9
(30.08.2022, 06:48)BuschB schrieb: Leute, ich hab gerade das Gefühl das ihr mich überhaupt nicht versteht...
Ich WILL das nur die ersten beiden Ziffern zusammen genommen und mit 1 addiert werden !!!!! Das ist Absicht!!!

Wenn wir ihr sagt bei ?Format(Year(Now())"YY") kommt 05 raus, dann ist das nicht was ich will.
Ich will das wenn wir das Jahr 2022 haben auch eine 22 rauskommt, wenn wir das Jahr 2023 haben eine 23 und so weiter.

Wenn ich das Problem durch einfach mal googeln und lesen und denken simpel lösen könnte, hätte ich hier nicht geschrieben.

Ich habe mir meine Funktion dafür aus verschiedenen Stellen zusammengestückelt in der Hoffnung das es funktioniert, aber tut es nicht, darum frage ich hier ob vllt doch jemand eine bessere Lösung kennt als mir über die Suche bei Google und anderen Medien vorgeschlagen wird.
Dein Gefühl täuscht dich und dein Gefühlsausbruch ist unangebracht. 
Wenn du programmieren können willst, musst du eben schlichtweg in der Lage sein, dir Dinge selbst aneignen zu können. Wie soll das anders gehen als mit lesen, verstehen und denken? 
 "Zusammenstückeln" von Fragmenten und hoffen, dass es "iwie" klappt, ist doch keine Basis. Du kannst das Angebot annehmen, wenn wir dich auf Dinge hinweisen oder du kannst sie beleidigt zurückweisen. Ob du was lernst, das ist letztlich deine Entscheidung. Hast du inzwischen verstanden, warum deine Variante nicht klappt?

(30.08.2022, 06:48)BuschB schrieb: Übrigens, dein Code [...] gibt schon bei Me.Worksheets Fehler aus "Methode oder Datenobjekt nicht gefunden",
dasselbe bei Me.Save.
Die Prozedur Workbook_Open muss im Codemodul DieseArbeitsmappe (in der deutschen Sprachversion) stehen, wenn der Code tatsächlich beim Öffnen der Mappe automatisch ausgelöst werden soll. Das Open-Ereignis gehört zur Workbook-Klasse, also muss es auch im Klassenmodul stehen, zu dem das Ereignis gehört (über andere Wege reden wir hier lieber (noch) nicht). 

Innerhalb eines Klassenmoduls verweist das Schlüsselwort Me auf die Instanz der Klasse, die den Code aufgerufen hat. Wird Me bei dir angemeckert, ist das ein Indiz dafür, dass der Code in einem falschen (Standard-)Modul liegt. 

Lösungsansätze: 
- Automatisierte Auslöung des Codes beim Öffnen der Mappe erwünscht: Verschiebe den Code in das Klassenmodul DieseArbeitsmappe
- Code soll anderweitig gestartet werden: Die Prozedur kann woanders stehen, allerdings musst du dann das Schlüsselwort Me durch ThisWorkbook ersetzen.

Und nebenbei: Das Problem hättest du, selbstredend, googeln können:
https://docs.microsoft.com/de-de/office/...me-keyword
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
Antworten Top
#10
Hallo,

Du solltest das Makro vielleicht mal in das VBA-Modul DieseArbeitsmappe verschieben! Wink

Gruß Uwe
Antworten Top


Gehe zu:


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