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

Forumthread: Ein Makro für mehrere Tabellenblätter

Ein Makro für mehrere Tabellenblätter
11.08.2004 14:40:05
Claudi
Hallo,
mein Problem ist es das ich mehrere tabellenblätter habe, welche alle die gleich Funktion haben nur mit unterschiedlichen Werten. Deshalb würde ich gerne ein und das selbe Makro darüber laufen lassen.
Habe das auch schon probiert aber er macht das ganze immer nur für das erste tabellenblatt und nicht für alle anderen.
Habe es wie folgt probiert

Sub test()
Call Berechnung("Tab1")
Call Berechnung("Tab2")
End Sub


Sub Berechnung(TabName as String)
Warum funktioniert das nicht, warum aktiviert er immer nur die erste Tabelle und die anderen bleiben außen vor.
Gruß Claudi

		
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ein Makro für mehrere Tabellenblätter
geri
Hallo Claudi
zeig doch mal den Code von Berechnung
es kann dir sicher geholfen werden
gruss geri
AW: Ein Makro für mehrere Tabellenblätter
11.08.2004 14:53:02
Claudi

Sub KorrBerechnung(TabName as String)
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim runterAnzahl As Integer
Dim rechtsAnzahl As Integer
Dim runterAnzahlRendite As Integer
Dim WS5 As Worksheet
Dim Zeitpunkte As Variant
Dim SpaltenId As Integer
Dim SumProd As Double
Dim Summe As Double
Dim s As Double
Dim StandAbw As Double
Dim Varianz As Double
Dim StandAbwKorrel As Double
Dim Korrel As Double
Dim Sum As Double
'Mappe1 aktivieren
'Workbooks("Zinsstrukturkurven.xls").Activate
'Tabelle1 aktivieren
SpaltenId = 14
Zeitpunkte = Array((1 / 12), 0.25, 0.5, 1, 2, 3, 4, 5, 7, 9, 10, 15, 20, 30)
'Gibt die Anzahl der Werte nach unten aus
runterAnzahl = Range("A8", Range("A8").End(xlDown)).Count
'Berechnen alle Renditen die unter einem Jahr liegen
For i = 1 To 3 Step 1
For j = 8 To 257 Step 1
Cells(j, i + 15) = Zeitpunkte(i - 1) * _
Application.WorksheetFunction.Ln((1 + (Cells(j + 1, i)) / 100) / (1 + (Cells(j, i)) / 100))
Next j
Next i
'Berechnet alle Renditen die über einem Jahr liegen
runterAnzahlRendite = Range("P8", Range("P8").End(xlDown)).Count
For i = 4 To 14 Step 1
For j = 8 To 257 Step 1
If Cells(j, i) <> "#N/A The record could not be found" Then
Cells(j, i + 15) = Zeitpunkte(i - 1) * ((Cells(j + 1, i)) / 100 - (Cells(j, i)) / 100)
End If
Next j
Next i
'Worksheets("Start").Activate
'MsgBox "Aktualisierung der Renditen, Standardabaweichungen und Korrelationen erfolgreich beendet!"
rechtsAnzahl = Range("P8", Range("P8").End(xlToRight)).Count
'Berechnung der Standardabweichung
For i = 16 To rechtsAnzahl + 15 Step 1
For k = 8 To (runterAnzahlRendite + 7) Step 1
s = Summe
SumProd = (CStr(Cells(k, i)) * CStr(Cells(k, i)))
Summe = SumProd + s
Next k
Sum = Summe / runterAnzahlRendite
StandAbw = Sqr(Sum)
'Summe muss wieder auf Null gesetzt werden, da ansonsten die Summe der vorher
'ausgeführten Berechnung mit dazu gerechnet würde
' Übergibt die berechneten Werte in das Tabellenblatt
Cells(3, i + 16) = StandAbw
'Varianz berechnen
Varianz = Sum
Cells(4, i + 16) = Varianz
Summe = 0
Next i
'Berechnung der Korrelation
For i = 16 To rechtsAnzahl + 15 Step 1
'Schleife geht auch nach rechts, aber häufiger
For j = 16 To rechtsAnzahl + 15 Step 1
'Schleife liest die Zeilen nach unten hin aus und es wird multipliziert
'und anschließend addiert
For k = 8 To (runterAnzahlRendite + 7) Step 1
s = Summe
SumProd = (CStr(Cells(k, i))) * (CStr(Cells(k, j)))
Summe = SumProd + s
Next k
Sum = Summe / runterAnzahlRendite
StandAbwKorrel = (CStr(Cells(3, i + 16)) * CStr(Cells(3, j + 16)))
Korrel = Sum / StandAbwKorrel
'Summe muss wieder auf Null gesetzt werden, da ansonsten die Summe der vorher
'ausgeführten Berechnung mit dazu gerechnet würde
Summe = 0
' Übergibt die berechneten Werte in das Tabellenblatt
Cells(j - 8, i + 16) = Korrel
Next j
Next i
End Sub

Anzeige
AW: Ein Makro für mehrere Tabellenblätter
PeterW
Hallo Claudi,
warum baust du nicht eine Schleife um dein Makro? Mal ein ganz einfaches Beispiel:

Sub Schleife_ueber_alle_Blaetter()
Dim wks As Worksheet
For Each wks In Worksheets
MsgBox wks.Name
Next
End Sub

Gruß
Peter
AW: Ein Makro für mehrere Tabellenblätter
11.08.2004 14:55:10
Claudi
Ich habe noch andere Tabelleblätter in der Mappe die nicht davon betroffen sind. Da kann ich das ganze nicht mit "For Each" lösen.
Gruß Claudi
Anzeige
AW: Ein Makro für mehrere Tabellenblätter
PeterW
Hallo Claudi,
gehen täte das schon mit einer einfach If-Bedingung.
Gruß
Peter
AW: Ein Makro für mehrere Tabellenblätter
11.08.2004 14:59:15
Claudi
Du meinst, so dass ich alle anderen Tabellenblätter mit der If-Bedingung ausschließe, ok ich werd das mal probieren.
Danke Gruß Claudi
AW: Ein Makro für mehrere Tabellenblätter
11.08.2004 15:16:51
Claudi
Hi Peter,
es funktioniert mit der If-Bedingung nicht, vielleicht kannst du mir ja mal etwas Code angeben, habe keine Ahnung mehr wie ich das realisieren soll.
Gruß Claudi
Anzeige
AW: Ein Makro für mehrere Tabellenblätter
PeterW
Hallo Claudi,
mal ein einfaches Beispiel:

Sub mehrere_Blaetter()
Dim wks As Worksheet
Dim arrSheets As Variant
Dim iShCount As Integer
arrSheets = Array("Tabelle1", "Tabelle2", "Tabelle5")
For Each wks In Worksheets
For iShCount = 0 To UBound(arrSheets)
If wks.Name = arrSheets(iShCount) Then
'hier der Code
'auf richtige Referenzierung achten
With wks
MsgBox .Range("A1")
End With
End If
Next
Next
End Sub

Gruß
Peter
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro für mehrere Tabellenblätter in Excel


Schritt-für-Schritt-Anleitung

Um ein Makro für mehrere Tabellenblätter in Excel erfolgreich zu erstellen, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Rechtsklicke im Projektfenster und wähle Einfügen > Modul.
  3. Füge den Code ein:

    • Verwende den folgenden Beispielcode, um über bestimmte Tabellenblätter zu iterieren:
    Sub mehrere_Blaetter()
       Dim wks As Worksheet
       Dim arrSheets As Variant
       Dim iShCount As Integer
    
       arrSheets = Array("Tabelle1", "Tabelle2", "Tabelle5") ' Liste der relevanten Blätter
    
       For Each wks In Worksheets
           For iShCount = 0 To UBound(arrSheets)
               If wks.Name = arrSheets(iShCount) Then
                   ' Hier der Code, der auf das Tabellenblatt angewendet werden soll
                   With wks
                       MsgBox .Range("A1") ' Beispiel: Werte aus Zelle A1 anzeigen
                   End With
               End If
           Next iShCount
       Next wks
    End Sub
  4. Anpassen der Liste:

    • Ändere die Namen in arrSheets, um die Tabellenblätter anzupassen, die du bearbeiten möchtest.
  5. Führe das Makro aus:

    • Schließe den VBA-Editor und drücke ALT + F8, um das Makro auszuführen.

Häufige Fehler und Lösungen

  • Fehler: Makro funktioniert nur auf dem ersten Tabellenblatt:

    • Ursache: Du hast möglicherweise keine Schleife implementiert. Stelle sicher, dass du die Schleife wie im obigen Beispiel verwendest.
  • Lösung: Überprüfe die Blattnamen:

    • Achte darauf, dass die Namen der Tabellenblätter genau mit denen in deinem Code übereinstimmen.
  • Fehler: Makro wird nicht ausgeführt:

    • Ursache: Möglicherweise ist die Makrosicherheitseinstellung zu hoch. Gehe in Excel zu Datei > Optionen > Sicherheitscenter und ändere die Einstellungen.

Alternative Methoden

  1. Verwendung von For Each: Du kannst auch die For Each-Schleife verwenden, um alle Blätter zu durchlaufen. Beispiel:

    Sub Schleife_ueber_alle_Blaetter()
       Dim wks As Worksheet
       For Each wks In Worksheets
           ' Hier der Code, der für jedes Blatt ausgeführt wird
           MsgBox wks.Name
       Next wks
    End Sub
  2. Verwendung von If-Bedingungen: Mit einer If-Bedingung kannst du spezifische Blätter auswählen und andere ignorieren.


Praktische Beispiele

  • Berechnung für mehrere Tabellenblätter: Wenn du eine Berechnung für bestimmte Tabellenblätter durchführen möchtest, kannst du den Code für die Berechnung in die Schleife einfügen:

    Sub Berechnung()
       Dim wks As Worksheet
       For Each wks In Worksheets
           If wks.Name = "Tabelle1" Or wks.Name = "Tabelle2" Then
               ' Führe die Berechnung hier aus
               wks.Range("B1").Value = wks.Range("A1").Value * 2 ' Beispiel: Verdopple den Wert in A1
           End If
       Next wks
    End Sub

Tipps für Profis

  • Optimierung des Codes:

    • Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms während der Ausführung zu vermeiden.
  • Debugging:

    • Setze Haltepunkte im VBA-Editor, um den Code Schritt für Schritt zu durchlaufen und Fehler zu identifizieren.
  • Modularer Code:

    • Gliedere deinen Code in verschiedene Subroutinen, um die Lesbarkeit und Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich ein Makro nur für bestimmte Blätter ausführen?
Du kannst eine If-Bedingung verwenden, um nur die gewünschten Blätter auszuwählen, wie im Beispiel oben gezeigt.

2. Was mache ich, wenn mein Makro auf andere Blätter zugreifen soll?
Du kannst die Namen der Blätter in das Array arrSheets einfügen, um sicherzustellen, dass nur die relevanten Blätter bearbeitet werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige