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

Forumthread: Mehrere Tabs mit CommandButtons einmal aktivieren

Mehrere Tabs mit CommandButtons einmal aktivieren
12.10.2007 09:48:28
proxima05
Hallo,
ich habe eine Tabelle mit mehreren Blättern. In diesen Blättern (Blatt 1 bis 7) liegt jeweils eine Befehlsschaltfläche. Bisher habe ich zur Aktualisierung des jeweiligen Blattinhalts jedes Blatt geöffnet und die entsprechende Schaltfläche einzeln angeklickt; das wird jetzt aber ein bisschen lästig.
Deswegen würde ich gerne in einem weiteren Gesamtblatt eine Schaltfläche anlegen, die (nach Klick darauf) die jeweiligen Blätter "abgrast" und die dort liegenden Schaltflächen aktiviert. Als Code-Entwurf habe ich mal den folgenden angelegt:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Sheets("Tab1").Select
Application.Run "Code_der_auf_dem_dort-liegenden_Befehlsknopf_liegt"
Application.ScreenUpdating = False
Sheets("Tab2").Select
Application.Run "Code_der_auf_dem_dort-liegenden_Befehlsknopf_liegt"
Sheets("Gesamtblatt").Select
End Sub


Kann das so funktionieren und muss ich noch etwas beachten, da die Berechnung im jeweiligen Tabellenblatt ca. 30-45 Sekunden dauert.
Danke für einen Tipp und Hinweise, was ich evtl. falsch mache.
Gruß
Ralph

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Tabs mit CommandButtons einmal aktivie
12.10.2007 11:04:34
ChrisL
Hallo Ralph
Ich glaube da musst du etwas umstrukturieren, weil es sind "Private" Prozeduren d.h. die können nur aus dem gleichen Modul heraus gestartet werden (sonst wärs Public).
Wenn wir schon dabei sind, zeig mal das andere Makro. Steht in allen 7 Tabellenblättern das gleiche Makro drin? Vielleicht kann man die ganze Berechnung etwas beschleunigen und gleichzeitig das Private/Public Problem lösen.
Gruss
Chris

Anzeige
AW: Mehrere Tabs mit CommandButtons einmal aktivie
12.10.2007 13:26:57
proxima05
Chris,
in allen Tabs steht der gleiche Code drin (innerhalb des Codes ändert sich lediglich der Tab-Name), auch die Berechnungen sind allesamt identisch:
Der folgende Code liegt hinter dem Command Button

Private Sub UpdateVola_current_Click()
Dim objSh As Worksheet
Dim rng As Range, r As Range
Dim dblMax As Double, dblMin As Double
Dim varVola() As Variant
Dim intc As Integer
varVola = Array(10, 20, 30, 45, 90, 100)
Set objSh = Sheets("Tab1") 'Tabellenname anpassen!
With objSh
Set rng = .Range("A2:A" & Application.Max(.Cells(Rows.Count, 1).End(xlUp).Row, 2))
dblMax = Application.Max(rng)
dblMin = Application.Min(rng)
Do While dblMax > dblMin
Set r = rng.Find(what:=CDate(dblMax), LookIn:=xlFormulas, lookat:=xlWhole)
If Not r Is Nothing Then
For intc = 0 To 5
ThisWorkbook.Names("VolaPeriod").Value = varVola(intc)
.Calculate
.Cells(524 + intc, 16) = varVola(intc)
.Cells(524 + intc, 17) = r
.Cells(524 + intc, 18) = r.Offset(0, 8)
Next
Exit Do
End If
dblMax = dblMax - 1
Loop
End With
ThisWorkbook.Names("VolaPeriod").Value = 90
Set r = Nothing
Set rng = Nothing
Set objSh = Nothing
End Sub


Danke für einen Tipp.
Gruß
Ralph

Anzeige
AW: Mehrere Tabs mit CommandButtons einmal aktivie
13.10.2007 00:50:00
ChrisL
Hallo Ralph
OK, dann mach mal ein Standardmodul (nicht unter Worksheet sondern VBA-Editor, Einfügen, Modul). Dort erstellst du eine öffentliche Prozedur wie folgt:
' Standardmodul
Sub Update_a_Vola_current(objSh As Worksheet)
Dim rng As Range, r As Range
Dim dblMax As Double, dblMin As Double
Dim varVola() As Variant
Dim intc As Integer
varVola = Array(10, 20, 30, 45, 90, 100)
With objSh
Set rng = .Range("A2:A" & Application.Max(.Cells(Rows.Count, 1).End(xlUp).Row, 2))
dblMax = Application.Max(rng)
dblMin = Application.Min(rng)
Do While dblMax > dblMin
Set r = rng.Find(what:=CDate(dblMax), LookIn:=xlFormulas, lookat:=xlWhole)
If Not r Is Nothing Then
For intc = 0 To 5
ThisWorkbook.Names("VolaPeriod").Value = varVola(intc)
.Calculate
.Cells(524 + intc, 16) = varVola(intc)
.Cells(524 + intc, 17) = r
.Cells(524 + intc, 18) = r.Offset(0, 8)
Next
Exit Do
End If
dblMax = dblMax - 1
Loop
End With
ThisWorkbook.Names("VolaPeriod").Value = 90
Set r = Nothing
Set rng = Nothing
Set objSh = Nothing
End Sub


Der Tabellennamen wird nun nicht mehr innerhalb der Prozedur definiert, sondern an die Prozedur übergeben, das geht so...
' Klassenmodul Worksheet


Private Sub CommandButton1_Click()
Dim objSh As Worksheet
Set objSh = Worksheets("Tabelle1")
Call Update_a_Vola_current(objSh)
End Sub


Mehrere Blätter kannst du z.B. mit einer for..next Schleife ausführen...
' Standardmodul
Sub Do_all7()
Dim objSh As Worksheet
Dim i as Byte
For i = 1 To 7
Set objSh = Worksheets("Tabelle" & i)
Call Update_a_Vola_current(objSh)
Next i
End Sub


Und schliesslich noch wegen der Berechnungsdauer. Probier mal..
Sub DeineBerechnung()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
' Hier dein bestehender Code
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub


cu
Chris

Anzeige
Danke erstmal .... probiere es/melde mich (owT.)
13.10.2007 10:42:00
proxima05
...
;

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

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