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

virtuelle Tabelle

virtuelle Tabelle
Berny
Hallo Excelprofis,
ich möchte per VBA für ca. 30 Spalten die Autofilterkriterien auslesen um diese später im Makroablauf wieder verwenden zu können.
Bis hier her habe ich bereits eine Lösung gefunden.
Ich möchte diese Werte nicht in eine Tabelle schreiben sondern virtuelle in VBA in eine art Variable merken.
Ich möchte natürlich keine 100 Variablen erfinden!
Gibte es eine Möglichkeit über eine Schelife die Werte zwischenzuspeichern?
For ...
Spalte( N ). Wert1 = "xy"
_________.Wert2 = "AB"
_________. Wert3 ="CD"
Next ...
Hat jemand ein Bsp. für mich?
M.f.G.
Berny

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

Betreff
Benutzer
Anzeige
AW: virtuelle Tabelle
05.08.2011 16:56:07
ransi
Hallo Berni
DAfür brauchst du keine 100 VAriablen.
Eine reicht ;-)
Dim myFilters As Filters
With Sheets("tabelle1")
    If .AutoFilterMode Then Set myFilters = .AutoFilter.Filters
End With

Die kannst du bei Bedarf dann mit For Each abklappern...
ransi
Anzeige
AW: virtuelle Tabelle
07.08.2011 12:28:15
Berny
Hallo Ransi,
ehrlich gesagt ich verstehe nur Bahnhof!
Also wenn deine Version funktioniert wäre das super aber ich bekomme das nicht hin!
Wie setze ich später nachdem ich den Autofilter deaktiviert hatte (.AutoFilter.ShowAllData) wieder auf die in deiner Variablen gespeicherte Werte zurück?
Was heißt „bei Bedarf dann mit For Each abklappern...“ ?
Oder haben wir uns missverstanden?
Meine Tabelle kann von jedem User individuelle gefiltert werden. Im Programmablauf muss der Filter aufgehoben werden, die Tabelle gedruckt, gespeichert, …. werden und zu guter Letzt der Filter wieder so gesetzte werden wie er vor dem Programmablauf war. Ich habe auch schon benutzerdefinierte Ansicht probiert. Aber aus irgendeinem Grund dauert der Ansichten wechsel viel zu lange. Nach ersten Tests ist das neue Filtern um das x fache schneller.
In der Hilfe habe ich u. g. Bsp. gefunden, wobei auch hier das Schreiben der Werte in eine Tabelle relativ lange dauert.
Deshalb wollte ich die Daten virtuell zwischenspeichern. Ich habe so etwas auch schon einmal gesehen, aber leider finde ich das entsprechende Bsp. nicht mehr.
Also kannst du mir bitte noch einmal mit deiner Version weiter helfen, oder kannst Du oder jemand anderer mir ein Bsp. für eine virtuelle Tabelle liefern?
M.f.G.
Berny
Sub AFilter()
Dim f As Filter
Dim w As Worksheet
Const ns As String = "Not set"
Set w = Worksheets("Tabelle1")
Set w2 = Worksheets("FilterData")
rw = 1
For Each f In w.AutoFilter.Filters
If f.On Then
c1 = Right(f.Criteria1, Len(f.Criteria1) - 1)
If f.Operator Then
op = f.Operator
c2 = Right(f.Criteria2, Len(f.Criteria2) - 1)
Else
op = ns
c2 = ns
End If
Else
c1 = ns
op = ns
c2 = ns
End If
w2.Cells(rw, 1) = c1
w2.Cells(rw, 2) = op
w2.Cells(rw, 3) = c2
rw = rw + 1
Next
w.AutoFilter.ShowAllData
End Sub

Anzeige
AW: virtuelle Tabelle
09.08.2011 08:46:05
fcs
Hallo Berny,
der Vorschlag von ransi funktioniert leider nicht, da nach ShowAllData auch die Daten in der Objektvariablen zurückgesetzt werden.
Du muss die Filterdaten in einem Datenarray zwischenspeichern.
Hier ein Beispiel zum Speicher und erneutem setzen des Filters. Die testausgabe in eine Tabelle kannst du natürlich löschen.
Gruß
Franz
Option Explicit
Dim arrFD As Variant
Sub AFilter()
Dim f As Filter, iIndex As Long
Dim w As Worksheet, w2 As Worksheet
Dim c1, c2, op, Spalte As Long, rw As Long
On Error Resume Next
Const ns = "Not set"
Set w2 = Worksheets("Tabelle1")
Set w = Worksheets("FilterData")
If w.AutoFilterMode = True Then
ReDim arrFD(1 To w.AutoFilter.Filters.Count, 1 To 4)
For iIndex = 1 To w.AutoFilter.Filters.Count
Set f = w.AutoFilter.Filters(iIndex)
c1 = ns
op = ns
c2 = ns
If f.On Then
c1 = f.Criteria1
If f.Operator Then
op = f.Operator
c2 = f.Criteria2
End If
End If
arrFD(iIndex, 1) = w.AutoFilter.Range.Cells(1, iIndex).Text 'Spaltentitel
arrFD(iIndex, 2) = c1
arrFD(iIndex, 3) = op
arrFD(iIndex, 4) = c2
Next
If w.FilterMode = True Then
w.AutoFilter.ShowAllData
End If
'Filterdaten zum Testen in Tabelle schreiben
rw = 1
With w2
.UsedRange.Clear
.Cells(rw, 1) = "Spalte"
.Cells(rw, 2) = "Kriterium 1"
.Cells(rw, 3) = "Operator"
.Cells(rw, 4) = "Kriterium 2"
For iIndex = 1 To UBound(arrFD, 1)
rw = rw + 1
For Spalte = 1 To 4
Select Case Spalte
Case 1, 3, 4
.Cells(rw, Spalte) = "'" & arrFD(iIndex, Spalte)
Case 2
If IsArray(arrFD(iIndex, Spalte)) Then
.Cells(rw, Spalte) = "'" & "Werte-Liste"
Else
.Cells(rw, Spalte) = "'" & arrFD(iIndex, Spalte)
End If
End Select
Next
Next
.Columns.AutoFit
End With
Else
MsgBox "Autofilter ist nicht aktiv"
End If
End Sub
Sub filter_wiederherstellen()
Dim f As Filter, iIndex As Long, oAutofilter As AutoFilter
Dim w As Worksheet
Const ns = "Not set"
Set w = Worksheets("FilterData")
If w.AutoFilterMode = True Then
With w.AutoFilter.Range
For iIndex = 1 To w.AutoFilter.Filters.Count
If arrFD(iIndex, 2)  ns And arrFD(iIndex, 3)  ns And arrFD(iIndex, 4)  ns Then
.AutoFilter Field:=iIndex, Criteria1:=arrFD(iIndex, 2), _
Operator:=arrFD(iIndex, 3), Criteria2:=arrFD(iIndex, 4)
ElseIf arrFD(iIndex, 2)  ns And arrFD(iIndex, 3)  ns Then
.AutoFilter Field:=iIndex, Criteria1:=arrFD(iIndex, 2), _
Operator:=arrFD(iIndex, 3)
ElseIf arrFD(iIndex, 2)  ns Then
.AutoFilter Field:=iIndex, Criteria1:=arrFD(iIndex, 2)
End If
Next
End With
Else
MsgBox "Autofilter ist nicht aktiv"
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige