1k Aufrufe
Gefragt in Tabellenkalkulation von kapa Mitglied (121 Punkte)
Hallo liebe Wissenden,

sitze hier gerade auf Arbeit über einem "Makro-Problem".
Habe zwar eine Vermutung aber leider nur gefährliches Halbwissen was Makros angeht.
Aus diesem Grund wende ich mich an euch da draußen.

Hier ein Versuch die Aufgabe umfassend zu umschreiben:

In dem aufgeführten Makro soll eine importierte Tabelle nach verschiedenen Kriterien gefiltert werden.
- Also bis jetzt alles ganz harmlos ohne Makroeinsatz.

Das Makro soll nun die Werte (Auftragsnr, Artikelnr, Bezeichnung,...) aus der gefilterten Tabelle einzeln in dafür vorgesehene Formulare (Tabelle1) Kopieren und diese somit selbsständig füllen.
- In der jetzigen Version Kopiert das Makro nur die gefilterten Werte der ersten Spalte, die restlichen "ausgeblendeten" Werte werden mitkopiert.

Genau dort liegt mein Problem.
Der Filter wird nicht beibehalten.

Für eine schnelle und praktikable Lösung bin ich immer zu Begeistern ;-).

Hier das Makro:

Sub MontageFertigmeldungen()

Application.Dialogs(xlDialogPrinterSetup).Show

'Thömel, 24.8.12:
Dim blatt, filblatt As Worksheet
Dim ktr As Variant
Dim wert As Range

Set blatt = Worksheets("MDA Ad hoc")
Set filblatt = Worksheets("FilterData")

'Thömel, 24.8.12:
'Kopiert die gefilterten Werte in die Tabelle FilterData:
filblatt.Cells.Clear
blatt.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
filblatt.Cells(1, 1)

Sheets("MDA Ad hoc").Select

lReihe = LetzteReihe
For i = 3 To lReihe

'Thömel, 24.8.12:
ktr = blatt.Range("A" & i)
Set wert = filblatt.Range("A1:A1000").Find(ktr)

'Thömel, 24.8.12:
If Not wert Is Nothing Then
Sheets("MDA Ad hoc").Select
Range("A" & i).Select
Selection.Copy
Sheets("Tabelle1").Select
Range("C5:D6").Select
ActiveSheet.Paste
Selection.Font.Size = 13.5

Sheets("MDA Ad hoc").Select
Range("B" & i).Select
Selection.Copy
Sheets("Tabelle1").Select
Range("E8:E9").Select
ActiveSheet.Paste
Selection.Font.Size = 13.5

Sheets("MDA Ad hoc").Select
Range("D" & i).Select
Selection.Copy
Sheets("Tabelle1").Select
Range("G8:G9").Select
ActiveSheet.Paste
Selection.Font.Size = 13.5

Sheets("MDA Ad hoc").Select
Range("C" & i).Select
Selection.Copy
Sheets("Tabelle1").Select
Range("F5:G6").Select
ActiveSheet.Paste

With ActiveCell.Characters(Start:=1, Length:=7).Font
.Name = "MS Sans Serif"
.FontStyle = "Standard"
.Size = 10
.Underline = xlUnderlineStyleNone
.ColorIndex = 1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Range("C5:D6").Select
Selection.Font.Size = 18
Selection.Font.Bold = True
'ActiveWindow.SelectedSheets.PrintPreview
ExecuteExcel4Macro "PRINT(1,,,1,,FALSE,,,,,,2,,,TRUE,,FALSE)"
Range("E8:E9").Select
Selection.ClearContents
Range("F5:G6").Select
Selection.ClearContents
Range("C5:D6").Select
Selection.ClearContents
Range("G8:G9").Select
Selection.ClearContents
End If

'Sheets("MDA Ad hoc").Select

Next i

End Sub
Public Function LetzteReihe()

Dim objWks As Worksheet

Dim nLastRow As Long
Dim strMsg As String

Set objWks = ActiveSheet

With objWks
If Application.WorksheetFunction.CountA(.Cells) > 0 Then
On Error Resume Next
nLastRow = .Cells.Find(What:="*", After:=.Cells(1), _
LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

On Error GoTo 0
Else
strMsg = "Das Tabellenblatt enthält keine Daten!"
End If
End With

Set objWks = Nothing
LetzteReihe = nLastRow

End Function


Vielen Dank und Grüße,

Kapa

3 Antworten

0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
hallo,

leider ist deine Beschreibung für mich nicht verstänadlich.

- In der jetzigen Version Kopiert das Makro nur die gefilterten Werte der ersten Spalte, die restlichen "ausgeblendeten" Werte werden mitkopiert.



Was meinst du damit? Welche Werte sind ausgelendet?

Gruß

Helmut
0 Punkte
Beantwortet von kapa Mitglied (121 Punkte)
Hallo Helmut,

Zitat:
- In der jetzigen Version Kopiert das Makro nur die gefilterten Werte der ersten Spalte, die restlichen "ausgeblendeten" Werte werden mitkopiert.

Hm, bei nochmaliger Betrachtung der Aussage erscheint mir die Formulierung auch nicht mehr ganz eindeutig für einen Dritten ;-)

Hier noch ein Versuch.
Nach dem inport der gewünschten Tabelle wird diese nach verschiedenen Suchkriterien gefiltert.
In der Regel reicht mir das Filtern der Tabelle mit Hilfe der ersten Spalte aus.
-> Hier funktioniert das Makro auch wunderbar.

Erweitere ich nun den Filter um Spalte 2 u folgende, funktioniert das Makro nicht mehr.
Die ausgeblendeten Werte durch den Filter 2 und folgende werden über das Makro ausgelesen und in die vorgesehenen Formulare kopiert.

Ich habe zwar einen Vermutung an welchem Befehl im Quelltext es liegen kann, will aber nicht zur Verwirrung Beihilfe leisten.

Hoffe meine erweiterte Aussage hilft Dir weiter.

Gruß,
Kapa
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Kapa,

mit dem Makro kopierst du die gefilterten Daten aus dem Arbeitsblatt "MDA Ad hoc" in das Blatt "Filter Data" um dann mit den gefilterten Werten in Spalte A des ursprünglichen Blattes nach einer Übereinstimmung zu suchen und die Daten zu kopieren (wenn ich das richtig sehe).

Bei dieser Suche wird jedoch nicht danach unterschieden, ob die Zellen ausgeblendet sind oder nicht. Daher werden alle Daten aus Zeilen kopiert, bei denen das Makro eine Übereinstimmung in Spalte A findet. Deine weitere Filterung wird nicht beachtet.

Ersetze mal die Zeile
If Not wert Is Nothing Then
durch
If Not wert Is Nothing and Sheets("MDA Ad hoc").Rows(i).EntireRow.Hidden = False Then

und probiere mal, ob das Makro dann so arbeitet, wie gewünscht.

Gruß

M.O.
...