Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
912to916
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
912to916
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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
...

162 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige