Discussion:
Trotz "Application.ScreenUpdating = False" springt die Bildschirmansicht gelegentlich...
(zu alt für eine Antwort)
Thomas
2006-01-30 07:53:02 UTC
Permalink
Hallo,

trotz dass ich "Application.ScreenUpdating = False" zu Beginn jeder
Prozedur gesetzt habe springt die Bildschirmansicht, wenn innerhalb der
Prozedur ein anderes Makro aufgerufen wird. Was kann ich dagegen tun?

MfG Thomas
Thomas Ramel
2006-01-30 08:07:31 UTC
Permalink
Grüezi Thomas

Thomas schrieb am 30.01.2006
Post by Thomas
trotz dass ich "Application.ScreenUpdating = False" zu Beginn jeder
Prozedur gesetzt habe springt die Bildschirmansicht, wenn innerhalb der
Prozedur ein anderes Makro aufgerufen wird. Was kann ich dagegen tun?
Vermeide grundsätzlich alle .Select und .Actiavate in deinem Code (das ist
zu mind. 99% machbar), dann wird auch das ScreenUpdating praktisch
überflüssig.

Da .ScreenUpdating eine applikatinsweite Einstellung ist, reicht es
meistens aus, diese zu Beginn aus- und am Ende wieder einzuschalten. Es
dürfte also nicht notwendig sein, dies in jeder Sub zu tun.


Ansonsten können wir deinen Code nur beurteilen und Rat zur Verbesserung
geben, wenn Du diesen auch offenlegst....



Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Thomas
2006-01-30 08:36:26 UTC
Permalink
Hallo Thomas,

vielen Dank erstmal für die rasche Antwort.
Kenne mich leider noch nicht sooo gut aus, deshalb hier mal mein Code.
Wie könnte dieser denn ohne "select" ausschauen?

Danke! Gruß Thomas

Ist ein ganz schöner Brocken:


Sub SICHERN_DER_MAPPE_UND_NEUES_JAHR_BeiKlick()

Dim wks1 As Worksheet
Dim strPfad As String
Dim ant As String
Dim s As Byte
Dim gesamt As Byte

ant = Msgbox("Mit diesem Vorgang ändern Sie den Kalender und Speichern
eine reduzierte Version dieser Mappe in den Ordner Sicherungskopien.
Ein Rückgängigmachen ist nach Bestätigung nicht mehr möglich!
***Dieser Vorgang dauert ca. 3 Minute***



Möchten Sie fortfahren?",
vbYesNo)

If ant = vbNo Then
Exit Sub

Else

Application.ScreenUpdating = False
Application.DisplayAlerts = False

strPfad = ThisWorkbook.Path & "\Sicherungskopien\" & _
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "_" & Day(Date) &
_
"." & Month(Date) & "." & Year(Date)& "_Sicherungskopie.xls"

ThisWorkbook.SaveCopyAs strPfad

Workbooks.Open strPfad


Call Werkskalenderfixierung
Call Load_Übersicht_FIXIERUNG
Call löschen

gesamt = Sheets.Count

For s = 1 To gesamt
Sheets(s).visible = True
Next

' hier werden Makros gelöscht
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("Uploader")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("SICHERN_UND_NEUES_JAHR")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("Schieber1_40h_Woche_neu")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("Schieber2_Schichten_neu")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("Schieber_Masch_Tage_neu")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("Pool_Namen_Uploader")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("Gibt_Blatt_Namen")
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.
_
VBComponents("BLATTWECHSEL")


ActiveWorkbook.Save
ActiveWorkbook.Close

Call verschieben_Jahre

Msgbox "Eine Sicherungskopie dieser Mappe wurde in " & vbCr & vbCr &
strPfad & " abgelegt !", _
vbInformation, " Sicherungskopie"


End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub Werkskalenderfixierung()

'Application.ScreenUpdating = False
Sheets("SUMME_SHEET").Select
ActiveSheet.Unprotect
Range("D3:AX7").Select
Selection.Copy
Range("D3:AX7").Select
Selection.PasteSpecial Paste:=xlValues
ActiveSheet.Protect DrawingObjects:=True, contents:=True,
Scenarios:=True
Range("a1").Select

End Sub

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub Load_Übersicht_FIXIERUNG()

'Application.ScreenUpdating = False

Sheets("Load_Übersicht").Select
ActiveSheet.Unprotect
Range("1:25").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
ActiveSheet.Protect DrawingObjects:=True, contents:=True,
Scenarios:=True
Range("a1").Select

End Sub

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sub verschieben_Jahre()

Dim z As Byte
Dim Pools As Byte
Dim x As Byte
Dim VERG_POOLS As Byte

For Pools = 2 To 21
Sheets(Pools).Activate
ActiveSheet.Unprotect
Application.ScreenUpdating = False

Range("U13:AF27").Select 'oberer Teil von
Jahr_zwei
Selection.Copy

Range("F13:Q27").Select 'oberer Teil von
Jahr_eins
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,
SkipBlanks:= False, Transpose:=False

Range("U35:AF91").Select 'unterer Teil von
Jahr_zwei
Selection.Copy

Range("F35:Q91").Select 'unterer Teil von
Jahr_eins
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,
SkipBlanks:= False, Transpose:=False



Range("AJ13:AU27").Select 'oberer Teil von Jahr_drei
Selection.Copy

Range("U13:AF27").Select 'oberer Teil von Jahr_zwei
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,
SkipBlanks:= False, Transpose:=False

Range("AJ35:AU91").Select 'unterer Teil von Jahr_drei
Selection.Copy

Range("U35:AF91").Select 'unterer Teil von Jahr_zwei
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,
SkipBlanks:= False, Transpose:=False


Range("leer").Cells = 0
Range("Load3").Cells = 0
Range("AJ20:AU20,AJ35:AU35").Cells = 5

Range("A1").Select

ActiveSheet.Protect
Next


Sheets("SUMME_SHEET").Activate
ActiveSheet.Unprotect


Range("F4") = Range("F4") + 364.25

Range("B2").Select

ActiveSheet.Protect DrawingObjects:=True, contents:=True,
Scenarios:=True




'Jahr im VERG-Sheet

For VERG_POOLS = 22 To 41

Sheets(VERG_POOLS).visible = True
Sheets(VERG_POOLS).Select

ActiveSheet.Unprotect

'Jahr(1) wird genullt:
If Range("D6") = 1 Then

Range("k12,k13,F10:J10,F20:J21,k27,k34").Cells = ""
Range("p12,p13,L10:O10,l20:o21,p27,p34").Cells = ""
Range("u12,u13,Q10:T10,q20:t21,u27,u34").Cells = ""
Range("aa12,aa13,V10:Z10,v20:z21,aa27,aa34").Cells = ""
Range("af12,af13,AB10:AE10,ab20:ae21,af27,af34").Cells = ""
Range("ak12,ak13,AG10:AJ10,ag20:aj21,ak27,ak34").Cells = ""
Range("aq12,aq13,AL10:AP10,al20:ap21,aq27,aq34").Cells = ""
Range("av12,av13,AR10:AU10,ar20:au21,av27,av34").Cells = ""
Range("ba12,ba13,AW10:AZ10,aw20:az21,ba27,ba34").Cells = ""
Range("bg12,bg13,BB10:BF10,bb20:bf21,bg27,bg34").Cells = ""
Range("bl12,bl13,BH10:BK10,bh20:bk21,bl27,bl34").Cells = ""
Range("bq12,bq13,BM10:BP10,bm20:bp21,bq27,bq34").Cells = ""

Else
Range("k10,k12,k13,k20,k21,k27,k34").Cells = ""
Range("p10,p12,p13,p20,p21,p27,p34").Cells = ""
Range("u10,u12,u13,u20,u21,u27,u34").Cells = ""
Range("aa10,aa12,aa13,aa20,aa21,aa27,aa34").Cells = ""
Range("af10,af12,af13,af20,af21,af27,af34").Cells = ""
Range("ak10,ak12,ak13,ak20,ak21,ak27,ak34").Cells = ""
Range("aq10,aq12,aq13,aq20,aq21,aq27,aq34").Cells = ""
Range("av10,av12,av13,av20,av21,av27,av34").Cells = ""
Range("ba10,ba12,ba13,ba20,ba21,ba27,ba34").Cells = ""
Range("bg10,bg12,bg13,bg20,bg21,bg27,bg34").Cells = ""
Range("bl10,bl12,bl13,bl20,bl21,bl27,bl34").Cells = ""
Range("bq10,bq12,bq13,bq20,bq21,bq27,bq34").Cells = ""

End If


Cells(7, 1) = Cells(7, 1) + 1

ActiveSheet.Protect
ActiveSheet.visible = False
Range("F10").Select

Next

End Sub

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sub löschen()

'Hier die Namen der Sheets eintragen die in der Kopie gelöscht werden
sollen
Dim P As Integer
Dim V As Integer

A = Sheets(1).Range("G2")

For P = 21 To A + 2 Step -1
Sheets(P).Unprotect
Sheets(P).Delete
Next P

For V = 41 - (20 - A) To 2 * A + 2 Step -1
Sheets(V).Unprotect
Sheets(V).Delete
Next


Sheets("Uploader").Delete
Sheets("Werkskalender").Delete
Sheets("PLANT_UPLOAD_FILE").Delete
Sheets("PLANT_UPLOAD_FILE Template").Delete

End Sub
Thomas Ramel
2006-01-30 08:52:59 UTC
Permalink
Grüezi Thomas

Thomas schrieb am 30.01.2006
Post by Thomas
Kenne mich leider noch nicht sooo gut aus, deshalb hier mal mein Code.
Wie könnte dieser denn ohne "select" ausschauen?
Ich habe dir mal zwei Subs umgeschrieben; sieh sie dir an und prüfe deine
anderen Makros diesbezüglich:

Sub Werkskalenderfixierung()
With Sheets("SUMME_SHEET")
.Unprotect
.Range("D3:AX7").Value = .Range("D3:AX7").Value
.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
End With
End Sub


Sub Load_Übersicht_FIXIERUNG()
With Sheets("Load_Übersicht")
.Unprotect
.Range("1:25").Value = .Range("1:25").Value
.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
End With
End Sub


Weitere Infos zum Thema Referenzierung findest Du z.B. hier:

http://www.herber.de/xlfaq/xlbasics/main_sel.htm




Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Thomas
2006-01-30 09:11:26 UTC
Permalink
Vielen Dank, mal sehen wie weit ich komme ohne Laufzeitfehler ;-)
Grüße Thomas
Thomas
2006-01-30 10:23:27 UTC
Permalink
Hi Thomas,

ich habe mal versucht die Sub verschieben_Jahre() nach deinem Beispiel
umzuschreiben.
Bei Zeile: ".Range("U13:AF27").Formula = Range("F13:Q27").Formula"
gibt's allerdings schon die erste Fehlermeldung ('1004' Anwendungs oder
Objektdefinierter Fehler). Wie kann ich sonst ausdrücken das nur die
Formel kopiert werden soll???
Stimmt der Rest vom Aufbau?

Danke dir!

Gruß Thomas

Sub verschieben_Jahre()

Dim z As Byte
Dim Pools As Byte
Dim x As Byte
Dim VERG_POOLS As Byte

For Pools = 2 To 21
With Sheets(Pools)
.Unprotect
.Range("U13:AF27").Formula = Range("F13:Q27").Formula
'oberer Teil von Jahr_zwei = oberer Teil von Jahr_eins
.Range("U35:AF91").Formula = Range("F35:Q91").Formula
'unterer Teil von Jahr_zwei = unterer Teil von Jahr_eins
.Range("AJ13:AU27").Formula = Range("U13:AF27").Formula
'oberer Teil von Jahr_drei = oberer Teil von Jahr_zwei
.Range("AJ35:AU91").Formula = Range("U35:AF91").Formula
'unterer Teil von Jahr_drei = unterer Teil von Jahr_zwei
.Range("leer").Cells = 0
.Range("Load3").Cells = 0
.Range("AJ20:AU20,AJ35:AU35").Cells = 5
.Range("A1").Select
.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
End With
Next

With Sheets("SUMME_SHEET")
.Unprotect
.Range("F4") = Range("F4") + 364.25
.Range ("B2")
.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
End With


'Jahr im VERG-Sheet

For VERG_POOLS = 22 To 41

With Sheets(VERG_POOLS)
.visible = True
.Unprotect

If Range("D6") = 1 Then 'Jahr(1) wird genullt:
Range("k12,k13,F10:J10,F20:J21,k27,k34").Cells = ""
Range("p12,p13,L10:O10,l20:o21,p27,p34").Cells = ""
Range("u12,u13,Q10:T10,q20:t21,u27,u34").Cells = ""
Range("aa12,aa13,V10:Z10,v20:z21,aa27,aa34").Cells = ""
Range("af12,af13,AB10:AE10,ab20:ae21,af27,af34").Cells = ""
Range("ak12,ak13,AG10:AJ10,ag20:aj21,ak27,ak34").Cells = ""
Range("aq12,aq13,AL10:AP10,al20:ap21,aq27,aq34").Cells = ""
Range("av12,av13,AR10:AU10,ar20:au21,av27,av34").Cells = ""
Range("ba12,ba13,AW10:AZ10,aw20:az21,ba27,ba34").Cells = ""
Range("bg12,bg13,BB10:BF10,bb20:bf21,bg27,bg34").Cells = ""
Range("bl12,bl13,BH10:BK10,bh20:bk21,bl27,bl34").Cells = ""
Range("bq12,bq13,BM10:BP10,bm20:bp21,bq27,bq34").Cells = ""

Else
Range("k10,k12,k13,k20,k21,k27,k34").Cells = ""
Range("p10,p12,p13,p20,p21,p27,p34").Cells = ""
Range("u10,u12,u13,u20,u21,u27,u34").Cells = ""
Range("aa10,aa12,aa13,aa20,aa21,aa27,aa34").Cells = ""
Range("af10,af12,af13,af20,af21,af27,af34").Cells = ""
Range("ak10,ak12,ak13,ak20,ak21,ak27,ak34").Cells = ""
Range("aq10,aq12,aq13,aq20,aq21,aq27,aq34").Cells = ""
Range("av10,av12,av13,av20,av21,av27,av34").Cells = ""
Range("ba10,ba12,ba13,ba20,ba21,ba27,ba34").Cells = ""
Range("bg10,bg12,bg13,bg20,bg21,bg27,bg34").Cells = ""
Range("bl10,bl12,bl13,bl20,bl21,bl27,bl34").Cells = ""
Range("bq10,bq12,bq13,bq20,bq21,bq27,bq34").Cells = ""

End If

.Cells(7, 1) = Cells(7, 1) + 1
.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
.visible = False
.Range ("F10")
End With
Next

End Sub
Thomas Ramel
2006-01-30 10:33:16 UTC
Permalink
Grüezi Thomas

Thomas schrieb am 30.01.2006
Post by Thomas
Hi Thomas,
ich habe mal versucht die Sub verschieben_Jahre() nach deinem Beispiel
umzuschreiben.
Bei Zeile: ".Range("U13:AF27").Formula = Range("F13:Q27").Formula"
gibt's allerdings schon die erste Fehlermeldung ('1004' Anwendungs oder
Objektdefinierter Fehler).
Du hat den Punkt vor dem zweiten .Range(.... unterschlagen ;-)

.Range("U13:AF27").Formula = .Range("F13:Q27").Formula


(Wobei ich davon ausgehe, dass Die beiden Bereiche auf demselben
Tabellenblatt liegen).

Sieh dir die Ausführungen der Online-Hilfe zum With-Befehl näher an, dort
wird deren Verwendung erklärt.


PS: Dieser hier:

.Range("A1").Select


ist IMO auch nicht mehr notwendig, da die Zellenmarkierung ihren
angestammten Platz nicht mehr verlässt.


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Thomas
2006-01-30 11:03:43 UTC
Permalink
Hallo Thomas,

das mit:

.Range("U13:AF27").Formula = .Range("F13:Q27").Formula

klappt leider nicht, dafür aber das hier:

.Range("U13:AF27").Copy
.Range("F13:Q27").PasteSpecial Paste:=xlPasteFormulas

allerdings werden beim kopieren meine deutschen Formeln im
Tabellenblatt in englische umgewandelt und Excel kann diese nicht mehr
berechnen!!! Z.B. wurde aus =SUMME(AK81:AK85)+SUMME(AK89:AK91) -->
=SUM(G81:G85)+SUM(G89:G91).

Hilfe!!!

Gruß Thomas
Thomas Ramel
2006-01-30 12:06:12 UTC
Permalink
Grüezi Thomas

Thomas schrieb am 30.01.2006
Post by Thomas
Hallo Thomas,
.Range("U13:AF27").Formula = .Range("F13:Q27").Formula
.Range("U13:AF27").Copy
.Range("F13:Q27").PasteSpecial Paste:=xlPasteFormulas
Uuups; richtig!
Ich bin davon ausgegangen, dass Du die Reihenfolge richtig hattest.
Hier die IMO korrekte Anweisung, die auch die sprache der Funktin
berücksichtigt:

.Range("F13:Q27").FormulaLocal = .Range("U13:AF27").FormulaLocal






Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Thomas
2006-01-30 12:14:42 UTC
Permalink
... und was ist das Problem mit meiner zweiten Variante wo auf einmal
die Formeln in englisch dastehen?

Danke. Gruß Thomas
Thomas Ramel
2006-01-30 12:22:31 UTC
Permalink
Grüezi Thomas

Thomas schrieb am 30.01.2006
Post by Thomas
... und was ist das Problem mit meiner zweiten Variante wo auf einmal
die Formeln in englisch dastehen?
Keine Anhnung; bei mir macht Excel dies korekt.

Welche Umgebung hast Du denn, insbesonder Excel-Version und -Sprache?


Dennoch würde ich auf .PasteSpecial verzichten, da dieses eine Selektion
durchführt und daher nur dann klappt, wenn das Tabellenblatt auch aktiv ist
- Du also wiederum mit .Activate arbeiten musst, was zu den bekannten
Effekten führt....



Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Thomas
2006-01-30 12:39:38 UTC
Permalink
Hallo Thomas,

danke für die Tipps!
Habe Excel XP, auf deutsch.

Gruß
Thomas

Loading...