25.01.2016, 23:22
Hallo Forum,
ich habe eine umfangreiche Tabelle mit Aufträgen, die über alle Spalten mit Autofilter gefiltert werden kann.
In der ersten Spalte steht die Auftrags-Nr..
In einem 2. Tabellenblatt möchte der Benutzer nun ausschließlich die aktuell gefilterten Aufträge angeboten bekommen.
Dazu habe ich folgendes eingerichtet:
Private Sub Worksheet_sel()
Dim obj_range As Range
Dim var_line As Long 'Zeilenzähler
Dim Sh As Worksheet
Set Sh = ActiveSheet
With Sh
'Erste Zeile der Tabelle in Zeile 6
var_line = 5
'Benannten Zielbereich löschen
.Range("sel").ClearContents
'Tabelle lesen, benannter Bereich "data" enthält die eingegebe Auftrags-Nr.
For Each obj_range In .Range("data")
If obj_range.EntireRow.Hidden = False Then
var_line = var_line + 1
.Cells(var_line, 30) = .Cells(var_line, 1) 'Anm. 1
End If
Next
'Fertig, alle eingeblendeten Zeilen bearbeitet
' MsgBox ("Anzahl Zeilen gefiltert = " & var_line - 5) 'Anm. 2
'Benannten Bereich dimensionieren
ActiveWorkbook.Names("sel").RefersTo = .Range(.Cells(6, 30), .Cells(var_line, 30)) 'Anm. 3
End With
End Sub
Das Ergebnis entspricht nicht den Erwartungen:
Für Ideen zur Fehlerbehebung und allgemein erhellende Hinweise bedanke ich mich schon mal im Voraus!
Viele Grüße
PS: Falls es hilfreich ist, die Original-Excel-Datei anzuhängen, kann ich das gern tun.
ich habe eine umfangreiche Tabelle mit Aufträgen, die über alle Spalten mit Autofilter gefiltert werden kann.
In der ersten Spalte steht die Auftrags-Nr..
In einem 2. Tabellenblatt möchte der Benutzer nun ausschließlich die aktuell gefilterten Aufträge angeboten bekommen.
Dazu habe ich folgendes eingerichtet:
- 1. Tabellenblatt mit Aufträgen:
Spalte 1 mit Auftrags-Nr. = Name "data"
Spalte 30 = Name "sel" - 2. Tabellenblatt
Zelle mit Datenüberprüfung, Zulassen: Liste, Leere Zellen ignorieren, Zellendropdown, Quelle = sel
Private Sub Worksheet_sel()
Dim obj_range As Range
Dim var_line As Long 'Zeilenzähler
Dim Sh As Worksheet
Set Sh = ActiveSheet
With Sh
'Erste Zeile der Tabelle in Zeile 6
var_line = 5
'Benannten Zielbereich löschen
.Range("sel").ClearContents
'Tabelle lesen, benannter Bereich "data" enthält die eingegebe Auftrags-Nr.
For Each obj_range In .Range("data")
If obj_range.EntireRow.Hidden = False Then
var_line = var_line + 1
.Cells(var_line, 30) = .Cells(var_line, 1) 'Anm. 1
End If
Next
'Fertig, alle eingeblendeten Zeilen bearbeitet
' MsgBox ("Anzahl Zeilen gefiltert = " & var_line - 5) 'Anm. 2
'Benannten Bereich dimensionieren
ActiveWorkbook.Names("sel").RefersTo = .Range(.Cells(6, 30), .Cells(var_line, 30)) 'Anm. 3
End With
End Sub
Das Ergebnis entspricht nicht den Erwartungen:
- Im 2. Tabellenblatt wird in der Zelle mit der Datenüberprüfung nicht die gefilterte Auswahl angezeigt.
Mache ich da einen Fehler bei der Dimensionierung des Bereiches (Anm. 3)? - Bei einigen wenigen gefilterten Zeilen wird die Auftrags-Nr. nicht in die Spalte 30 (sel) übertragen, stattdessen ist die Zelle leer (Anm. 1).
- Die Anzahl der gefilterten Zeilen wird vom Script jedoch korrekt ermittelt (Anm. 2).
Für Ideen zur Fehlerbehebung und allgemein erhellende Hinweise bedanke ich mich schon mal im Voraus!
Viele Grüße
PS: Falls es hilfreich ist, die Original-Excel-Datei anzuhängen, kann ich das gern tun.