Avatar billede kim1a Ekspert
27. juni 2014 - 16:14 Der er 3 kommentarer og
1 løsning

VBA variabel har "forkert" værdi

Jeg har en længere VBA som kort fortalt importerer et txt til Excel. Arket er timeregistreringer for flere steder. Derefter laver jeg et opslag mod en liste og sletter via filterfunktionen dem som ikke tilhører det sted brugeren har valgt.
Så skal jeg lave yderligere opslag på den tilbageværende mængde, og her går det så galt.

Jeg er en smule novice og derfor er min proces for at skabe opslag som følger:

Cells(1, 14).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-10],'" & "Opslag'!R1C7:R14C8,2,FALSE)"
Selection.Copy
Selection.AutoFill Destination:=Range(Selection, Selection.Offset(IntsidsterækkenrKon1 - 2, 0))
Columns(14).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Altså vælg celle, skriv en formel, kopier formlen og indsæt den så fra cellen jeg står i, til et celle nr defineret af en variabel - i dette tilfælde IntSidsteRækkenrKon1. Den variabel er skabt af:
   
    Do
    x = x + 1
    Loop Until Worksheets("kontrolfil").Cells(x, 16) = ""
    IntsidsterækkenrKon1 = x - 1

Problemet er at denne variabel først skal udregnes efter jeg har slettet som forklaret ovenstående, og af en eller anden grund udregnes den før sletningen.

Er der en måde at sikre variablen først udregnes efter sletningen?

Lang forklaring for måske simpelt spørgsmål - jeg håber det er forståeligt.

Udfordringen er at jeg har prøvet at køre denne del på arket efter jeg manuelt skaber dokumentet ud fra txt, og her fungerer den fint - og txt-importdelen er skabt af en anden, så jeg kan ikke rette i det.
Avatar billede finb Ekspert
27. juni 2014 - 16:21 #1
Lav det i 3 subs, du har allerede
selv lavet sub1 og sub2:

SUB3
call SUB1
call SUB2
END SUB3

SUB1:
Cells(1, 14).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-10],'" & "Opslag'!R1C7:R14C8,2,FALSE)"
Selection.Copy
Selection.AutoFill Destination:=Range(Selection, Selection.Offset(IntsidsterækkenrKon1 - 2, 0))
Columns(14).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
END SUB1

SUB2:
Do
    x = x + 1
    Loop Until Worksheets("kontrolfil").Cells(x, 16) = ""
    IntsidsterækkenrKon1 = x - 1
END SUB2
Avatar billede kim1a Ekspert
30. juni 2014 - 11:40 #2
Smukt, såre simpelt - smid et svar.
Tak for hjælpen.
Avatar billede finb Ekspert
30. juni 2014 - 15:37 #3
her er svar, det er kun finb, du skal give point, ikke dig selv
Hej.
Avatar billede kim1a Ekspert
30. juni 2014 - 16:32 #4
Ja jeg ved det - men jeg sikrer på denne måde at de ikke står og hænger i flere uger hvis ikke du svarer.
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