Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1660to1664
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kingi100

Kingi100
19.12.2018 16:18:44
Peter
Hallo Excel-Experten,
ich habe ein Makro, dass beim Öffnen des Sheets "Ausgabe" die Daten im Sheet "Ausgabe" aktualisieren soll. Der Start geht über Worksheet_Activate mit Call des Makros, was auch funktioniert. Nun verlässt das Makro aber das Sheet "Ausgabe" um Daten zu holen und löst beim Zurückkehren das Worksheet-Activate Ereignis wieder aus. Damit hängt das Makro in einer Schleife und stürzt ab.
Wer kann mir helfen, wie ich das Makro ändern muss, dass nur beim 1. Aufruf das Worksheet_Activate ausgeführt wird. Geht das mit einer Variablen ?
Danke schon mal im Voraus
Gruß Peter

Private Sub Worksheet_Activate()
a = msgbox("Daten aktualisieren ?", vbYesNo)
If a = vbNo Then
Exit Sub
Else
Call Loeschen_1
End If
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Makro nur einmal starten
19.12.2018 16:20:33
Peter
Sorry, der Betreff war wohl Quatsch
AW: Makro nur einmal starten
19.12.2018 16:24:10
Werner
Hallo Peter,
was meinst du mit "verlässt das Sheet Ausgabe"?
Selektierst/Aktivierst du in deinem Makro Loeschen_1 ein anderes Blatt? Dann verzichte doch darauf. Zeig doch mal deinen Code von Loeschen_1.
Gruß Werner
AW: Makro nur einmal starten
19.12.2018 16:41:59
Peter
Hallo Werner, ja das Sheet wird verlassen, um die Anzahl der Zeilen festzustellen, die ich dann in Ausgabe zum Kopieren brauche.
Gruß Peter
Hier der Code.

Sub Loeschen_1()
Application.ScreenUpdating = False                      ' BS ausschalten
Sheets("Kalkulation über Artikel").Select
lzz = Cells(Rows.Count, 2).End(xlUp).Rows.Row           ' letzte Zeile in Sheet Kalkulation
msgbox "Anzahl Zeilen insgesamt in Kalkulation über Artikel:  " & lzz
Sheets("Ausgabe").Select
Range("B11:D11").Select
Selection.Copy
Range("B13", "D" & lzz + 10).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("B13").Select
Range("B13", "D" & lzz).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A13").Select
lza = Cells(Rows.Count, 2).End(xlUp).Rows.Row           ' löschen Zeilen, wenn Werte = 0
'** Durchlauf aller Zeilen von unten
For t = lza To 12 Step -1                      'Zählt rückwärts bis Zeile 12
'Abfragen, ob in den Spalten 0 steht
If Cells(t, 2).Value = 0 Then
Rows(t).Delete Shift:=xlUp
C = C + 1
End If
Next t
msgbox "Anzahl gelöschte Zeilen:  " & C
C = 0
lza1 = Cells(Rows.Count, 2).End(xlUp).Rows.Row           ' löschen Zeilen, wenn Werte = 0
Range("A13", "D" & lza1).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
'ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
'   Selection.Delete
'   Range("C12").Select
Application.ScreenUpdating = True              ' BS wieder einschalten
Range("A12").Select
End Sub

Anzeige
AW: Makro nur einmal starten
19.12.2018 17:20:18
Daniel
Hi
dazu muss man das Sheet nicht verlassen.
du kannst in VBA auf jedem beliebigen Sheet arbeiten, ohne es zu aktivieren, in dem du einfach vor jedem Zellbezug das Tabellenblatt mit angibst und nicht mehr mit Select arbeitest, sondern die Befehle direkt an die Zellbezüge anhängst ohne sie vorher zu selektieren.
(siehe hierzu auch hier: https://www.online-excel.de/excel/singsel_vba.php?f=78 )
wenn man explizit auf dem aktiven Sheet arbeiten will, braucht man das Blatt nicht angeben, trotzdem sollte man auf das Select verzichten.
das solltest du sowieso grundsätzlich tun, deine Makros werden dadurch:
- kürzer
- schneller
- übersichtlicher
- weniger fehleranfällig
- Application.ScreenUpdating = False wird in den meisten Fällen überflüssig
für den ersten Teil des Codes würde das so aussehen:
Sub Loeschen_1()
lzz = Sheets("Kalkulation über Artikel").Cells(Rows.Count, 2).End(xlUp).Row
MsgBox "Anzahl Zeilen insgesamt in Kalkulation über Artikel:  " & lzz
Range("B11:D11").Copy
With Range("B13:D" & lzz + 10)
.PasteSpecial Paste:=xlPasteFormulas
.Copy
.PasteSpecial Paste:=xlPasteValues
End With
wenn du das so machst, solltest du dein Problem nicht haben, weil du ja das aktive Blatt nicht verlässt und somit auch nicht wieder neu aktivieren musst.
Sollte es sich nicht vermeiden lassen, dass du zwischendurch ein anderes Blatt aktivieren musst und dann wieder auf das alte Blatt zurück musst, kannst du das erneute Ausführen des Eventmarkos so verhindern:
Application.EnableEvents = False
Sheets("Ausgabe").Select
Application.EnableEvents = True
Gruß Daniel
Anzeige
AW: Makro nur einmal starten
19.12.2018 17:26:21
Peter
Danke Daniel. Ich muss in VBA noch viel lernen.
Gruß Peter
AW: Kingi100
19.12.2018 16:22:57
Sepp
Hallo Peter,
Private Sub Worksheet_Activate()

  On Error GoTo ErrorHandler
  
  If MsgBox("Daten aktualisieren ?", vbYesNo) = vbYes Then
    Application.EnableEvents = False
    Call Loeschen_1
  End If
 
ErrorHandler:
  Application.EnableEvents = True
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Kingi100
19.12.2018 16:47:38
Peter
Hallo Sepp, coole Lösung. Funktioniert.
Danke.
Gruß Peter
Dickes Lob an alle Helferlein. Bin immer wieder verblüfft, was ich leider nicht kann :-(

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige