Avatar billede janvogt Praktikant
13. august 2002 - 09:32 Der er 19 kommentarer og
1 løsning

Kopiér formatering i avanceret filter

Dette spørgsmål er vist for nørder, men jeg prøver alligevel ....

Jeg bruger følgende VBA-kode til at kopiere udvalgte data til et andet ark:

    Range("Data").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets( _
        "Criteria").Range("A9:B10"), CopyToRange:=Range("B4:L4"), Unique:=False

Det fungerer fint, mit problem er bare, at de oprindelige data indeholder noget betinget formatering, som "FilterCopy" ikke kopierer med.
Nogen som kender eller kan udtænke en løsning på dette problem?
Avatar billede bak Forsker
13. august 2002 - 10:05 #1
er det "kun" de betingede formater der skal med eller er det hele formateringen (fed, streger osv.) ?
Avatar billede janvogt Praktikant
13. august 2002 - 10:19 #2
Det er kun de betingede formater som skal med.
Det er cellebaggrunden, som i nogle situationer får en anden farve.
Avatar billede bak Forsker
13. august 2002 - 10:23 #3
Mit bud er en midlertidig FilterinPlace og kopiering af dette område.
With Range("Data")
    .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets( _
        "Criteria").Range("A9:B10"), Unique:=False
    .SpecialCells(xlCellTypeVisible).Copy [b4]
    ActiveSheet.ShowAllData
End With
Avatar billede bak Forsker
13. august 2002 - 10:24 #4
Glemte at opdatere..... :-(
Avatar billede janvogt Praktikant
13. august 2002 - 10:44 #5
Hmm, det er ikke alle kolonner fra databasen som bliver kopieret.
Kun dem, hvis overskrifter ligger i B4:L4 ......
Avatar billede bak Forsker
13. august 2002 - 10:55 #6
Sorry, møde nu. Men du kan prøve med selection.resize
Avatar billede bak Forsker
13. august 2002 - 12:19 #7
Jan, for lige at prøve bliver jeg nødt til at vide hvilke kolonner "Data" dækker.
Avatar billede bak Forsker
13. august 2002 - 12:43 #8
Test lige det her:
I resize-sætningen betyder offset(0,1) at r skal starte ved 2. kolonne.
Så hvis "data" går fra A-T begynder vi ved B
resize(,11) betyder at vi medtager 11 kolonner, altså B:L


Sub tester1()
Dim r As Range
Set r = Range("data")
Set r = r.Offset(0, 1).Resize(, 11)
  Range("Data").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets( _
        "Criteria").Range("A9:B10"), Unique:=False
   
  r.SpecialCells(xlCellTypeVisible).Copy [b4]
  ActiveSheet.ShowAllData
End Sub
Avatar billede janvogt Praktikant
13. august 2002 - 14:16 #9
"Data" dækker kolonnerne B til AL.
Men det er kun 11 forskellige kolonner af disse, som skal kopieres/filtreres.
Så vidt jeg kan se skal de 11 kolonner ligge ved siden af hinanden, hvis man ønsker at bruge Resize.
Avatar billede bak Forsker
13. august 2002 - 14:25 #10
Skal de ikke også det med din metode ?
CopyToRange:=Range("B4:L4"),
Avatar billede bak Forsker
13. august 2002 - 14:56 #11
Sådan, så bevøver di ikke lige ved siden af hinanden.
Du skal bare udfylde r
de kolonner der er nævnt i r bliver skjult i kopieringsøjeblikket.

Sub tester1()
Dim r As Range
Set r = Range("I:I, m:m, q:al")
  Range("Data").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheets( _
        "Criteria").Range("A9:B10"), Unique:=False
  r.EntireColumn.Hidden = True
  Range("data").SpecialCells(xlCellTypeVisible).Copy [b4]
  r.EntireColumn.Hidden = False
  ActiveSheet.ShowAllData
End Sub
Avatar billede Slettet bruger
13. august 2002 - 15:13 #12
Kunne man ikke bare 'huske' den oprindelige betingede formatering, og genskabe den i destinationsområdet ?
Avatar billede bak Forsker
13. august 2002 - 15:20 #13
Jo, blackadder. Det kunne man godt, men hvad nu hvis der er forskellige betingelser i kolonnerne?
Avatar billede Slettet bruger
13. august 2002 - 15:27 #14
Så kunne man 'huske' dem også  :-)

Det er vistnok ikke muligt via VBA at få returneret betingede formatering i et område.

Dog er der en workaround af Chip Pearson, som muligvis kunne bruges til formålet.

http://www.cpearson.com/excel/CFColors.htm
Avatar billede bak Forsker
13. august 2002 - 17:43 #15
Blackadder->Har kigget, ser fint ud, men mon ikke mit alligevel er nemmere at implementere eller...?
Avatar billede Slettet bruger
13. august 2002 - 20:59 #16
Enig, hvis dit forslag virker, så er det klart den nemmeste måde.
Hvad siger 'kunden' ?  :-)
Avatar billede janvogt Praktikant
14. august 2002 - 08:27 #17
Så er "kunden" tilbage :-)
Min første tanke var også at genskabe formateringen i destinationsområdet, men det bliver meget besværligt, for nogen af de kolonner, som den betingede formatering afhænger af ligger kun i den oprindelige database. Derudover gør filteret, at der ikke er samme sammenhæng mellem rækkerne, så man vil heller ikke kunne kopiere formateringen.

Jeg prøver at arbejde lidt videre med baks forslag.
Forresten så ligger B4:L4 på et andet ark end "Data".
Avatar billede bak Forsker
15. august 2002 - 22:30 #18
Venter du på mere hjælp, Jan ?
Avatar billede bak Forsker
20. august 2002 - 12:22 #19
Jan, er du der..?
Avatar billede janvogt Praktikant
09. september 2002 - 09:14 #20
Hov, der var et spørgsmål åbent her - beklager!
Jeg har ikke lige haft tid til at teste ovenstående, men svaret ser fornuftigt ud, så jeg afslutter spørgsmålet. Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester