Avatar billede KenneyD71 Nybegynder
14. juli 2015 - 20:30 Der er 4 kommentarer og
1 løsning

Clear variabler før Call af kopi af subrutine

Jeg har en rutine, jeg anvender til at lave en filrange ud fra nogle definerede ranges.
    Set FillRange = ActiveSheet.Range(AlfaCell, CharlieCell)

Jeg laver en subrutine, der fungerer.
En anden subrutine der fungerer der er en identisk kopi, samme variabelnavne dog med forskelligt input.

Når jeg kører den ene rutine virker det perfekt.
Hvis jeg kører den anden rutine bagefter virker det lige sågodt.

Hvis jeg kører rutine 1 og kalder rutine 2, så får jeg advarslen "out of range".

Er det fordi jeg skal cleare variabler inden jeg kalder rutine2?
ser nogenlunde sådan ud:

Sub Fill_WeekNumber()

Dim AlfaCell As Variant
Dim Alfacellcol As Integer
Dim BravoCell As Variant
Dim Bravocellcol As Integer
Dim Offsetcount As Integer
Dim CharlieCell As Variant
Dim SourceRange As Variant
Dim FillRange As Variant
Dim NameRange As Variant




Cells.Find(What:="Weeknumber", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate


ActiveCell.Offset(1, 0).Activate

AlfaCell = ActiveCell.Address
Alfacellcol = ActiveCell.Column

ActiveCell.Formula = "=WEEKNUM(F2)"

Range("A1").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell.Offset(-1, 0).Activate

BravoCell = ActiveCell.Address
Bravocellcol = ActiveCell.Column
Offsetcount = Alfacellcol - Bravocellcol



CharlieCell = ActiveCell.Offset(0, Offsetcount).Address

    Set SourceRange = ActiveSheet.Range("AP2")
    Set FillRange = ActiveSheet.Range(AlfaCell, CharlieCell)
   
    SourceRange.AutoFill Destination:=FillRange

Set NameRange = ActiveSheet.Range(AlfaCell, CharlieCell)
NameRange.Select



Call Daynumber
End Sub
Sub Fill_Daynumber()

Dim AlfaCell As Variant
Dim Alfacellcol As Integer
Dim BravoCell As Variant
Dim Bravocellcol As Integer
Dim Offsetcount As Integer
Dim CharlieCell As Variant
Dim SourceRange As Variant
Dim FillRange As Variant
Dim NameRange As Variant




Cells.Find(What:="Daynumber", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate


ActiveCell.Offset(1, 0).Activate

AlfaCell = ActiveCell.Address
Alfacellcol = ActiveCell.Column

ActiveCell.Formula = "=Day(F2)"

Range("A1").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell.Offset(-1, 0).Activate

BravoCell = ActiveCell.Address
Bravocellcol = ActiveCell.Column
Offsetcount = Alfacellcol - Bravocellcol



CharlieCell = ActiveCell.Offset(0, Offsetcount).Address

    Set SourceRange = ActiveSheet.Range("AQ2")
    Set FillRange = ActiveSheet.Range(AlfaCell, CharlieCell)
   
    SourceRange.AutoFill Destination:=FillRange

Set NameRange = ActiveSheet.Range(AlfaCell, CharlieCell)
NameRange.Select


End Sub
Avatar billede KenneyD71 Nybegynder
15. juli 2015 - 11:36 #1
Jeg har fundet ud af, en løsninger er at næste rutine "bare" får nye variabel-navne.

Men det kunne være fint, hvis det var muligt at lave et reset, så man ikke skal lave så mange ændringer i den nye version.
Avatar billede Dan Elgaard Ekspert
15. juli 2015 - 14:40 #2
Du kan slette dine variabler i en makro, efter brug, typisk slutningen af makroen, med:

    Erase Variabelnavn

Eventuelt 'tømme' variablerne først:

    Variabelnavn = vbNullString
    Erase Variabelnavn

PS: Da ovenstående ikke virker med alle variabeltyper (dog virker det med dine 'Variant' variabler), bør du køre sletning af variabler under en 'On Error Resume Next' kommando.
Avatar billede KenneyD71 Nybegynder
15. juli 2015 - 17:41 #3
Tak for hjælpen pp.


Kan du kort forklare mig forskellen på

Erase variabelnavn og
variabelnavn.clear
?
Avatar billede Dan Elgaard Ekspert
15. juli 2015 - 19:07 #4
Det gi'r næsten sig selv :-)

Funktionen 'Erase' sletter variablen fuldstændigt fra hukommelsen, mens 'Clear' blot 'tømmer' variablen, men variablen vil stadig være tildelt (være Dim'et og have plads i hukommelsen).
Avatar billede KenneyD71 Nybegynder
16. juli 2015 - 21:14 #5
Tak skal du have, PP.
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