Fehlersuche
#11
(29.04.2017, 13:25)DbSam schrieb: 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.

Moin Carsten!

Entgegen der VBA-Hilfe schaltet sich .ScreenUpdating nach Beendigung eines Makros automatisch wieder auf true.
Gleiches gilt für .DisplayAlerts, da steht es aber auch explizit in der Hilfe.

Prinzipiell gebe ich Dir aber selbstverständlich Recht.
Es ist sauberer, alles was ich ausschalte, in einer Fehlerbehandlung wieder einzuschalten.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#12
Hallo Ralf,

(01.05.2017, 08:25)RPP63 schrieb: Es ist sauberer, alles was ich ausschalte, in einer Fehlerbehandlung wieder einzuschalten.

sauberer ist es, den vorherigen Zustand wieder herzustellen! Wink

Gruß Uwe
Top
#13
:21:
[Haarspalterei]
Also so, Uwe (natürlich nicht Ernst gemeint)?
Code:
Dim blnEvents As Boolean
On Error GoTo ErrHdl
With Application
  blnEvents = .EnableEvents
  .EnableEvents = False
  'Code
End With
ErrHdl:
Application.EnableEvents = blnEvents

[/Haarspalterei]
:32:

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#14
Hi,

okay, also darf ich zu Kenntniss nehmen, das es einfach nicht geht, ein Workbook mit verstecktem Ribbon zu benutzen, eine neue Datei zu öffnen da aber das Ribbon anzuzeigen?

LG
Top
#15
(01.05.2017, 08:25)RPP63 schrieb: Moin Carsten!
Moin Ralf!


Danke für den Hinweis, aber das ist mir durchaus bewusst.

Man kann die Problematik auch gern ins Lächerliche ziehen, aber und gerade auch bei '.DisplayAlerts' sollte man den zweiten Halbsatz in der MS-Hilfe lesen:
Zitat:If you set this property to False, Microsoft Excel sets this property to True when the code is finished, unless you are running cross-process code.

Und bei '.ScreenUpdate' macht es schon einen gewaltigen Unterschied, ob dies im Errorhandler auf False stehenbleibt oder vor der MsgBox auf True gesetzt wird.

Code:
Private Sub Irgendwas()
On Error GoTo Er

  Application.ScreenUpdating = False
  ActiveSheet.Cells(1, 1) = "Der Ralf weiß das auch, aber er wollte sicherlich nur mal querschießen."
  MsgBox 1 / 0

Ex:
  On Error Resume Next
  Application.ScreenUpdating = True
  Exit Sub
Er:
  'zur Demo mal auskommentiert:
   'Application.ScreenUpdating = True
  MsgBox Err.Number & vbNewLine & Err.Description, vbCritical, "Fehler in der Sub Irgendwas"
  Resume Ex
  'for debug:
  Resume Next
End Sub



Gruß Carsten

PS:
Mumpel, Danke für den Tipp.  :)
Den werde ich mal ausprobieren. Mal sehen, ob man damit das Problem beim Schließen ohne Speichern per VBA die Fehlermeldung unterdrücken kann. Im Moment habe ich aber nicht die richtige Muße dafür da mich dieses Problem nicht direkt betrifft und ich auch nicht weiß, ob sich der TE noch weiter dafür interessiert.
Top
#16
Hi, fürs debuggen oder das ribbon thema? ich hab mumpels tip ausprobiert, geht leider nicht :(
Top
#17
Hallo Rotzi,



(01.05.2017, 11:24)rotzi schrieb: okay, also darf ich zu Kenntniss nehmen, das es einfach nicht geht, ein Workbook mit verstecktem Ribbon zu benutzen, eine neue Datei zu öffnen da aber das Ribbon anzuzeigen?
Doch, das geht.

Was funktioniert nicht an dem Workaround?
Vielleicht kannst Du Dein Problem nochmal genau beschreiben. So, damit auch ich es verstehe.



Gruß Carsten
Top
#18
Hi Carsten, sorry habe mich falsch ausgedrückt, ja es geht... ABER:

wenn ich aus meinem Workbook, eine neue excel instanz öffne, dann kann ich nichts mehr da rein kopieren. hier knallt es

Code:
With Workbooks.Add            
.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

ich habe es mir genau angeschaut, das Problem liegt darin, dass er aus irgendeinem Grund, den Zwischenspeicher leert wenn ich das Ribbon aktiviere...

Die abfolge ist:

1. Erstelle ein Tabellenblatt(in dem alten workbook), formatierung etc...
2. Kopiere das Tabellenblatt
3. Erstelle ein neues Workbook
4. dann kommt Workbook Deactivate weil er in das neue rein geht... und da kommt eben Ribbon = true
5. füge es in das neu erstellt Workbook ein... aber der zwischenspeicher ist durch das ribbon einblenden leer geworden und deswegen sagt er mir konnte nicht ausgeführt werden...

Lösung wäre hierfür vllt eine Variable für das kopierte vergeben?

Gruss
Top
#19
Hallo Rotzi,

es wäre sehr hilfreich, wenn Du eine Beispieldatei mit Deinem Problem und dessen Code hier hochladen würdest.
Du kannst, und solltest, gern alles andere entfernen und das zu kopierende Sheet fast leer machen.
Es sollte ein (wie bisher) funktionierender Code mit Deinem Fehler übrig bleiben.

Dann könnte man mal den Debugger anwerfen und überlegen.
Jetzt weiß ich halt nicht genau, welchen Code ich wie nachbasteln sollte ...


Gruß Carsten
Top
#20
hab die lösung :)

ich kopiere es einfach nicht.. ich sag einfach

with add workbook
Range("A1") = workbook("name").sheets("name").range("a-z").value



mannnnnnn die lösung kann manchmal so einfach sein :D
Top


Gehe zu:


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