Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro nur im aktivem Sheet ausführen

Makro nur im aktivem Sheet ausführen
04.08.2017 13:13:09
torro100
Hallo Zusammen,
ich erstelle eine Toolbar mit 4 Einträgen, die für alle Tabellenblätter gelten sollen. Wenn ich eines der Makros auswähle, soll dies aber nur auf das gerade aktive Sheet angewendet werden.
Auf ein namentlich genanntes Sheet (x86_..) funktioniert es ohne Probleme.
Hier der Code:
Sub create_offer()
Dim wks As Worksheet
Dim blatt As String
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Application.DisplayAlerts = False
blatt = "offer"
For Each wks In ActiveWorkbook.Worksheets
If wks.Name = blatt Then
Sheets(blatt).Delete
End If
Next
Worksheets.Add.Move After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = blatt
Application.DisplayAlerts = True
With Worksheets("x86_Power_middleware")
ZeileMax = .UsedRange.Rows.Count
n = 1
For Zeile = 1 To ZeileMax
If .Cells(Zeile, 2).Value = "1" Then
.Rows(Zeile).Copy
Worksheets("offer").Rows(n).PasteSpecial Paste:=xlPasteValues
Worksheets("offer").Rows(n).PasteSpecial Paste:=xlPasteFormats
n = n + 1
End If
Next Zeile
End With
Worksheets("offer").Activate
'ActiveWorkbook.Worksheets("offer").Columns("B").Delete
ActiveWorkbook.Worksheets("offer").Columns("A:M").EntireColumn.AutoFit
ActiveWorkbook.Worksheets("offer").Cells.ClearOutline
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro nur im aktivem Sheet ausführen
04.08.2017 13:24:33
ChrisL
Hi
Ich weiss nicht ob ich dich richtig verstehe, aber
With Worksheets("x86_Power_middleware")
ersetzen durch...
With ActiveSheet
cu
Chris
AW: Makro nur im aktivem Sheet ausführen
04.08.2017 13:43:16
torro100
Hi Chris,
das hatte ich auch schon versucht. Er erstellt mir dann zwar das neue Blatt "Offer",
kopiert dort aber die Werte nicht hinein.
Das macht es jedoch, wenn ich den Namen angebe.
vg
Mike
Anzeige
AW: Makro nur im aktivem Sheet ausführen
04.08.2017 13:50:29
ChrisL
Hi Mike
Ja jetzt sehe ich das Problem. Im entscheidenden Moment ist das Blatt "offer" aktiv.
Am Anfang vom Code:
Dim WS As Worksheet
Set WS = ActiveSheet
und dann unten...
With WS
cu
Chris
AW: Makro nur im aktivem Sheet ausführen
04.08.2017 14:30:53
Mike
top, das wars....DANKE.
AW: Makro nur im aktivem Sheet ausführen
04.08.2017 14:58:30
Mike
Hi Chris, noch eine bescheidene Frage:
Hiermit wird meine Toolbar erstellt.
In anderern Dateien klappt das, hier bekomme ich immer eine Debugg Meldung
und ".Name = ToolBarName" ist markiert.
Ich finde aber keine Fehler.
danke und vg
Mike
Sub CreateMenubar()
Dim iCtr As Long
Dim MacNames As Variant
Dim CapNamess As Variant
Dim TipText As Variant
MacNames = Array("create_offer", _
"add_to_offer", _
"save")
CapNamess = Array("create offer", _
"add to offer", _
"save")
With Application.CommandBars.Add
.Name = ToolBarName
.Left = 1000
.Top = 50
.Protection = msoBarNoProtection
.Visible = True
.Position = msoBarTop
For iCtr = LBound(MacNames) To UBound(MacNames)
With .Controls.Add(Type:=msoControlButton)
.BeginGroup = True
.OnAction = "'" & ThisWorkbook.Name & "'!" & MacNames(iCtr)
.Caption = CapNamess(iCtr)
.Style = msoButtonCaption
.FaceId = 71 + iCtr
'.TooltipText = TipText(iCtr)
End With
Next iCtr
End With
End Sub

Anzeige
AW: Makro nur im aktivem Sheet ausführen
04.08.2017 15:48:30
ChrisL
Hi Mike
.Name = "Text-String"
oder mit Variable
Sub CreateMenubar()
Dim iCtr As Long
Dim MacNames As Variant
Dim CapNamess As Variant
Dim TipText As Variant
Dim ToolBarName As String
MacNames = Array("create_offer", _
"add_to_offer", _
"save")
CapNamess = Array("create offer", _
"add to offer", _
"save")
ToolBarName = "MeineBlablaToolBar"
With Application.CommandBars.Add
.Name = ToolBarName
.Left = 1000
.Top = 50
.Protection = msoBarNoProtection
.Visible = True
.Position = msoBarTop
For iCtr = LBound(MacNames) To UBound(MacNames)
With .Controls.Add(Type:=msoControlButton)
.BeginGroup = True
.OnAction = "'" & ThisWorkbook.Name & "'!" & MacNames(iCtr)
.Caption = CapNamess(iCtr)
.Style = msoButtonCaption
.FaceId = 71 + iCtr
'.TooltipText = TipText(iCtr)
End With
Next iCtr
End With
End Sub

cu
Chris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Makro nur im aktiven Sheet ausführen


Schritt-für-Schritt-Anleitung

Um ein Excel VBA Makro auszuführen, das nur im aktiven Tabellenblatt arbeitet, folge diesen Schritten:

  1. Visual Basic for Applications (VBA) öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle Einfügen > Modul.

  3. Code anpassen: Verwende den folgenden Code als Vorlage, um sicherzustellen, dass das Makro nur im aktiven Blatt ausgeführt wird:

    Sub create_offer()
        Dim WS As Worksheet
        Set WS = ActiveSheet  ' Verwende set ws = activesheet
    
        Dim blatt As String
        blatt = "offer"
    
        ' Überprüfen, ob das Blatt "offer" existiert und löschen
        On Error Resume Next
        Application.DisplayAlerts = False
        Worksheets(blatt).Delete
        Application.DisplayAlerts = True
        On Error GoTo 0
    
        ' Neues Blatt erstellen
        Worksheets.Add.Name = blatt
    
        Dim ZeileMax As Long
        Dim n As Long
        n = 1
    
        ' Werte kopieren
        With WS
            ZeileMax = .UsedRange.Rows.Count
            For Zeile = 1 To ZeileMax
                If .Cells(Zeile, 2).Value = "1" Then
                    .Rows(Zeile).Copy
                    Worksheets(blatt).Rows(n).PasteSpecial Paste:=xlPasteValues
                    Worksheets(blatt).Rows(n).PasteSpecial Paste:=xlPasteFormats
                    n = n + 1
                End If
            Next Zeile
        End With
    
        ' Formatierung
        Worksheets(blatt).Columns("A:M").EntireColumn.AutoFit
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: Werte werden nicht kopiert
    Lösung: Stelle sicher, dass die Referenz auf das aktive Blatt korrekt gesetzt ist. Verwende Set WS = ActiveSheet wie im obigen Code beschrieben.

  • Fehler: Blatt kann nicht gefunden werden
    Lösung: Überprüfe den Namen des Arbeitsblatts, das du löschen oder erstellen möchtest. Achte darauf, dass keine Tippfehler vorhanden sind.


Alternative Methoden

Eine alternative Methode, um sicherzustellen, dass dein Makro nur auf das aktive Blatt zugreift, besteht darin, die direkte Verwendung von ActiveSheet in deinem Code zu vermeiden und stattdessen den Worksheet-Objekt-Referenzierer zu verwenden. Zum Beispiel:

Dim WS As Worksheet
Set WS = ActiveSheet

Das sorgt dafür, dass du immer mit dem aktuell aktiven Blatt arbeitest, egal, welches Blatt zuvor aktiv war.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie das Makro auf einem aktiven Blatt arbeitet:

Sub BeispielMakro()
    Dim WS As Worksheet
    Set WS = ActiveSheet
    WS.Cells(1, 1).Value = "Hallo Welt!"  ' Setzt den Wert in Zelle A1 des aktiven Blatts
End Sub

Du kannst diesen Code anpassen, um verschiedene Aktionen im aktiven Blatt durchzuführen, z.B. das Kopieren von Daten, das Formatieren von Zellen usw.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um sicherzustellen, dass dein Makro bei Fehlern nicht abrupt stoppt.
  • Optimierung: Setze Application.ScreenUpdating = False zu Beginn und Application.ScreenUpdating = True am Ende deines Makros, um die Ausführungsgeschwindigkeit zu erhöhen.
  • Dokumentation: Kommentiere deinen Code, um die Lesbarkeit und Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Kann ich mehrere Blätter gleichzeitig bearbeiten?
Nein, das Makro wird nur im aktuell aktiven Blatt ausgeführt. Du müsstest eine Schleife implementieren, um mehrere Blätter zu bearbeiten.

2. Wie kann ich das Makro schneller machen?
Reduziere die Anzahl der Bildschirmaktualisierungen und verwende effizientere Schleifen, um die Ausführung zu beschleunigen.

3. Was sind die Vorteile von ActiveSheet?
Die Verwendung von ActiveSheet ermöglicht es dir, flexibel mit dem Blatt zu arbeiten, das gerade ausgewählt ist, was besonders nützlich ist, wenn du mehrere Blätter hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige