Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
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

Makro vereinfachen

Makro vereinfachen
29.04.2013 16:16:40
Ulf
Moin, moin
ich weiß nicht, ob ich so etwas fragen darf oder mir dabei geholfen wird.
Ich bin dabei meine Vorlage umzugestalten und habe mit meinem Makro angefangen.
Im wesentlichen geht es darum durch anklicken der Optionsbutton (activeX Steuerelemente) Blätter und Zeilen in anderen Blättern aus-/ einzublenden.
Für die Buttons "FLx50C" bis "FL020C" habe ich bereits angefangen.
Eine gewisse Struktur ist glaube ich zu erkennen.
Da sich einiges wiederholt, bzw sich nur Nuancen ändern wollte ich gerne wissen ob man das Makro auch anders und damit einfacher schreiben kann.
Ich habe die Datei angehängt, weil ich nicht das ganze Makro posten wollte.
mfG
Ulf
https://www.herber.de/bbs/user/85126.xls

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro vereinfachen
30.04.2013 03:18:54
fcs
Hallo Ulf,
man kann für die Hauptaktionen (Blätter ein-/ausblenden, Zeilen ein-/ausblenden) Unterprozeduren Schreiben, an die der Visible-Status bzw. die auszublenden Zeilenbereich als Parameter ünergeben werden.
Sieht dann z.B. wie folgt aus.
Gruß
Franz
Private Sub Sheets_Visible(Optional LE1 As Boolean, Optional LE2 As Boolean, _
Optional LE3 As Boolean, Optional LE4 As Boolean, Optional Combiner As Boolean)
'Ein-/Ausblenden der Tabellenblätter.
'Parameter muss nur für die einzublendenden Blätter mit Wert True übergeben werden.
Sheets("P&Xtalk_LE1").Visible = LE1
Sheets("P&Xtalk_LE2").Visible = LE2
Sheets("P&Xtalk_LE3").Visible = LE3
Sheets("P&Xtalk_LE4").Visible = LE4
Sheets("Combiner").Visible = Combiner
End Sub
Private Sub SerNr_RowsHide(arrRows As Variant)
'Zeilen ausblenden in Blatt "Ser.Nr."
'in arrRows wird ein Array mit den auszublendenden Zeilennummern übergeben
'wird Array("0") als Wert für arrRows übergeben, dann werden alle Zeilen eingeblendet.
Dim intI As Integer
With Sheets("Ser.Nr.")
.Rows.Hidden = False
If arrRows(LBound(arrRows))  "0" Then
For intI = LBound(arrRows) To UBound(arrRows)
.Rows(arrRows(intI)).Hidden = True
Next intI
End If
End With
End Sub
Private Sub Ein_Aublenden(strOption As String)
'Tabellenblätter und Zeilen im Blatt "Ser.Nr." werden ein- bzw. ausgeblendet.
Application.ScreenUpdating = False
Select Case strOption
Case "FL010C"
Call Sheets_Visible(LE1:=True)
Call SerNr_RowsHide(Array("9:10", "16:18", "21:100", "131:220"))
Case "FL020C"
Call Sheets_Visible(LE1:=True, LE2:=True, Combiner:=True)
Call SerNr_RowsHide(Array("9:10", "16:16", "23:38", "41:100", "161:220"))
Case "FLx50C"
Call Sheets_Visible(LE1:=True)
Call SerNr_RowsHide(Array("9:10", "16:18", "21:100", "119:220"))
Case "FLx75C"
Call Sheets_Visible(LE1:=True)
Call SerNr_RowsHide(Array("9:10", "16:18", "21:100", "125:220"))
Case Else
MsgBox "Für die Option " & strOption & " wurde noch keine Case-Anweisung definiert!", _
vbInformation + vbOKOnly, "Makro- Ein_Ausblenden"
End Select
Application.ScreenUpdating = True
End Sub
Private Sub OptionButton8_Change()
'FLx50C
Call Ein_Aublenden(strOption:="FLx50C")
End Sub
Private Sub OptionButton9_Change()
'FLx75C
Call Ein_Aublenden(strOption:="FLx75C")
End Sub
Private Sub OptionButton10_Change()
'FL010C
Call Ein_Aublenden(strOption:="FL010C")
End Sub
Private Sub OptionButton11_Change()
'FL020C
Call Ein_Aublenden(strOption:="FL020C")
End Sub

Anzeige
AW: Makro vereinfachen
30.04.2013 08:16:35
Ulf
Danke
für die Mühe und die Erklärungen,
der Code gefällt mir (weil übersichtlicher) und ich habe was dazugelernt.
Gruß
Ulf

AW: Makro vereinfachen
30.04.2013 13:54:49
fcs
Hallo Ulf,
vielen Dank für die Antwort.
Du könntest dir das Leben bei der Programmierung noch etwas erleichtern, wenn du statt der Optionsschaltflächen in den Spalten jeweils eine Listbox verwenden würdest. Statt 6 oder 8 Change-Prozeduren für entsprechend viele Optionsbuttons hättest du dann nur ein Prozedur für die Listbox. Auch die Wertzuweisung zu einer Zelle z.B. E1 ist dann einfacher. Du benötigst dort keine Formel.
Gruß
Franz

Anzeige
AW: Makro vereinfachen - Spalten vergessen
30.04.2013 14:23:48
Ulf
@Franz
Diese Überlegung hatte ich auch, aber der Mensch ist ein Gewohnheitstier.
Und bevor ich mich mit 11 Kollegen streite, lasse ich das bei den Optionsbuttons.
Trotzdem stecke ich gerade fest. Ich habe meine Spalten vergessen auszublenden.
Ich habe das Rows durch Column ersetzt. Was natürlich nicht geklappt hat.
Muss ich da komplett anders vorgehen?
Danke
Private Sub SerNr_RowsHide(arrRows As Variant)
'Zeilen ausblenden in Blatt "Ser.Nr."
'in arrRows wird ein Array mit den auszublendenden Zeilennummern übergeben
'wird Array("0") als Wert für arrRows übergeben, dann werden alle Zeilen eingeblendet.
Dim intI As Integer
With Sheets("Ser.Nr.")
.Rows.Hidden = False
If arrRows(LBound(arrRows))  "0" Then
For intI = LBound(arrRows) To UBound(arrRows)
.Rows(arrRows(intI)).Hidden = True
Next intI
End If
End With
End Sub

Private Sub LeistDaten_ColumnsHide(arrColumn As Variant)
'Spalten ausblenden in Blatt "Leist.Daten"
Dim intI As Integer
With Sheets("Leist.Daten")
.Columns.Hidden = False
If arrColumn(LBound(arrColumn))  "0" Then
For intI = LBound(arrColumn) To UBound(arrColumn)
.Column(arrColumn(intI)).EntireColumn.Hidden = True
Next intI
End If
End With
End Sub
Die Tabelle habe ich ebenfalls angefügt.
Gruß
Ulf
https://www.herber.de/bbs/user/85147.xls

Anzeige
.Range(arr... , statt .Colun(arr... (owT)
30.04.2013 14:38:04
EtoPHG

AW: Makro vereinfachen - Spalten vergessen
01.05.2013 03:25:15
fcs
Hallo Ulf,
Spalten kann man entweder über das Columns-Objekt ansprechen
.Columns(10)
oder über das Range-Objekt
dann so
.Range("I:J")
oder so
.Range(.Columns(9), .Columns(10))
Nachfolgend das Makro zum Ausblenden der Spalten etwas allgemeiner, so dass es beide Varianten verarbeitet.
Private Sub LeistDaten_ColumnsHide(arrColumn As Variant)
'Spalten ausblenden in Blatt "Leist.Daten"
'Die Spalten können im Array einzeln als Nummer oder als Bereich mit den Spaltenbuch- _
staben übergeben werden
'Beispiel für Sub-Aufruf
'Call LeistDaten_ColumnsHide(arrColumn:=Array(9, 10, "L:L", "N:P")
Dim intI As Integer
With Sheets("Leist.Daten")
.Columns.Hidden = False
If arrColumn(LBound(arrColumn))  "0" Then
For intI = LBound(arrColumn) To UBound(arrColumn)
If IsNumeric(arrColumn(intI)) Then
.Columns(arrColumn(intI)).Hidden = True
Else
.Range(arrColumn(intI)).EntireColumn.Hidden = True
End If
Next intI
End If
End With
End Sub

Die Makros für alle Optionbuttons müssen auch etwas angepasst werden, damit der Ablauf korrekt wird.
Es muss jeweils geprüft werden, ob der Zustand der Optionsschaltfläche True ist.
Beispiel:
Private Sub OptionButton20_Change()
'1-Wege
If Me.OptionButton20 = True Then Call Ein_Aublenden(strOption:="1-Wege")
End Sub
Gruß
Franz

Anzeige
AW: Makro vereinfachen - so ist schön
02.05.2013 13:25:47
Ulf
Moin, moin
@Franz
ich kann "nur" Danke für deine Hilfe sagen bzw. ick freu mir wie Bolle das det allet klappt :-)
vor allem wenn man eine Antwort um 3:30 bekommt - ich schlafe da immer
Im Blatt "Leist.Daten" habe ich jetzt auch eine Kombination aus Spalten und Zeilen ausblenden, die ich wie folgt gelöst habe:
Private Sub LeistDaten_RowsHide(arrRows As Variant)
'Zeilen ausblenden in Blatt "Leist.Daten"
Dim intI As Integer
With Sheets("Leist.Daten")
.Rows.Hidden = False
If arrRows(LBound(arrRows))  "0" Then
For intI = LBound(arrRows) To UBound(arrRows)
.Rows(arrRows(intI)).Hidden = True
Next intI
End If
End With
End Sub

Private Sub LeistDaten_ColumnsHide(arrColumn As Variant)
'Spalten ausblenden in Blatt "Leist.Daten"
Dim intI As Integer
With Sheets("Leist.Daten")
.Columns.Hidden = False
If arrColumn(LBound(arrColumn))  "0" Then
For intI = LBound(arrColumn) To UBound(arrColumn)
.Range(arrColumn(intI)).EntireColumn.Hidden = True
Next intI
End If
End With
End Sub
aus reiner Neugier - wäre das auch kürzer gegangen - ich glaube nein
Gruß
Ulf
https://www.herber.de/bbs/user/85165.xls

Anzeige
AW: Makro vereinfachen - so ist schön
02.05.2013 15:34:27
fcs
Hallo Ulf,
du kannst die beiden Makros auch zu einem Makro zusammenfassen. Dann müssen halt zwei Paramater (Array für Zeilen, Array für Spalten) an die Prozedur übergeben werden.
Gruß
Franz
Private Sub LeistDaten_ColRowsHide(arrRows As Variant, arrColumn As Variant)
'Zeilen ausblenden in Blatt "Leist.Daten"
Dim intI As Integer
With Sheets("Leist.Daten")
.Rows.Hidden = False
If arrRows(LBound(arrRows))  "0" Then
For intI = LBound(arrRows) To UBound(arrRows)
.Rows(arrRows(intI)).Hidden = True
Next intI
End If
.Columns.Hidden = False
If arrColumn(LBound(arrColumn))  "0" Then
For intI = LBound(arrColumn) To UBound(arrColumn)
.Range(arrColumn(intI)).EntireColumn.Hidden = True
Next intI
End If
End With
End Sub

Anzeige
AW: Makro vereinfachen - perfek - 1000Dank owT
03.05.2013 07:48:27
Ulf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige