Avatar billede frederikschack Nybegynder
03. februar 2009 - 10:26 Der er 6 kommentarer og
1 løsning

autofiltrerede celler ind i array

Hej Eksperter,

Hvordan får man lagt de autofiltrerede rækker fra et excel ark ind i et array?

Jeg har læst noget om autofilter.range.select og traversering af de valgte celler, men kan ikke rigtigt få det til at virke.

Er der i øvrigt andre der har det sådan at VBA er et ret kaotisk struktureret programmeringssprog?
Avatar billede frederikschack Nybegynder
03. februar 2009 - 10:58 #1
Som en test har jeg prøvet at gøre sådan her, men får at vide at der er er en objekt variabel eller en With block variabel der ikke er sat.

Sub SetActive()
    Dim x As Variant
   
  Worksheets("Ark1").Select
  For Each x In ActiveSheet.AutoFilter.range.Rows
        y = y + 1
        Worksheets("Ark2").Cells(y, 1) = x(1, 1)
  Next
End Sub
Avatar billede frederikschack Nybegynder
03. februar 2009 - 11:49 #2
Jeg har fundet ud af at man nok på en eller anden måde kan bruge xlCellTypeVisible, men hvordan ved jeg ikke....
Avatar billede frederikschack Nybegynder
03. februar 2009 - 13:16 #3
En ugly fuckly kode, men det virker:


Function CopyFilter(readSheet, height, width)
    Dim End_row As Long
    Dim y As Long
    Dim RowArray() As Variant
    Dim DimY() As Variant
    Dim DimX() As Variant
    Dim r2 As Integer
   
    ReDim DimY(height)
    ReDim DimX(width)
   
    r2 = 1
    For r = 2 To height
        If Sheets(readSheet).Rows(r).Hidden = False Then
            Sheets("Ark2").Rows(r2).Value = Sheets(readSheet).Rows(r).Value
            r2 = r2 + 1
        End If
    Next
   
    For y = 1 To height
        For x = 1 To width
            DimX(x) = Worksheets("Ark2").Cells(y, x)
        Next
        DimY(y) = DimX()
    Next
    For y = 1 To height
        For x = 1 To width
            Worksheets("Ark3").Cells(y, x) = DimY(y)(x)
        Next
        DimY(y) = DimX()
    Next
   
    CopyFilter = DimY()
   
End Function
Avatar billede frederikschack Nybegynder
03. februar 2009 - 13:36 #4
Men er ustyrligt langsom i Office 2007
Avatar billede frederikschack Nybegynder
03. februar 2009 - 13:55 #5
Function CopyFilter(readSheet, height, width)
    Dim End_row As Long
    Dim y As Long
    Dim RowArray() As Variant
    Dim DimY() As Variant
    Dim DimX() As Variant
    Dim r2 As Integer
   
    ReDim DimY(height)
    ReDim DimX(width)
   
    newY = 1
    For y = 2 To height
        If Sheets(readSheet).Rows(y).Hidden = False Then
            Sheets("Ark2").Rows(newY).Value = Sheets(readSheet).Rows(y).Value
            For x = 1 To width
                DimX(x) = Sheets(readSheet).Cells(y, x)
            Next
            DimY(y) = DimX()
            newY = newY + 1
        End If
    Next
   
    CopyFilter = DimY()
   
End Function
Avatar billede frederikschack Nybegynder
03. februar 2009 - 13:57 #6
Er stadig ustyrligt langsomt........
Avatar billede frederikschack Nybegynder
03. februar 2009 - 13:59 #7
Sådan, så kører det hurtigt, havde lige glemt at fjerne en linie:

Function CopyFilter(readSheet As String, height As Long, width As Long)
    Dim RowArray() As Variant
    Dim DimY() As Variant
    Dim DimX() As Variant
    Dim r2 As Integer
   
    ReDim DimY(height)
    ReDim DimX(width)
   
    newY = 1
    For y = 2 To height
        If Sheets(readSheet).Rows(y).Hidden = False Then
            For x = 1 To width
                DimX(x) = Sheets(readSheet).Cells(y, x)
            Next
            DimY(y) = DimX()
            newY = newY + 1
        End If
    Next
   
    CopyFilter = DimY()
   
End Function
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
Kurser inden for grundlæggende programmering

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