Fehlersuche
#1
Hi,
ich finde mal wieder den fehler nicht.. seit ich in meinem workbook languagesetting auslese, bekomme ich einen fehler... hier der code wenn ich es aktiviere

Code:
Private Sub Workbook_Activate()
Country_Code = Application.International(xlCountrySetting)
If Country_Code = 49 Then
controlltable.Show vbModeless
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)"
Else
If Country_Code = 1 Then
controlltableUS.Show vbModeless
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)"
End If
End If
End Sub


wenn ich es deaktiviere:


Code:
Private Sub Workbook_Deactivate()
Country_Code = Application.International(xlCountrySetting)
If Country_Code = 49 Then
controlltable.Hide
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", True)"
Else
If Country_Code = 1 Then
controlltableUS.Hide
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", True)"
End If
End If
End Sub


und der fehler taucht hier auf beim schliessen


Code:
Private Sub CommandButton2us_Click()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", True)"
Workbooks("PR00 Calculation DE.xlsm").Close
End Sub

er bringt mir bei line


Code:
Workbooks("PR00 Calculation DE.xlsm").Close
Laufzeitfehler 1004
Die Methode "Close for Objekt"_Workbook ist fehlgeschlagen..

Wenn ich on Error resume next eingeben, verschwindet meine Userform, aber das Workbook wird nicht geschlossen

edit:

mit application.quit geht es einwandfrei, AAABER dann schliesst es mir alles Excel instanzen und dass will ich nicht


Danke für die Hilfe
Top
#2
Hallo Rotzi,

ohne mir Deinen Code anzuschauen, Du solltest debuggen lernen.

Für den Anfang:
  • setze den Cursor in die erste Zeile Deiner Sub/Function und drücke F9
  • Die Codeausführung wird dann an dieser Stelle unterbrochen
  • Mit F8 kannst Du den Code schrittweise weiter ausführen
  • Du solltest dann sehen in welcher Zeile es 'knallt'
  • Mit F5 wird der Code bis zum Ende ausgeführt
Ansonsten für den Anfang u.a. mal hier schauen.

Wer mit ...
Code:
Application.ScreenUpdating = False
... arbeitet, sollte unbedingt einen Errorhandler implementieren und darin das ScreenUpdating wieder einschalten.
Beispiele findest Du einige im Netz, so auch hier.

Simple so:

Code:
Private Sub Irgendwas()
On Error GoTo Er

   Application.ScreenUpdating = False
   
   MsgBox 1 / 0

Ex:
   On Error Resume Next
   Application.ScreenUpdating = True
   Exit Sub
Er:
   Application.ScreenUpdating = True
   MsgBox Err.Number & vbNewLine & Err.Description, vbCritical, "Fehler in der Sub Irgendwas"
    'Die Mesagebox mit Strg+Pause beenden, Du landest dann hier:
   Resume Ex  'den gelben Pfeil dann mit der Maus auf 'Resume Next' ziehen und F8 drücken  
   'for debug:
   Resume Next 'mit F8 springt man zur Zeile nach dem Fehler. Also eine Zeile weiter oben schauen.
End Sub

... dann kannst Du bessere Fragen stellen. Oder gar keine.


Gruß Carsten
Top
#3
Hallo Carsten ok, ich lerne vba erst... ich habe die Fehlerlinie bereits gefunden...

Es knallt hier:


Code:
Private Sub Workbook_Deactivate()
Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", True)"
controlltable.Hide
End Sub

Lasse ich die Zeile mit dem Ribbon weg, funktioniert es. Den Fehler zeigt er mir aber immernoch bei


Code:
Workbooks("PR00 Calculation DE.xlsm").Close savechanges:=False
an.
Verstehen warum tu ich es aber nicht :s 

Wenn ich in ein anderen workbook wechsel, soll mir das Ribbon da natürlich angezeigt werden... tut es auch... aber mein anderes kann ich über die userfrom dann nicht mehr schliesse weil eben dieser fehler kommt
Top
#4
Das Problem liegt darin, dass wenn ich meinen Quit button drücke, wird der Code von Deactivate ebenfalls noch einmal durchlaufen. Kann ich das verhindern?
Top
#5
Hallo Rotzi,

(29.04.2017, 14:03)rotzi schrieb: ...  Quit button drücke, wird der Code von Deactivate ebenfalls noch einmal durchlaufen. Kann ich das verhindern?

na aber, Du willst doch die Ribbons wieder einblenden und musst also dort durch.

Wenn man den Code im Step durchgeht, dann funktioniert es.
Man muss wahrscheinlich warten, bis die Ribbons wieder eingeblendet sind, bzw. ein 'Invalidate' auslösen.
Da muss ich aber heute Abend auch erst einmal nachschauen.

Wahrscheinlich geht das so in diese Richtung.

Oder Mumpel meldet sich dazu. :)


Gruß Carsten




Edit:

Workaround bis zu einer gescheiten und sauberen Lösung:

In einem Modul:
Code:
Option Explicit

Public IsClosing As Boolean

Sub closeMy()

   Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", True)"
   
   IsClosing = True
   With Workbooks("PR00 Calculation DE.xlsm")
       .RunAutoMacros xlAutoClose
       .Close savechanges:=False
   End With

End Sub


Unter dieser Arbeitsmappe/Workbook:
Code:
Option Explicit

Private Sub Workbook_Activate()
   Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", false)"
End Sub

Private Sub Workbook_Deactivate()
   If Not IsClosing Then
       Application.ExecuteExcel4Macro "Show.Toolbar(""Ribbon"", True)"
   End If
End Sub

Errorhandler ringsherum und erstmal fertsch.

... bis zu einer gescheiten Lösung.
Top
#6
Danke ;;)ber das ist nur 1 button von 2 die mein workbook verlasse.. der andere erstellt ein neues workbook und kopiert da etwas rein.. da kommt bei der pastespecial die fehlermeldung:( wir brauchen einen ribbon spezialisten :P
Top
#7
hahaha was ein bishcen Sport so alles aus macht...
also ganz klare sache...

ich schreibe mit meinem Quit button in eine Zelle eine "1".. und bei Worksheet_deactivate mach ich einfach wenn diese zelle 1 dann exit sub... dann führt er es nicht weiter aus.. die 1 wird eh nicht gespeichert in diesem feld,
d.h. bei normaler benutzung findet er die 1 nicht und macht normal weiter :18:  ...

so nun kommt das zweite problem.. da es ein anderes workbook is verlasse ich das workbook sobald es das neue Workbook öffnet..
da frag ich einfach den dateinamen ab und wenn false exit sub :18: :18: :18:

Danke Carsten für deine Geduld :D
Top
#8
Okay, nun habe ich noch einen schönheitsfehler :D

und zwar... mein workbook läuft mit dem code etc.... funktioniert alles einwandfrei.. aber:

2 fälle ein fehler:

1. an deres workbook ist bereits offen, ich öffne meine datei mit dem vba code... funktioniert alles.



2. mein workbook mit dem code ist offen und ribbon ist nicht da... öffne ich nun eine weitere excel instanz, zeigt es mir das ribbon nicht an, da es ja von meiner datei ausgeblendet wurde.... vorschläge? oder muss ich nochmal sport machen gehen?  :05:
Top
#9
(29.04.2017, 18:35)rotzi schrieb: ich schreibe ... in eine Zelle eine "1".. und bei Worksheet_deactivate ...

Nein, nicht eine "1" in eine Zelle, sondern 'True' in diese  Variable:
Code:
Public IsClosing As Boolean

Und diese wird in meinem Beispiel abgefragt.


Und wie gesagt: Das ist nur ein Workaround.
Der 'Trick' ist hier, dass die Ribbons vor dem ActiveWorkbook.Close eingeblendet werden, die Variable 'isClosing' auf True gesetzt wird. Die Ribbons werden im Deactivate-Ereignis nicht eingeblendet, da 'isClosing' True ist.

Mumpel sollte vielleicht eine bessere Lösung kennen.


Schönes Wochenende,
Gruß Carsten
Top
#10
Hallo!

(29.04.2017, 18:54)DbSam schrieb: (...) Mumpel sollte vielleicht eine bessere Lösung kennen (...)
Einfach per RibbonX ausblenden (startFromScratch="true" )? Mehr wüsste ich nicht.

Gruß, René
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste