Word VBA Arrays
Hallo Leute,
ich brauche Euch mal zur Code-Berichtigung (es geht um ein Calendar Control)
Den Code:
hatte ich (wegen der lokalen Sprache) geändert auf:
Das funktioniert auch.
Um es noch einfacher zu machen, ist daraus entstanden:
Jetzt stoppt es mit dem Fehler "Ungültiger Prozeduraufruf oder ungültiges Argument".
Warum klappt das nicht?
Vielen Dank für einen Tipp.
Peter
ich brauche Euch mal zur Code-Berichtigung (es geht um ein Calendar Control)
Den Code:
cmbMonth.AddItem Choose(lngIndex, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
hatte ich (wegen der lokalen Sprache) geändert auf:
cmbMonth.AddItem Choose(lngIndex, VBA.MonthName(1), VBA.MonthName(2), VBA.MonthName(3), VBA.MonthName(4), VBA.MonthName(5), VBA.MonthName(6), _
VBA.MonthName(7), VBA.MonthName(8), VBA.MonthName(9), VBA.MonthName(10), VBA.MonthName(11), VBA.MonthName(12))
Das funktioniert auch.
Um es noch einfacher zu machen, ist daraus entstanden:
cmbMonth.AddItem VBA.MonthName(lngIndex)
Jetzt stoppt es mit dem Fehler "Ungültiger Prozeduraufruf oder ungültiges Argument".
Warum klappt das nicht?
Vielen Dank für einen Tipp.
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1750485182
Url: https://administrator.de/contentid/1750485182
Ausgedruckt am: 19.11.2024 um 04:11 Uhr
11 Kommentare
Neuester Kommentar
Servus.
Da wir hier den Inhalt von lngIndex nicht sehen können, benutze ich mal meine Glaskugel und tippe darauf das der Index 0-basiert ist, und dann kommt es verständlicherweise zum Fehler weil 0 kein definierter Wert der MonthName Funktion ist die ja bei 1 beginnt und nicht bei 0.
Hast du also einen 0-basierten Index dann rechne einfach +1 zum Index hinzu und dein Problem lost sich in Luft auf.
Grüße Uwe
Da wir hier den Inhalt von lngIndex nicht sehen können, benutze ich mal meine Glaskugel und tippe darauf das der Index 0-basiert ist, und dann kommt es verständlicherweise zum Fehler weil 0 kein definierter Wert der MonthName Funktion ist die ja bei 1 beginnt und nicht bei 0.
Hast du also einen 0-basierten Index dann rechne einfach +1 zum Index hinzu und dein Problem lost sich in Luft auf.
cmbMonth.AddItem MonthName((lngIndex+1))
Fixed. Du hast vergessen im letzten Select Vergleich die Schleife über die Monate um das Konstrukt hinzuzufügen, deswegen war lngIndex nicht definiert und verständlicherweise meckert er das dann an. Des weiteren war eine unbenutzte nicht deklarierte Variable strTemp in dem Wust vorhanden, die er bei Option Strict natürlich ebenfalls anmeckert.
Download der gefixten Vorlage
Grüße Uwe
Download der gefixten Vorlage
Grüße Uwe
Btw. es gibt bereits ein Microsoft-Calendar-Picker-Control, da braucht man sich nicht zwingend ein eigenes bauen ...
Ich muß jedoch auch mehrere Tage (wenigstens hintereinanderliegende) markieren / selektieren können.
Kann man das dem DatePicker noch beibringen?
Realisieren kann man alles, alles eine Frage des Preises. Durch den Code arbeite ich mich jetzt aber ehrlich gesagt nicht für lau durch. Frage halt mal den Urheber.Kann man das dem DatePicker noch beibringen?
Noch eine Frage:
Wenn ich die Demo teste und den Button "Insert in Document" drücke, gibt's einen Laufzeitfehler.
Lies mal den Hinweistext zu "E", der übergibt der Funktion ein Control als Parameter, welches es in der Demo verständlicherweise nicht gibt ... Peng (hat er nicht bedacht). Schon mal was vom VBA-Debugger Breakpoints und F8 gehört? Vermutlich nicht .Wenn ich die Demo teste und den Button "Insert in Document" drücke, gibt's einen Laufzeitfehler.
Aber das Microsoft Date and Time Picker Control funktioniert in den 64bit Officeversionen nicht mehr.
Dann baut man sich mit Visual Studio ein eigenes, mit dem .NET DatePicker gibt es ja schon ein fertiges, das zieht man in sein custom control rein exposed den Wert des DateTimePickers als Custom Property und macht das ganze COM-Visible . Man erhält eine DLL die keine 7KB groß ist und die man mitC:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase DatePickerControl.dll
Schon hat man dort auch ein Control zur Verfügung
An den Wert des Controls kommt man dann über die Property DateTimeValue
strDatum = Format(dtControl1.DateTimeValue,"dd.MM.yyyy")
Feedich.
Grüße Uwe
Sollte nur die Möglichkeiten aufzeigen 🙂
Für sowas entwickelt man heutzutage Web-Anwendungen/Formulare die dann von überall nutzbar sind.
PS: Warum macht das MS nicht endlich selbst?
Weil VBA ehrlich gesagt eine Technik von gestern ist, es gibt inzwischen bessere Lösungen die auch Geräteubergreifend funktionieren. Man denke nur an Smartphone Tablet & Co. die damit nichts anfangen können. Formulare auf Word/Excel Basis sind eben veraltet, da steckt man keine Manpower mehr rein.Für sowas entwickelt man heutzutage Web-Anwendungen/Formulare die dann von überall nutzbar sind.