Avatar billede aitnemed Novice
15. juli 2009 - 15:07 Der er 7 kommentarer og
1 løsning

VBA til Excel: Kan ikke gennemskue fejl ved brug af Union-argument

Hej Folkens

Jeg har lavet et stykke kode, som gennemløber en range af celler i Excel og for de celler, som matcher kriterierne, henter jeg nabocellerne ud som en range... Altså jeg returnerer en range af naboceller.

Eller rettere det er planen, men koden fejler der, hvor jeg anvender Union.

Jeg har lavet koden, da jeg har en kolonne med månedsangivelser (fra Januar til December) og dennes nabokolonne er befolket med beløb. Med funktionen her, søger jeg således, at gøre det muligt at isolere beløbene for de enkelte måneder - f.eks. marts.

Min kode:
----------------------------------------------------------------------------------------------------------------------------------

Function FindNaboTilOmrådeMedTekst(textToLocate As String, SearchRng As Range) As Range
  Dim ResultRng    As Range
  Dim Cel          As Range
  If Not (IsEmpty(SearchRng)) Then
    For Each Cel In SearchRng
        If Not (IsEmpty(Cel)) Then
            If indeholderTeksten(textToLocate, Cel) Then
                If ResultRng Is Nothing Then
                    Set ResultRng = Cel.Offset(0, 1)
                Else:
                    '-----------koden fejler herunder
                    Set ResultRng = Application.Union(ResultRng, Cel.Offset(0, 1))
                    '-----------koden fejler herover
                End If
            End If
        End If
    Next Cel
End If
FindOmrådeMedTekst = ResultRng
End Function

Function indeholderTeksten(textToLocate As String, cellToTest As Range) As Boolean
If InStr(UCase(cellToTest.Value), UCase(textToLocate)) Then
    indeholderTeksten = True
Else:
    indeholderTeksten = False
End If
End Function
----------------------------------------------------------------------------------------------------------------------------------

Der kommer ingen alvorlige fejl, men min brug af Application.Union(ResultRng, Cel.Offset(0, 1)) gør intet?

Hvad mangler jeg?

Ps. Har prøvet at bruge find(), men der kom også en fejl, som jeg ikke kunne gennemskue, så jeg vendte tilbage til noget kode, som (jeg troede) jeg kunne håndtere.
Avatar billede supertekst Ekspert
15. juli 2009 - 16:04 #1
sidste linie i funktionen:

FindOmrådeMedTekst = ResultRng

skal vel også lige suppleres "NaboTil"
Avatar billede aitnemed Novice
15. juli 2009 - 16:16 #2
Hov. Ja, det har du selvfølgelig ret i. Gør nu ikke den store forskel - men godt spottet. :o)
Avatar billede supertekst Ekspert
15. juli 2009 - 16:52 #3
Du skal være velkommen til sende filen - se min mail under profil.
Avatar billede aitnemed Novice
15. juli 2009 - 18:26 #4
Mail er hermed sendt afsted. :o)
Avatar billede aitnemed Novice
17. juli 2009 - 08:53 #5
Tak for hjælpen Supertekst. Det var alletiders - lige hvad jeg manglede!

Smid et svar, så sender jeg nogle point i din retning.
Avatar billede supertekst Ekspert
17. juli 2009 - 09:26 #6
Selv tak - du får et svar og justeringerne publiceres (<<<<<<):

Public Function FindNaboTilOmrådeMedTekst(textToLocate As String, SearchRng As Range) 'As Range    <<<<<<<<<
Dim ResultRng As Range, Cel As Range, tot As Long

    If Not (IsEmpty(SearchRng)) Then
      For Each Cel In SearchRng
          If Not (IsEmpty(Cel)) Then
              If indeholderTeksten(textToLocate, Cel) Then
                  If ResultRng Is Nothing Then
                      Set ResultRng = Cel.Offset(0, 1)
                  Else:
                      '-----------koden fejler herunder
                      Set ResultRng = Application.Union(ResultRng, Cel.Offset(0, 1))
                      '-----------koden fejler herover
                  End If
              End If
          End If
      Next Cel
    End If

    k = ResultRng.Address                          'test <<<<<<<<

Rem Optæller total fra "Union of Ranges"
    For Each adr In ResultRng.Cells                '<<<<<<<<
        tot = tot + adr.Value                      '<<<<<<<<
    Next                                            '<<<<<<<<

FindNaboTilOmrådeMedTekst = tot                    'ResultRng <<<<<<<<
End Function
Avatar billede aitnemed Novice
17. juli 2009 - 10:02 #7
Kunne jeg måske lige lokke dig til at forklare/vise, hvad jeg skulle have gjort, for at min hensigt var lykkes: At returnere en range, som jeg kunne have anvendt SUM() på (denne løsning gør det selv direkte)?
Avatar billede supertekst Ekspert
17. juli 2009 - 10:20 #8
Skal prøve - men jeg tror løsningen bliver indsættelse af en programmeret Sum-formel.
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