Problems logging in

Excel VBA-Tools

Austausch von Tipps und Ideen zur Entwicklung von Excel VBA-Tools und Plattform zum Vorstellen von selbstentwickelten Open Source Tools.

Only visible to XING members Standardwerk Excel VBA
+4 more comments
Last comment:
Gabriel Felley Date Format
Hallo VBA Team
Ich bin eher ein Wiedereinsteiger in VBA Programmieren. Mein aktuelles Problem ist das folgende: Eine lange Tabelle, die aus eine PDF-Datei stammt, hat verschiedene Einträge. Die einen sind korrekt in Datenformat (04.02. 21:38) andere sind wie 4Feb15:08 und lassen sich nicht über die Formatierungsfunktion behandeln. Wie kann ich Sie transformieren damit sie so aussehen 04.02. 15:08 (Datenformat)?
Danke im Voraus für klärende Hinweise und Grüsse
Gabriel
Gabriel Felley Christian Koch
+6 more comments
Last comment:
Only visible to XING members
Hallo Gabriel,
ich habe mir deine Daten angeschaut, darin befinden sich (mindestens) folgende Zeitformate (_ = Leerzeichen, [] = Zeilenumbruch):
TT.MM.JJJJ_hh:mm
TT.MM.hh:mm
TT.MM.JJJJ_hh:mm:ss
T_MMMhh:mm
T_MMMhh:mm[]TT_MMMhh:mm
TMMMhh:mm
T_MMM_hh:mm
TMMMhh:mm[]TT_MMMhh:mm
TMMMhh:m?_TT_MMMhh:mm
Vom Prinzip her müsstest du dir für jedes Format eine Lösung ausdenken. Die einzelnen Formate lassen sich anhand ihrer Zeichenlänge unterscheiden, außer 2 davon (Nr. 2 und Nr. 7), die kannst du zusätzlich durch das 2. Zeichen (Leerzeichen oder nicht) unterscheiden.
Sub test()
Dim Zelle As Object
For Each Zelle In Selection
Select Case Len(Zelle.Value)
Case 11
If Mid(Zelle.Value, 2, 1) = " " Then
Zelle.Offset(0, 10).Value = CDate(CLng(DateValue("0" & Left(Zelle.Value, 5) & " 2019")) + CInt(Mid(Zelle.Value, 7, 2)) / 24 + CInt(Right(Zelle.Value, 2)) / 24 / 60)
Else
'...
End If
'case 16 usw. für jede Format-Zeichenlänge
case else
'nix
End Select
Next
End Sub
Wenn du die Jahreszahl nicht sehen möchtest, musst du die Zellen entsprechend formatieren (benutzerdefiniert).
Gruß
Stefan
Marco Krapf Workbook_Open() zum Debuggen anhalten
Kürzlich wollte ich ein Workbook_Open()-Ereignis anhalten bevor es fertig ist, hab mich gefragt wie das wohl gehen könnte und mir dann dafür die Debug.Assert-Anweisung genauer angeschaut. Dabei springt der Debugger an, sobald die Bedingung dahinter FALSE ist (z.B. hält der Code bei Debug.Assert a < 3 an, wenn a größer oder gleich 3 ist). Dann hab ich mal ganz frech als "Bedingung" direkt False reingeschrieben, gespeichert und die XLSM neu gestartet. Das funktioniert prima und man kann schön debuggen.
Marco
Marco Krapf Christian Koch
+2 more comments
Last comment:
Only visible to XING members
Hallo Marco, Hallo Christian,
vielen Dank für die beiden Optionen! Die waren mir bisher noch nicht bekannt gewesen, können meinen Kollegen und mir aber sehr nützlich sein!
Viele Grüße
Stefan
Marco Krapf Zur Laufzeit erzeugte Buttons auf dem Tabellenblatt feuern manchmal nicht
Hallo in die Runde,
ich generiere beim Öffnen der RS-Edition des Galoppsimulators ein Dropdown und mehrere Buttons. Damit die auch was machen, wenn man sie anklickt, habe ich ein Klassenmodul geschrieben (clsRSbutton) mit dem Code
Public WithEvents RSButtonObject As MSForms.CommandButton
'VARIABLES
Private nameID As String
'CLICK EVENT
Private Sub RSButtonObject_Click()
basMainCode.RS_ExecuteClick (nameID)
End Sub
'PROPERTIES
Public Property Get RSbtnID() As String
RSbtnID = nameID
End Property
Public Property Let RSbtnID(ByVal id As String)
nameID = id
End Property
Das funktioniert auch meistens, nur nicht immer (?!?) Das heißt, dass die aktiven (nicht ausgegrauten) Buttons manchmal das Klick-Ereignis einfach nicht abfeuern. Optisch sind die anklickbar, nur passiert dann nichts. In diesem Fall hilft es die Mappe zu schließen und neu zu öffnen. Machmal 5, 6 mal, und irgendwann geht´s... Ein Muster kann ich dabei nicht erkennen. Am Code liegt´s wohl nicht.
Ich entwickle unter WIndows 7 SP1 mit den neuesten Updates und dem O365-Excel. Ob das nur unter bestimmten Konstellationen so ist weiß ich nicht. Bei mir tritt das jedenfalls schon seit 2017 auf, seit ich mich mit diesen Laufzeitobjekten beschäftige.
Der Code ist offen und kann zum Debuggen hier heruntergeladen werden https://marco-krapf.de/galoppsim/ bzw. ist auch in GitHub veröffentlicht https://github.com/MarcoKrapf/GaloppSim
Freue mich auf Kommentare!
Marco
Marco Krapf Christian Koch Kurt Hollauf
+27 more comments
Last comment:
Kurt Hollauf
Hallo Marco
"Property ActiveSheet As Object"
Da "ActiveSheet" eine "late binding" Objekt-Variable ist, wird sie erst zur "Laufzeit" ausgewertet.
Excel "kennt" also auch erst zur "Laufzeit" den tatsächlich verwendeten Blatt-Typ:
Enum XlSheetType:
Const xlChart = -4109 (&HFFFFEFF3)
Const xlDialogSheet = -4116 (&HFFFFEFEC)
Const xlExcel4IntlMacroSheet = 4
Const xlExcel4MacroSheet = 3
Const xlWorksheet = -4167 (&HFFFFEFB9)
Wie für eine "late binding" Objekt-Variable üblich, steht daher für "ActiveSheet" auch kein "IntelliSense" zur Verfügung, da "IntelliSense" ja wieder vom tatsächlich verwendeten Blatt-Typ abhängt.
Bei der Auswertung von "ActiveSheet" zur Laufzeit wird dabei aber anscheinend auch die "Basis", auf der die Klassen-Instanzen aufbauen, irgendwie verändert und damit zerstört.
Den Klassen-Instanzen deiner Buttons wird quasi der Boden unter den Füßen weggezogen.
Grüße Kurt

Moderators

Moderator details

About the group: Excel VBA-Tools

  • Founded: 17/04/2017
  • Members: 302
  • Visibility: open
  • Posts: 48
  • Comments: 100