Toon posts:

[Excel 2002] Opzoeken cells en toevoegen aan range

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb een klein probleempje met een stukje VBA in Excel. Ik moet een range van de laatste 7 dagen selecteren in m'n sheet, om daarna die data van de volgende kolommen te gebruiken om een grafiek te tekenen met verschillende series.

Die grafiek hardcoded lukt perfect, maar nu een range selecteren om dat wat dynamisch te maken is minder:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
For DateLoop = MaxDate - 7 To MaxDate
        FindNextBln = False
        With ObjRange
            If Not FindNextBln Then
                Set ObjCell = .Find(What:=DateLoop)
            Else
                Set ObjCell = .FindNext(After:=ObjCell)
            End If
            If Not ObjCell Is Nothing Then
                Set ObjDataRange = Application.Union(ObjDateRange, Range(ObjCell))
            End If
        End With
        FindNextBln = True
    Next DateLoop
    MsgBox "Items selected: " & ObjDateRange.Count
De probleem regel is deze: Set ObjDataRange = Application.Union(ObjDateRange, Range(ObjCell))

Hoe maak je eigenlijk een union ? Op MSDN staat enkel een voorbeeld met 2 ranges die elk slechts 1 celladres bevatten.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Die union is wel goed zo te zien, maar dat range(objcell) niet. Objcell is al een rangeobject en range(RangeObject) werkt niet.
union(r1,r2,.....rn) werkt prima, zolang r1...rn rangeobjecten zijn, ongeacht de grootte van de rangeobjecten.

[ Voor 31% gewijzigd door Lustucru op 07-12-2005 10:50 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Met Set ObjDataRange = Application.Union(ObjDateRange, ObjCell)
Zegt ie "Runtime error "5" Invalid procedure call or argument"

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dan is een van de twee waarschijnlijk leeg of nothing. Ik zie ook nergens objdatarange een waarde krijgen?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Whoops ... vergeten te melden dat het werk
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    i = 0
    For DateLoop = MaxDate - 7 To MaxDate
        Set ObjCell = ObjRange.Cells.Find(What:=DateLoop)
        If Not ObjCell Is Nothing Then
            Set ObjDateRange = ObjCell
            Address = ObjCell.Address
            Do
                With ObjRange
                    i = i + 1
                    Set ObjCell = .Cells.FindNext(after:=ObjCell)
                    If Not ObjCell Is Nothing Then
                        Set ObjDateRange = Application.Union(ObjDateRange, ObjCell)
                    End If
                End With
            Loop Until ObjCell.Address = Address
        End If
    Next DateLoop
    MsgBox "" & ObjDateRange.Count & " items selected: ", , "Search Result"

[ Voor 4% gewijzigd door Verwijderd op 12-12-2005 11:10 ]