PDA

Vollständige Version anzeigen : Autofilter per VBA einfügen...mal anders


braegler
11.11.2005, 10:11
Hallo zusammen,
ich habe eine Access-Abfrage, die ich mittels TransferDatasheet in eine XLS datei exportiere.
Die öffne ich dann (aus Access heraus) um einige Format-änderungen durchzuführen ( Spalte mit Farbe füllen, Spalte-Schriftfarbe rot etc).
Dazu hab ich folgende Funtion:
Public Function fManiXLS(ByVal strXLSFile As String)
Dim wb As Excel.Workbook
Dim WS As Excel.Worksheet
Dim rng As Excel.Range
Set wb = Excel.Workbooks.Open(strXLSFile)
Set WS = wb.Worksheets(1)
lngRow = Range("B1").End(xlDown).Row
'lngRow = Anzahl der gefüllten Zeilen
Set rng = WS.Range("B1", "B" & lngRow)
With rng
'...
end with

Set WS = Nothing
DoCmd.SetWarnings False
Excel.Application.DisplayAlerts = False

Call wb.Close(True, strXLSFile)
Excel.Application.DisplayAlerts = True
DoCmd.SetWarnings True
Set wb = Nothing

Diese Excel-Files werden von mehreren Mitarbeitern ausgewertet.
Dazu fügen diese in Zeile 1 einen "Autofilter" (Data-Filter-Autofilter) ein.
Das kann ich doch bestimmt auch beim manipulieren mit o.g. Funktion tun.
Nur stellt sich mir die Frage , wie das funktioniert.
Kann mir noch geholfen werden??

Vielen Dank

jinx
11.11.2005, 10:16
<font size="2" face="Century Gothic">Moin, braegler,

um die letzte Frage zu beantworten: nein ;) Meines Wissens dienen Funktionen in Excel anderen Dingen als der Manipulation von Zellen, daher die Antwort - und ich verspüre keinerlei Interesse, irgendein Muster nachzubauen...</font>

braegler
11.11.2005, 11:05
HI all,
vielleicht hab ich mich nicht richtig ausgedrückt.
Ich hab nun aber über Google-Group einen NG Post gefunden, der mir sehr geholfen hat.
Ich mach das nun so( falls jmd anderes mal das gleiche Prob hat):
Anfang alter Code:

Public Function fManiXLS(ByVal strXLSFile As String)
Dim wb As Excel.Workbook
Dim WS As Excel.Worksheet
Dim rng As Excel.Range
Set wb = Excel.Workbooks.Open(strXLSFile)
Set WS = wb.Worksheets(1)
lngRow = Range("B1").End(xlDown).Row
'lngRow = Anzahl der gefüllten Zeilen



'Manipulation 1
Set rng = WS.Range("B1", "B" & lngRow)
With rng

.Interior.Color = 65280
End With
'2
Set rng = WS.Range("D1", "D" & lngRow)
With rng
.Interior.Color = 16776960
End With
'3
Set rng = WS.Range("H1", "H" & lngRow)
With rng
.Interior.Color = 65535
End With
'4

Set rng = WS.Range("G1", "G" & lngRow)
With rng
.Font.Color = 255
End With


nun kommt dazwischen:

Set rng = WS.Range("A1", "H1") 'HIER WIRD DER AUTOFILTER GESETZT
rng.AutoFilter


und danach der Schlussteil:

Set WS = Nothing
DoCmd.SetWarnings False
Excel.Application.DisplayAlerts = False
'wb.Close strXLSFile, True
Call wb.Close(True, strXLSFile)
Excel.Application.DisplayAlerts = True
DoCmd.SetWarnings True
Set wb = Nothing


End Function

jinx
11.11.2005, 11:23
<font size="2" face="Century Gothic">Moin, braegler,

Du wirst die Frage sicherlich beantworten können: Was ist daran anders als beim normalen Setzen des Autofilters? Nix meiner Meinung (wenn man Selection und rng austauscht)...</font>

Nagus
11.11.2005, 11:37
Hallo braegler,

ich weiss zwar auch nicht, ob es geht oder nicht, aber vielleicht hiflt folgender Ansatz.

Ich exportiere auch Daten von Access nach Excel und lasse dann einen Code laufen, der allerlei Aufgaben erfüllt. Da es immer die gleiche xl-Datei ist, habe ich den Code für xl dort reingepackt und starte den via Access, nach dem Export.

braegler
11.11.2005, 12:53
So mal zur Abklärung:

Ich hab eine Qry in Access, die ich per TransferDatasheet exportiere.
Dieses neu erstellte XLS-File wird nun manipuliert.
Nun manipuliere ich das File, indem ich Spalten bzw. Inhalte umfärben.
Der nächste Schritt ist das einfügen eines Autofilters in die Zeile 1.
Und genau da war mein Problem beheimatet.
Ich wollte dafür sorgen, daß der nächste, der das XLS-File anpackt, eine fertig formatierte Tabelle erhält.
Da der Export aber keine einmalige Angelegenheit ist, sondern im Wochenturnus wiederholt werden sollte, war es für mich wichtig, alles von Access aus anzustoßen.
Das hab ich mit meinem Code nun geschafft.

@jinx: Ob es unterschiede zwischen meinem Weg und dem normalen setzen eines Autofilters gibt, ist für mich eigentlich egal.
Es war nur wichtig, das nachdem ich den Button in Access gedrückt hab, alle daten exportiert, die Spalten formatiert und der Autofilter in Zeile 1 gesetzt wird.

Danke für Eure Hilfe