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

2 VBA Befehle in einem Worksheet

2 VBA Befehle in einem Worksheet
Reinhardt
Liebe Excelgemeinde,
ich habe ein (hoffentlich) einfaches Problem:
Ich habe eine VBA Code, der mir bestimmte Werte anzeigt, Name: Gültigkeitsliste / Filterdropdown
sitzt in "Q5".
Nun soll im selben Tabellenblatt ein zweiter Filter reingesetzt werden (Zelle "S5"), der zusätzlich nach einem andere Kriterium filtern soll. Ich habe dazu naiverweise einfach den funktionierenden VBA Code nochmals kopiert und die Zellenbezüge geändert und alle Namen um eine 1 ergänzt...
Nun meckert Excel, unter dem "end sub" darf kein weiter VBA code stehen...
Aber das war wohl zu einfach gedacht?..könnt Ihr mir weiterhelfen?
Danke im Voraus!
Reini
Option Explicit
Private Sub Gueltigkeitsliste()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long
Set Dic = CreateObject("Scripting.Dictionary")
Arr = Range("C35", Cells(Rows.Count, 3).End(xlUp))
Dic("") = 0
For L = 1 To UBound(Arr)
If Not IsError(Arr(L, 1)) Then
If Arr(L, 1)  "" Then
Dic(Arr(L, 1)) = 0
End If
End If
Next
strFilterText = Join(Dic.keys, ",")
With Range("Q5").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=strFilterText
End With
End Sub
Private Sub Worksheet_Activate()
Call Gueltigkeitsliste
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rZelle As Range
With Application
.EnableEvents = False
For Each rZelle In Target
If rZelle.Address = "$Q$5" And rZelle.Cells.Count = 1 Then
If Target  "" Then
Range("C35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row).AutoFilter 1, Range("Q5" _
_
), , , False
Else
If ActiveSheet.FilterMode Then
Range("C35").AutoFilter
End If
End If
ElseIf Not Intersect(rZelle, Range("C35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row))   _
_
Is Nothing Then
Call Gueltigkeitsliste
End If
Next rZelle
.EnableEvents = True
End With
End Sub
Option Explicit
Private Sub Gueltigkeitsliste1()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long
Set Dic = CreateObject("Scripting.Dictionary")
Arr = Range("AC35", Cells(Rows.Count, 29).End(xlUp))
Dic("") = 0
For L = 1 To UBound(Arr)
If Not IsError(Arr(L, 1)) Then
If Arr(L, 1)  "" Then
Dic(Arr(L, 1)) = 0
End If
End If
Next
strFilterText = Join(Dic.keys, ",")
With Range("S5").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=strFilterText
End With
End Sub
Private Sub Worksheet_Activate1()
Call Gueltigkeitsliste1
End Sub
Private Sub Worksheet_Change1(ByVal Target As Range)
Dim rZelle As Range
With Application
.EnableEvents = False
For Each rZelle In Target
If rZelle.Address = "$S$5" And rZelle.Cells.Count = 1 Then
If Target  "" Then
Range("AC35:AC" & Cells.SpecialCells(xlCellTypeLastCell).Row).AutoFilter 1, Range("  _
_
S5"), , , False
Else
If ActiveSheet.FilterMode Then
Range("AC35").AutoFilter
End If
End If
ElseIf Not Intersect(rZelle, Range("AC35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row))   _
_
Is Nothing Then
Call Gueltigkeitsliste1
End If
Next rZelle
.EnableEvents = True
End With
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: 2 VBA Befehle in einem Worksheet
19.08.2009 11:50:28
pointofview
Hallo Reinhard,
nimm mal das zweite Option Explicit heraus bei:
Is Nothing Then
Call Gueltigkeitsliste
End If
Next rZelle
.EnableEvents = True
End With
End Sub
Option Explicit 'das muss raus
Private Sub Gueltigkeitsliste1()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long
Gruss
PointOfView
AW: 2 VBA Befehle in einem Worksheet
19.08.2009 12:00:52
Tino
Hallo,
du kannst keine eigenen Eventmakros erfinden, es gibt immer nur eins und kann auch in einer Tabelle nur einmal verwendet werden.
Habe mal Deinen Code entsprechend angepasst aber nicht getestet.
Option Explicit

Private Sub Gueltigkeitsliste()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long

Set Dic = CreateObject("Scripting.Dictionary")
Arr = Range("C35", Cells(Rows.Count, 3).End(xlUp))

Dic("") = 0
For L = 1 To Ubound(Arr)
 If Not IsError(Arr(L, 1)) Then
  If Arr(L, 1) <> "" Then
    Dic(Arr(L, 1)) = 0
  End If
 End If
Next

strFilterText = Join(Dic.keys, ",")

With Range("Q5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=strFilterText
End With

End Sub

Private Sub Gueltigkeitsliste1()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long

Set Dic = CreateObject("Scripting.Dictionary")
Arr = Range("AC35", Cells(Rows.Count, 29).End(xlUp))

Dic("") = 0
For L = 1 To Ubound(Arr)
 If Not IsError(Arr(L, 1)) Then
  If Arr(L, 1) <> "" Then
    Dic(Arr(L, 1)) = 0
  End If
 End If
Next

strFilterText = Join(Dic.keys, ",")

With Range("S5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=strFilterText
End With

End Sub

Private Sub Worksheet_Activate()
 Call Gueltigkeitsliste
 Call Gueltigkeitsliste1
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rZelle As Range, rZelle As Range
With Application
 .EnableEvents = False
 
 Set rZelle = Interaction(Target, Union(Range("Q5"), Range("S5")))
 
 If Not rZelle Is Nothing Then
    For Each rZelle In rZelle
      'Q5 ************************************************ 
      If rZelle.Address = "$Q$5" Then
          If Target <> "" Then
              Range("C35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row).AutoFilter 1, Range("Q5"), , , False
          Else
              If ActiveSheet.FilterMode Then
               Range("C35").AutoFilter
              End If
          End If
      ElseIf Not Intersect(rZelle, Range("C35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row)) Is Nothing Then
          Call Gueltigkeitsliste
      End If
      'S5 *********************************************** 
      If rZelle.Address = "$S$5" Then
          If Target <> "" Then
              Range("AC35:AC" & Cells.SpecialCells(xlCellTypeLastCell).Row).AutoFilter 1, Range("S5"), , , False
          Else
              If ActiveSheet.FilterMode Then
               Range("AC35").AutoFilter
              End If
          End If
      ElseIf Not Intersect(rZelle, Range("AC35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row)) Is Nothing Then
          Call Gueltigkeitsliste1
      End If
      '************************************************** 
    Next rZelle
 End If
 
 .EnableEvents = True
End With
End Sub
Gruß Tino
Anzeige
korrektur
19.08.2009 12:05:43
Tino
Hallo,
in der Zeile
Dim rZelle As Range, rZelle As Range
lösche
, rZelle As Range
Gruß Tino
die auto Vervollständigung hat zugeschlagen
19.08.2009 12:12:52
Tino
Hallo,
Interaction ist Quatsch, hier der Korrigierte Code.
Option Explicit

Private Sub Gueltigkeitsliste()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long

Set Dic = CreateObject("Scripting.Dictionary")
Arr = Range("C35", Cells(Rows.Count, 3).End(xlUp))

Dic("") = 0
For L = 1 To Ubound(Arr)
 If Not IsError(Arr(L, 1)) Then
  If Arr(L, 1) <> "" Then
    Dic(Arr(L, 1)) = 0
  End If
 End If
Next

strFilterText = Join(Dic.keys, ",")

With Range("Q5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=strFilterText
End With

End Sub

Private Sub Gueltigkeitsliste1()
Dim Dic As Object
Dim strFilterText As String
Dim Arr
Dim L As Long

Set Dic = CreateObject("Scripting.Dictionary")
Arr = Range("AC35", Cells(Rows.Count, 29).End(xlUp))

Dic("") = 0
For L = 1 To Ubound(Arr)
 If Not IsError(Arr(L, 1)) Then
  If Arr(L, 1) <> "" Then
    Dic(Arr(L, 1)) = 0
  End If
 End If
Next

strFilterText = Join(Dic.keys, ",")

With Range("S5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=strFilterText
End With

End Sub

Private Sub Worksheet_Activate()
 Call Gueltigkeitsliste
 Call Gueltigkeitsliste1
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rZelle As Range
With Application
 .EnableEvents = False

 Set rZelle = Intersect(Target, Union(Range("Q5"), Range("S5")))

 If Not rZelle Is Nothing Then
    For Each rZelle In rZelle
      'Q5 ************************************************ 
      If rZelle.Address = "$Q$5" Then
          If Target <> "" Then
              Range("C35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row).AutoFilter 1, Range("Q5"), , , False
          Else
              If ActiveSheet.FilterMode Then
               Range("C35").AutoFilter
              End If
          End If
      ElseIf Not Intersect(rZelle, Range("C35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row)) Is Nothing Then
          Call Gueltigkeitsliste
      End If
      'S5 *********************************************** 
      If rZelle.Address = "$S$5" Then
          If Target <> "" Then
              Range("AC35:AC" & Cells.SpecialCells(xlCellTypeLastCell).Row).AutoFilter 1, Range("S5"), , , False
          Else
              If ActiveSheet.FilterMode Then
               Range("AC35").AutoFilter
              End If
          End If
      ElseIf Not Intersect(rZelle, Range("AC35:C" & Cells.SpecialCells(xlCellTypeLastCell).Row)) Is Nothing Then
          Call Gueltigkeitsliste1
      End If
      '************************************************** 
    Next rZelle
 End If

 .EnableEvents = True
End With
End Sub
Gruß Tino
Anzeige
AW: die auto Vervollständigung hat zugeschlagen
19.08.2009 13:06:24
Reinhardt
Hallo Tino,
danke für die super hilfe!!
Sorry, eine Frage habe ich noch, in der Zelle Q5 bei der Gültigkeitsliste, zeigt er mir in der Dropdown auch die Wahlmöglichkeit "Alle" an. Wenn ich dieses jetzt anklicke, filltert er mir die kompletten Ergebnis weg..
wenn ich den Inhalt dieser Zelle mit ENTF leere, werden wieder alle Werte ungefiltert angezeigt...? müsste das nicht genau umgekehrt sein?
Vielleicht habe ich das falsch in Erinnerung, aber kann es
nicht sogar sein, dass Du mir damals den Code geschrieben hast? ;-)
Gruss
Reini
AW: die auto Vervollständigung hat zugeschlagen
19.08.2009 13:15:25
Tino
Hallo,
wie schon geschrieben habe den Code nicht getestet.
Kann aber erst heute Abend wieder, bin auf dem weg zur Arbeit.
Gruß Tino
Anzeige
AW: die auto Vervollständigung hat zugeschlagen
19.08.2009 13:17:54
Reinhardt
Hallo,
ich nochmal mit der o.g. VBA Formel gespielt, einzeln fünktionieren die Filterungen, aber wenn ich die kombiniere, filtert er alle Ergebnisse weg. BSP Q5 auf einen Namen gfiltert und auf S5 eine bestimmte
Artikelgruppe...sorry, vielleicht habe ich mich vorhin nicht genau genug ausgedrückt...
Trotzdem vielen Dank im voraus!!
Reini
Nachfrage
19.08.2009 23:40:58
Tino
Hallo,
habe mir dies noch mal angesehen und finde dies könnte man mit dem Spezialfilter besser lösen.
Dazu müsste aber Dein Bereich eine Überschrift haben, hat er diese?
Am besten mal ein Beispiel hochladen, damit wir gleich den Code richtig erstellen können.
Perönliche Daten kannst Du ja anonymisieren.
Gruß Tino
Anzeige
AW: Nachfrage
20.08.2009 11:38:17
Reinhardt
Hallo Tino,
danke für die Hilfe, anbei die Datei. Das Makro funktioniert aber irgendwie nicht mehr nachdem ich das aus dem Datei herauskopiert habe. Die beiden Gelb markierten Felder sind die Filterdropdowns.
https://www.herber.de/bbs/user/63945.zip
Danke für die Hilfe im Voraus!
Reini
AW: Nachfrage
20.08.2009 12:28:29
Tino
Hallo,
teste mal.
https://www.herber.de/bbs/user/63946.zip
In Spalte C sind zwei A enthalten einmal ohne und einmal mit Leerzeichen am Ende,
daher wird in der Auswahlliste auch zweimal dass A aufgeführt.
Gruß Tino
Anzeige
AW: Nachfrage
25.08.2009 15:13:53
Reinhardt
Hallo Tino,
sorry für späte Antwort (Kurzurlaub..), das sieht gut aus, werde es jetzt mal testen und Feedbacken.
Gruss
Reini

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige