Forum des VBA-Tutorials

WORD IF ... THEN ... Call Function ... ELSE ... EndIF (VBA)

Ausgeheckt, Donnerstag, 12. Oktober 2017, 11:46 (vor 64 Tagen)

Hallo Zusammen,
Ich habe ein Wordformular aus ca. 600 Seiten erstellt in denen ich via Checkboxen definierte Textmarken zuklappen kann und somit mein Formular, je nach Auswahl gestallten lässt bzw. anpasst. Im Folgendem ein Makroausschnitt "ThisDocument"

Ich wollte mein Makro optimieren bzw. korrigieren und folgendes Problem ist aufgetaucht.

'----------------------------Inspektion und Unterkategorien-----------
'_____________________________ThisDocument
Public Sub CBInspDiaSIE_Click()
If CBInspDiaSIE.Value = True Then
Call InspDiaSIE1
CBInspDiaSIE.Caption = "Diagnose SIE"
Else
CBInspDiaSIE.Caption = "Diagnose SIE n.v"
End If
End Sub

Public Sub CBInspDiaFAN_Click()
If CBInspDiaFAN.Value = True Then
Call InspDiaFAN1
CBInspDiaFAN.Caption = "Diagnose FAN"
Else
CBInspDiaFAN.Caption = "Diagnose FAN n.v"
End If
End Sub

Public Sub CBInspDiaHEI_Click()
If CBInspDiaHEI.Value = True Then
Call InspDiaHEI1
CBInspDiaHEI.Caption = "Diagnose HEI"
Else
CBHECInspDiaHEI.Caption = "Diagnose HEI n.v"
End If
End Sub
'####################################

'Und hier ein Beispiel einer Funktion die aufgerufen wird:
'___________Modul Insp
'InspDiaFAN1###########################################################

Public Function InspDiaFAN1()
With ActiveDocument
'Text wird verborgen oder gezeigt

If .Bookmarks.Exists("InspDiaFAN") Then
If (.CBInsp.Value = True Or .CBInspGeo.Value = True) And .CBInspDiaFAN.Value = True Then
.Bookmarks("InspDiaFAN").Range.Font.Hidden = False
Else
.Bookmarks("InspDiaFAN").Range.Font.Hidden = True
End If
Else
MsgBox "Die Textmarke(n) 'InspDiaFAN' existiert nicht!"
End If
End With
End Function
'###############################

Wenn ich den CALL der Function vor dem If... Then ... setze , also in die Public Sub ###-Click() Prozedur, dann funktioniert es.
Ich denke das diese Variante aber der Performance langen Dokumentes schadet...

Woran liegt es, was sollte ich besser machen?

WORD IF ... THEN ... Call Function ... ELSE ... EndIF

Martin Asal, Donnerstag, 12. Oktober 2017, 13:51 (vor 64 Tagen) @ Ausgeheckt

was sollte ich besser machen?

Kürzen.

Vieles muss ich jetzt erraten. Wahrscheinlich hast du nicht nur diese 3 Checkboxen, sondern viele weitere, die alle fast identischen Code aufweisen. Und sie alle rufen jeweils eine spezifische Funktion auf - die u.U. auch immer fast gleich aussieht.

InspDiaFAN1 wird wahrscheinlich nur von CBInspDiaFAN_Click aufgerufen, also ist InspDiaFAN1 nicht nötig. Die ganze Function kann gleich in CBInspDiaFAN_Click integriert werden.

Falls aber InspDiaFAN1, InspDiaSIE1 und ähnliche Functions jeweils fast identisch aufgebaut sein sollten, kannst du den Code wie folgt pflegeleichter aufbauen:

Public Sub CBInspDiaSIE_Click()
If cbinspDiaSIE.Value = True Then
  InspDia "SIE"
  cbinspDiaSIE.Caption = "Diagnose SIE"
Else
  cbinspDiaSIE.Caption = "Diagnose SIE n.v"
End If
End Sub
 
Public Sub InspDia(Typ As String)
Dim strBookmark As String
strBookmark = "InspDia" & Typ
 
With ActiveDocument
'Text wird verborgen oder gezeigt

 If .Bookmarks.Exists(strBookmark) Then
    If (.CBInsp Or .CBInspGeo) And .FormFields(Typ).CheckBox Then
    .Bookmarks(strBookmark).Range.Font.Hidden = False
     Else
    .Bookmarks(strBookmark).Range.Font.Hidden = True
     End If
  Else
  MsgBox "Die Textmarke '" & strBookmark & "' existiert nicht!"
  End If
End With
End Sub


Der gesamte Code ist ungetestet.

Martin

RSS-Feed dieser Diskussion
powered by my little forum