Registriert seit: 19.08.2022
Version(en): 16.0.15427.20210
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?
Registriert seit: 19.08.2022
Version(en): 16.0.15427.20210
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 ^^
Registriert seit: 12.01.2018
Version(en): Office 14
(29.08.2022, 08: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:=Fals e
Viele Grüße Rumo0815 ------------------------ Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.
26865
Nicht registrierter Gast
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.
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• Klaus-Dieter
Registriert seit: 19.08.2022
Version(en): 16.0.15427.20210
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?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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 Erklärung: Der 2022ste Tag seit dem 0.1.1900 ist der 14.7.1905 Zelle | Formel | A1 | =DATUM(1900;1;2022) |
als "yy" formatiert halt 05 Alles klar? 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)
26865
Nicht registrierter Gast
(29.08.2022, 14: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, 14:44)BuschB schrieb: Was nach 99 passiert ist mir ehrlich gesagt ziemlich relativ OK. (29.08.2022, 14: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.
Registriert seit: 19.08.2022
Version(en): 16.0.15427.20210
30.08.2022, 07:48
(Dieser Beitrag wurde zuletzt bearbeitet: 30.08.2022, 08:06 von BuschB.)
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
26865
Nicht registrierter Gast
(30.08.2022, 07: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, 07: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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo, Du solltest das Makro vielleicht mal in das VBA-Modul DieseArbeitsmappe verschieben! Gruß Uwe
|