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

Forumthread: Makro nur auf ein Tabellenblatt anwenden?

Makro nur auf ein Tabellenblatt anwenden?
Andreas
Salü
Das nachstehende Makro habe ich in einem Dokument gefunden. Leider läuft die Abfrage immer über alle, im Dokument angelegten Tabellenblätter. Ich möchte aber, dass die Abfrage nur im aktiven Tabellenblatt stattfindet. Was muss ich, wie anpassen?
Ich danke für die Hilfe.
Gruss Andreas
______________
Sub lernen()
On Error GoTo ende
For i = 1 To Worksheets.Count
Sheets(i).Activate
Columns("B:B").Hidden = True
Next
anzahl = InputBox("Geben Sie die Anzahl der abzufragenden Wörter an !")
r = 0
f = 0
For i = 1 To anzahl
A = zufall
Range(A).Select
deutsch = InputBox("Geben Sie die Übersetzung von '" & Range(A) & "' ein!")
If deutsch = ActiveCell.Offset(0, 1) Then
MsgBox ("Richtig!")
r = r + 1
ElseIf deutsch = "" Then Exit For
Else
MsgBox ("Falsch!, Richtig wäre '" & ActiveCell.Offset(0, 1) & "' gewesen")
f = f + 1
End If
Next
MsgBox ("Sie haben " & r & " richtige und " & f & " falsche Antworten gegeben.")
For i = 1 To Worksheets.Count
Sheets(i).Activate
Columns("A:B").Hidden = False
Next
ende:
For i = 1 To Worksheets.Count
Sheets(i).Activate
Columns("A:B").Hidden = False
Next
Sheets(1).Activate
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
entferne die For Next Schleifen
27.03.2011 19:18:08
Matthias
Hallo
also statt
 For i = 1 To Worksheets.Count
Sheets(i).Activate
Columns("A:B").Hidden = False
Next
einfach nur: Columns("A:B").Hidden = False
dann bezieht sich der Code immer aufs aktive Blatt.
So entfernst Du alle Schleifen mit (1 To Worksheets.Count)
und lässt nur den Code stehen, den Du brauchst.
Und bitte die Variablen deklarieren!
Gruß Matthias
Anzeige
AW: entferne die For Next Schleifen
27.03.2011 22:05:30
Andreas
Hallo Matthias, besten Dank für deine Hilfe
Was meinst du genau mit Variablen deklarieren? Im bestehenden Makro wurde dies nicht gemacht. Und meine VBA-Kenntnisse reichen wohl dafür nicht aus :-(
Was müsste ich denn genau machen?
Gruss Andreas
AW: entferne die For Next Schleifen
27.03.2011 22:47:05
Gerd
Hallo Andreas,
suche in der VBA-Hilfe nach "Datentypen", Dim-Anweisung", "Public-Anweisung".
Mache am besten nur an einer Kopie deiner Datei Versuche.
Gruß Gerd
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro nur auf ein Tabellenblatt anwenden


Schritt-für-Schritt-Anleitung

Um ein Makro so anzupassen, dass es nur auf ein aktives Tabellenblatt angewendet wird, folge diesen Schritten:

  1. Öffne den VBA-Editor mit ALT + F11.
  2. Suche das bestehende Makro, das du anpassen möchtest.
  3. Ersetze die For-Schleifen, die über alle Tabellenblätter iterieren, durch den direkten Zugriff auf das aktive Blatt.

Hier ist eine angepasste Version des ursprünglichen Makros:

Sub lernen()
    On Error GoTo ende
    ' Versteckt die Spalte B im aktiven Blatt
    Columns("B:B").Hidden = True

    anzahl = InputBox("Geben Sie die Anzahl der abzufragenden Wörter an!")
    r = 0
    f = 0

    For i = 1 To anzahl
        A = zufall
        Range(A).Select
        deutsch = InputBox("Geben Sie die Übersetzung von '" & Range(A) & "' ein!")
        If deutsch = ActiveCell.Offset(0, 1) Then
            MsgBox ("Richtig!")
            r = r + 1
        ElseIf deutsch = "" Then Exit For
        Else
            MsgBox ("Falsch!, Richtig wäre '" & ActiveCell.Offset(0, 1) & "' gewesen")
            f = f + 1
        End If
    Next

    MsgBox ("Sie haben " & r & " richtige und " & f & " falsche Antworten gegeben.")

    ' Blende die Spalten A und B wieder ein
    Columns("A:B").Hidden = False
    Sheets(1).Activate
ende:
End Sub

Häufige Fehler und Lösungen

  • Fehler: Makro wird auf allen Tabellenblättern ausgeführt.

    • Lösung: Entferne die Schleifen, die über alle Worksheets iterieren, und verwende stattdessen Columns("A:B").Hidden = False, um nur das aktive Blatt zu verändern.
  • Fehler: Fehlermeldung beim Ausführen des Makros.

    • Lösung: Stelle sicher, dass die Variablen deklariert sind. Mache dies am Anfang des Makros mit Dim r As Integer, f As Integer, anzahl As Integer.

Alternative Methoden

Eine andere Möglichkeit, das Makro nur für ein aktives Blatt auszuführen, ist die Verwendung einer Funktion, die die aktive Tabelle als Parameter akzeptiert. Hier ist ein Beispiel:

Sub lernenAktivesBlatt(ws As Worksheet)
    ws.Columns("B:B").Hidden = True
    ' Rest des Codes bleibt gleich
End Sub

Du kannst dann lernenAktivesBlatt ActiveSheet aufrufen, um das aktive Blatt zu bearbeiten.


Praktische Beispiele

Wenn du ein Makro für eine spezifische Aufgabe erstellen möchtest, z.B. das Verstecken von Spalten, könnte das so aussehen:

Sub VersteckeSpalte()
    ActiveSheet.Columns("C:C").Hidden = True
End Sub

Dieser Code versteckt die Spalte C nur im aktiven Blatt.


Tipps für Profis

  • Variablen deklarieren: Dies verbessert die Lesbarkeit und Wartbarkeit deines Codes. Nutze die Dim-Anweisung.
  • Fehlerbehandlung: Verwende On Error Resume Next, um das Makro nicht abrupt zu beenden.
  • Kommentare: Füge Kommentare in deinen Code ein, um die Funktionsweise zu erklären.

FAQ: Häufige Fragen

1. Wie deklariere ich Variablen in VBA?
Du kannst Variablen mit der Dim-Anweisung deklarieren, z.B. Dim r As Integer.

2. Was ist der Unterschied zwischen ActiveSheet und Sheets(i)?
ActiveSheet bezieht sich auf das derzeit ausgewählte Blatt, während Sheets(i) ein spezifisches Blatt in der Arbeitsmappe anspricht.

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