Avatar billede mr.handstand Novice
17. juni 2004 - 10:00 Der er 7 kommentarer og
1 løsning

Referere til et range som parameter i sub/function

Hej,

I Excel XP, VBA - Hvordan overfører jeg dér en reference til en funktion/sub.

jeg har læst mig til at det er for langsomt at arbejde med at selecte cells i Excel.

Jeg forsøger derfor, uden brug af "select" / "ActiveCell" at bearbejde et sæt celler, som traverseres ud for forskellige regler.

Er der én der har et eksempel, der i et loop baseret på "offset" bearbejder den aktuelle celle. Måske er det nemmere at forstå ud fra koden:

Jeg ønsker følgende kald i min kode:

removeColorAndComments (Range("firstCostCenter").Offset(i, j + k))

Private Sub removeColorAndComments(thiscell As Range)
    thiscell.Interior.ColorIndex = 19
    If Not thiscell.Comment Is Nothing Then
        thiscell.Comment.Delete
    End If
End Sub

Jeg forsøger altså at undgå at select'e min "offset". Kan jeg det?
Avatar billede bak Forsker
17. juni 2004 - 10:38 #1
et eksempel

Sub test()
Dim i As Long, j As Long
For i = 1 To 30
    For j = 1 To 10
      removeColorAndComments [FirstCostCenter].Offset(i, j)
    Next
Next
End Sub

Private Sub removeColorAndComments(thiscell As Range)
    thiscell.Interior.ColorIndex = 19
    If Not thiscell.Comment Is Nothing Then
        thiscell.Comment.Delete
    End If
End Sub
Avatar billede bak Forsker
17. juni 2004 - 10:42 #2
så dit eget eksempel skulle faktisk køre ganske fint bortset fra paranteserne
removeColorAndComments Range("firstCostCenter").Offset(i, j + k)
Avatar billede mr.handstand Novice
17. juni 2004 - 12:22 #3
Lad os starte med "" i forhold til []. Jeg tror ikke helt jeg forstår hvorfor jeg skal erstatte " med brackets.

Når jeg kører
Debug.Print Range([firstCostCenter]).Offset(i, j + k).Address
får jeg fejl

Men
Debug.Print Range("firstCostCenter").Offset(i, j + k).Address
virker.
firstCostCenter er en navngiven celle.
Jeg får en run-time error med [] brackets "Method 'Range' or of object '_Global failed.

Så - desværre Bak, så skal jeg lige bruge en iteration på at forstå din (ellers altid korrekte) guidance... :-)
Avatar billede bak Forsker
17. juni 2004 - 12:45 #4
at sætte et navn i [brackets] betyder bare at man kan undlade at skrive Range() foran :-)

Debug.Print [firstCostCenter].Offset(i, j + k).Address
Avatar billede bak Forsker
17. juni 2004 - 12:46 #5
fx er disse to sætninger ens
Range("firstCostCenter").select
[firstCostCenter].select

eller

Range("A3").select
[A3].select
Avatar billede mr.handstand Novice
17. juni 2004 - 13:12 #6
Jamen, det havde du jo også selv så rigtigt gjort i dit eksempel, som jeg tydeligvis ikke fik nærlæst ordentligt :-)

Tak for hjælpen.
Avatar billede mr.handstand Novice
17. juni 2004 - 13:12 #7
Bak, sætter du lige et svar ind og får tildelt point.
Avatar billede bak Forsker
17. juni 2004 - 13:18 #8
ok :-)
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