Ich habe eine Userform in einem MS Word 2003 Template. Darauf befindet sich ein TreeView Control (MS TreeView Control Version 6.0). Ausserdem befindet sich auf der Userform ein ControlButton. Im Click-Ereignis des ControlButton wird die Userform auf dem Bildschirm verschoben und das Application.ActiveWindow von Word wird entsprechend in seiner Grösse angepasst, dass beide Fenster nebeneinander liegen. Bei erneutem Click auf den ControlButton wird Application.ActiveWindow.WindowState = wdWindowStateMaximize und die Userform in die Bildschirmmitte verschoben. Die Userform ist ShowModal = False. Soweit funktioniert alles.
Im DblClick Ereignis des TreeView wird je nach TreeView.SelectedItem eine Datei in das aktive Worddokument eingefügt, danach wird die Userform beendet. Soweit funktionierts immer noch.
Nun soll im DblClick Ereignis nebst dem Einfügen des Textes das Application.ActiveWindow maximiert werden und zwar mittels Application.ActiveWindow.WindowState = wdWindowStateMaximize. Dies funktioniert nicht. Im Debugmodus im Einzelschrittmodus ausgeführt, klappt's wunderbar, kein fehler, gar nix. Strange.
Irgendwie habe ich den Eindruck, dass es mit den Messages zu tun haben könnte, da entweder die Reihenfolge nicht stimmt oder für VBA irgendwas zu schnell passiert.
Har irgendwer eine Idee, woran es liegen könnte, das das Maximieren im ControlButton_Click funktioniert, im TreeView_DblClick nicht, ausser im Debugmodus?
Code:
Im DblClick Ereignis des TreeView wird je nach TreeView.SelectedItem eine Datei in das aktive Worddokument eingefügt, danach wird die Userform beendet. Soweit funktionierts immer noch.
Nun soll im DblClick Ereignis nebst dem Einfügen des Textes das Application.ActiveWindow maximiert werden und zwar mittels Application.ActiveWindow.WindowState = wdWindowStateMaximize. Dies funktioniert nicht. Im Debugmodus im Einzelschrittmodus ausgeführt, klappt's wunderbar, kein fehler, gar nix. Strange.
Irgendwie habe ich den Eindruck, dass es mit den Messages zu tun haben könnte, da entweder die Reihenfolge nicht stimmt oder für VBA irgendwas zu schnell passiert.
Har irgendwer eine Idee, woran es liegen könnte, das das Maximieren im ControlButton_Click funktioniert, im TreeView_DblClick nicht, ausser im Debugmodus?
Code:
Quellcode
- Private Sub TreeView_MenuStructure_DblClick()
- ' Status: test
- On Error GoTo Err_TreeView_MenuStructure_DblClick
- Dim lngStartOffset As Long
- Dim strFileName As String
- Dim strFieldFileName As String
- Dim objTreeNode As Object
- ' MsgBox "activewindow=" & ActiveWindow.Caption & vbNewLine & "windowstate=" & ActiveWindow.WindowState
- Set objTreeNode = Me![TreeView_MenuStructure].SelectedItem
- If Not objTreeNode Is Nothing Then
- If objTreeNode.Children = 0 Then
- If objTreeNode.Tag <> "" Then
- strFileName = strTBBaseFolder & "\" & GetTopLevelNode(objTreeNode).Text & "\" & objTreeNode.Tag
- If FileExists(strFileName) Then
- If ActiveWindow.WindowState <> wdWindowStateMaximize Then ActiveWindow.WindowState = wdWindowStateMaximize
- lngStartOffset = Selection.Start
- Selection.InsertFile FileName:=strFileName, ConfirmConversions:=False, Link:=False, Attachment:=False
- ActiveDocument.Range(lngStartOffset, lngStartOffset).Select
- Selection.Collapse wdCollapseStart
- Set objTreeNode = Nothing
- ' Debug.Print "active:" & ActiveWindow.Active
- Call Me.Quit
- GoTo Exit_TreeView_MenuStructure_DblClick
- Else
- MsgBox "File: " & strFileName & " does not exist."
- End If
- End If
- End If
- End If
- Exit_TreeView_MenuStructure_DblClick:
- Set objTreeNode = Nothing
- Exit Sub
- Err_TreeView_MenuStructure_DblClick:
- LogError "MainForm::TreeView_MenuStructure:DblClick", Err
- If Err.Number = 0 Then
- GoTo Exit_TreeView_MenuStructure_DblClick
- Else
- Resume Exit_TreeView_MenuStructure_DblClick
- End If
- End Sub
- Private Sub btnSticky_Click()
- On Error GoTo Err_btnSticky_Click
- Application.ScreenUpdating = False
- If Not boolIsSticky Then
- Call PlaceSticky
- Else
- Call PlaceUnSticky
- End If
- Call SetFocusToWindow(Me.Caption)
- SendKeys "{TAB}"
- Exit_btnSticky_Click:
- Application.ScreenUpdating = True
- Application.ScreenRefresh
- Exit Sub
- Err_btnSticky_Click:
- LogError "MainForm::btnSticky_Click", Err
- If Err.Number = 0 Then
- GoTo Exit_btnSticky_Click
- Else
- Resume Exit_btnSticky_Click
- End If
- End Sub
- Public Sub PlaceSticky()
- On Error GoTo Err_PlaceSticky
- Dim intWordWidth As Integer
- Dim intWordHeight As Integer
- ActiveWindow.WindowState = wdWindowStateMaximize
- oldFormCoords.Top = Me.Top
- oldFormCoords.Left = Me.Left
- oldFormCoords.Width = Me.Width
- oldFormCoords.Height = Me.Height
- oldTVCoords.Top = Me![TreeView_MenuStructure].Top
- oldTVCoords.Left = Me![TreeView_MenuStructure].Left
- oldTVCoords.Width = Me![TreeView_MenuStructure].Width
- oldTVCoords.Height = Me![TreeView_MenuStructure].Height
- intWordWidth = ActiveWindow.Width
- intWordHeight = ActiveWindow.Height
- ActiveWindow.WindowState = wdWindowStateNormal
- ActiveWindow.Top = 0
- ActiveWindow.Left = 0
- ActiveWindow.Height = intWordHeight
- ActiveWindow.Width = intWordWidth - Me.Width
- Me.Height = intWordHeight
- Me![TreeView_MenuStructure].Height = oldTVCoords.Height + (Me.Height - oldFormCoords.Height)
- ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
- If Me.Top = -5.25 And Me.Left = -5.25 Then
- ' von mir gewählte spezialwerte. wenn beide -5.25, dann muss fenstermitte berechnet werden
- oldFormCoords.Left = CInt(ActiveWindow.Width / 2)
- oldFormCoords.Top = CInt((intWordHeight - oldFormCoords.Height) / 2)
- End If
- Me.Top = 0
- Me.Left = intWordWidth - Me.Width
- boolIsSticky = True
- Exit_PlaceSticky:
- Exit Sub
- Err_PlaceSticky:
- LogError "MainForm::PlaceSticky", Err
- If Err.Number = 0 Then
- GoTo Exit_PlaceSticky
- Else
- Resume Exit_PlaceSticky
- End If
- End Sub