Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1240to1244
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
Inhaltsverzeichnis

Umschaltflächen per VBA und zuordnen

Umschaltflächen per VBA und zuordnen
dave
Hallo zusammen.
Ich habe eine Tabelle mit sehr vielen Blättern. Auf einer Übersichtsseite erstelle ich eine Liste aller Blätter mit Hyperlink mit folgendem Code:
Private Sub Blattliste_Click()
Dim wks As Worksheet
Dim Zähler
GetMoreSpeed True
Range("A:B").ClearContents
Range("B:B").Hyperlinks.Delete
Zähler = 5
For Each wks In Worksheets
Zähler = Zähler + 1
Cells(Zähler, 1) = Zähler - 5
With Cells(Zähler, 2)
.Value = wks.Name
ActiveSheet.Hyperlinks.Add Anchor:=Cells(Zähler, 2), Address:="", _
SubAddress:="'" & wks.Name & "'!A1"
.Font.Size = 10
.HorizontalAlignment = xlLeft
End With
Next
GetMoreSpeed False
End Sub
Das funktioniert soweit auch wie gewünscht.
Nun würde ich gerne noch rechts neben jedem Blatt eine Schaltfläche haben wollen, mit der ich steuern kann, ob das Blatt aus- oder eingeblendet ist. Momentan habe ich manuell rechts daneben einen "Togglebutton" erstellt, der auf die darunter liegende Zelle verlinkt ist. Meine Idee ist, diese Zellen dann per Schleife abzufragen (WAHR/FALSCH) und dadurch die Sichtbarkeit zu steuern. Das würde ich auch hinbekommen.
Das Problem ist nun: Was mache ich, wenn weitere Blätter dazukommen? Wie kann ich evtl. in dem oben stehenden Makro die Button-Erstellung schon mit einbauen, damit ich das nicht hinterher manuell machen kann? Es sollen auch andere User diese Funktionalität nutzen können ohne VBA-Kenntnisse.
Mit der Erstellung von Steuerelementen per VBA und zuweisen bestimmter Eigenschaften hab ich bisher noch keine Erfahrung gemacht.
Geht das überhaupt und wenn ja, wie?
Gruß
David

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

Betreff
Benutzer
Anzeige
AW: Umschaltflächen per VBA und zuordnen
22.12.2011 17:33:57
Josef

Hallo David,
vielleicht so.
Private Sub Blattliste_Click()
  Dim wks As Worksheet
  Dim lngCounter As Long
  Dim objShp As Object
  
  GetMoreSpeed True
  
  Range("A:B").ClearContents
  Range("B:B").Hyperlinks.Delete
  
  For Each objShp In Me.Shapes
    If objShp.Name Like "XXX_shape_*" Then objShp.Delete
  Next
  
  lngCounter = 5
  
  For Each wks In Worksheets
    lngCounter = lngCounter + 1
    Cells(lngCounter, 1) = lngCounter - 5
    With Cells(lngCounter, 2)
      .Value = wks.Name
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(lngCounter, 2), Address:="", _
        SubAddress:="'" & wks.Name & "'!A1"
      .Font.Size = 10
      .HorizontalAlignment = xlLeft
    End With
    Set objShp = Me.CheckBoxes.Add(Cells(lngCounter, 3).Left, Cells(lngCounter, 1).Top - 1, Cells(lngCounter, 3).Width, Cells(lngCounter, 3).Height - 4)
    With objShp
      .Characters.Text = "Sichtbar"
      .Value = IIf(wks.Visible, 1, 0)
      .ShapeRange.AlternativeText = wks.Name
      .OnAction = Me.CodeName & ".hideSheet"
      .Name = "XXX_shape_" & lngCounter
    End With
  Next
  
  GetMoreSpeed False
  
  Set objShp = Nothing
End Sub


Sub hideSheet()
  Dim objShp As Shape
  Set objShp = Me.Shapes(Application.Caller)
  Sheets(objShp.AlternativeText).Visible = IIf(objShp.DrawingObject.Value <> 1, xlSheetHidden, xlSheetVisible)
  Set objShp = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Umschaltflächen per VBA und zuordnen
22.12.2011 17:48:03
dave
Hallo Josef,
aus Performance-Gründen bin ich doch dazu übergegangen, dies einfach durch eine Spalte daneben mit "Ja/Nein" zu realisieren. Jede Änderung einer Schaltfläche hat mehrere Sekunden Verzögerung zur Folge gehabt. Ich werde aber bei Gelegenheit deinen Code ausprobieren.
Danke und Gruß
David
AW: Umschaltflächen per VBA und zuordnen
22.12.2011 17:55:23
Reinhard
Hallo David,
In ein Standardmodul
Sub Aktualisieren()
Dim wks As Worksheet, Zähler As Integer, B
GetMoreSpeed True
With Worksheets("Tabelle1")
.Range("A:B").ClearContents
.Range("B:B").Hyperlinks.Delete
.Shapes.SelectAll
Selection.Delete
Zähler = 5
For Each wks In Worksheets
Zähler = Zähler + 1
.Cells(Zähler, 1) = Zähler - 5
With .Cells(Zähler, 2)
.Value = wks.Name
ActiveSheet.Hyperlinks.Add Anchor:=.Cells(Zähler, 2), Address:="", _
SubAddress:="'" & wks.Name & "'!A1"
.Font.Size = 10
.HorizontalAlignment = xlLeft
If wks.Name  "Tabelle1" Then
Set B = ActiveSheet.Buttons.Add(.Offset(0, 1).Left, .Top + 1, 80.25, .Height - 2) '. _
Select
With B
.Characters.Text = IIf(wks.Visible = True, "Ausblenden", "Einblenden")
.OnAction = "EinAusBlenden"
.Name = wks.Name
End With
End If
End With
Next wks
End With
GetMoreSpeed False
End Sub
Sub EinAusBlenden()
With Worksheets(Application.Caller)
.Visible = Not .Visible
End With
With Worksheets("Tabelle1").Shapes(Application.Caller).OLEFormat.Object
.Caption = IIf(.Caption = "Ausblenden", "Einblenden", "Ausblenden")
End With
End Sub

In "diesesArbeitsmappe"
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Call Aktualisieren
End Sub

Gruß
Reinhard
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige