Hallo zusammen,
bin gerade wieder dazugekommen, mein VBA-Selbststudium etwas voranzutreiben. Dabei versuche ich momentan mit den UserForms klarzukommen.
Als Übungsaufgabe habe ich mir folgendes Ziel gesetzt: ein bereits funktionierendes Makro, welches beim Anklicken div. CATIA-Elemente mir deren Objekttyp-Bezeichnungen zurückgibt, mit einer UserForm zu ergänzen, bzw. es entsprechend umzuschreiben.
Habe es zwar letzten Endes hinbekommen, es gibt allerdings Paar Punkte, bei welchen ich nicht ganz zufrieden bin, bzw. nicht nachvollziehen kann.
Unten sieht Ihr den Quelltext und eine Kurzübersicht der UserForm-Elemente befindet sich als Bild dabei.
Option Explicit
Public intFinish As Integer
' intFinish: 0 --> fortsetzen; 1 --> beenden
Public intCount As Integer
Sub CATMain()
intFinish = 0
ufAuswObjTyp.Show vbModeless
intFinish = 0
End Sub
Option Explicit
Private Sub cmdBeenden_Click()
intFinish = 1
Unload Me
End Sub
Private Sub UserForm_Activate()
Dim oUsrSel As Object
Dim strA As String
Dim varTyp(0) As Variant
varTyp(0) = "AnyObject"
intCount = 0
Set oUsrSel = CATIA.ActiveDocument.Selection
oUsrSel.Clear
Do While intFinish = 0
intCount = intCount + 1
strA = oUsrSel.SelectElement2(varTyp, "Bitte das fragliche Element anklicken", False)
If strA = "Normal" Then
Me.lblErklaerung.Caption = "Objekt-Typ ist:"
Else
Me.lblErklaerung.Caption = ""
End If
Me.txtAusgabe.Text = CStr(TypeName(oUsrSel.Item(1).Value))
oUsrSel.Clear
Loop
End Sub
Private Sub UserForm_Initialize()
Me.cmdBeenden.Cancel = True
Me.cmdBeenden.Default = True
Me.txtAusgabe.Text = ""
Me.lblErklaerung.Caption = ""
End Sub
Und nun meine Fragen:
1. Die Schleife lässt sich aus irgendwelchem Grund nur in der UserForm realisieren. Wenn ich diese in die Hauptroutine verlege, hängt sich CATIA auf - weiss vielleicht jemand, wieso?
2. Nachdem ich mit "Beenden" die UserForm schliesse, wartet CATIA noch auf eine letzte Eingabe. Anscheinend lauft die Schleife da noch eine Runde weiter auch ohne UserForm. Um das zu Prüfen, habe ich extra die intCount-Variable eingefügt. Hier die gleiche Frage - wieso???
3. Das Setzen von cmdBeenden.Default auf True sollte, wenn ich es richtig verstehe, bewirken, dass der Beenden-Knopf sich auch mit der Enter-Taste bedienen lassen sollte. Ist aber irgendwie doch nicht der Fall, was zwar an sich auch nicht besonders dramatisch ist, allerdings schon wieder die selbe Frage aufkommen lässt - wieso?
Für eure Ideen und Unterstützung danke ich euch ganz herzlich im Voraus!
------------------
LG
Wadim
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP