Just nu i M3-nätverket
Gå till innehåll

Varför ändras cellen jag hämtat info ifrån?


mon935

Rekommendera Poster

Hejsan!

Jag har lite kod som inte riktigt funkar som jag vill. När jag kommer till den sista raden kod där jag försöker ändra värde på variabeln FdVardeCell genom att minska den med markvarde händer något konstigt. Det blir en korrekt förändring på variabelvärdet men cellen som jag hämtade in det ursprungliga värdet till FdVardeCell ändras OCKSÅ. Det var inte planen. Varför händer detta? 

Kan jag gå runt problemet på något vis?

 

(Jag har en stor grund-exceltabell som jag gör omräkningar utfirån till en annan tabell. Varje rad i grundtabellen ska bli till tolv nya rader. När en rad beräknas om har den en "flagga" benämnd "4".  Grundtabellens värden får inte ändras så detta är en smärre katastrof.)

------------------------------------------------------------------------------------------------------------------

Dim searchRange As Range
Dim FdGrundCell As Range
Dim markvarde As Range
Dim FdVardeUtmark As Range
 
 Set searchRange = Range("a10", Range("a10").End(xlDown))
 
 Set markvarde = ActiveCell.Offset(0, -16)
           
 Set FdVardeCell = searchRange.Find(What:="4", LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        True, SearchFormat:=False).Offset(0, 35)
 
 

FdVardeCell = FdVardeCell - markvarde

-----------------------------------------------------------------------------------------------------------------

Någon som   kan hjälpa mig?

 

Länk till kommentar
Dela på andra webbplatser

Ja du jag vet inte riktigt varför. Enda jag har att invända mot är hur du hittar markvarde? Activecell är ett osäkert verktyg.

 

Men du kan  alltid skriva om till:

markvarde = ActiveCell.Offset(0, -16).Value

för att bryta referensen du har där.

Länk till kommentar
Dela på andra webbplatser

Ja du jag vet inte riktigt varför. Enda jag har att invända mot är hur du hittar markvarde? Activecell är ett osäkert verktyg.

 

Men du kan  alltid skriva om till:

markvarde = ActiveCell.Offset(0, -16).Value

för att bryta referensen du har där.

Tack för ditt svar. 

 

Jag förstår dock inte riktigt skillnaden i ditt sätt att skriva och mitt sätt. Du använder ju också ActiveCell.??

 

Ja testade att skriva enligt ditt förslag och då får jag "Körfel nr '91':   Objektvariabel eller With-blockvariabel har inte angetts."

Vad betyder det?

Vad jag förstått så måste jag använda mig av set-komandot när jag har en objektvariabel och det blir det när jag deklarerar den som "as range". Eller har jag fel?

 

ELLER....

....menar du att jag ska byta ut markvarde  mot AcktiveCell.Offset(0, -16).Value   i själva beräkningsformeln? Det kanske funkar men jag behöver variabeln i andra beräkningar så den måste definieras.

Länk till kommentar
Dela på andra webbplatser

Du får förstår deklarera om markvarde till en annan variabeltyp för att det ska fungera, miss av mig:

Dim markVarde as Variant

markVarde = range("a1").value.

 

Du gör annars rätt med activecell, så fort som möjligt låsa värdet i en variabel.

faran med Activecell är att du vet egentligen inte vad för cell koden arbetar med. Bättre att peka upp cell mer exakt, om behov med en dialog.

 Dim rnSource As Range
    On Error Resume Next
    Set rnSource = Application.InputBox("En cell tack", "referens", Type:=8)
    On Error GoTo 0
    If rnSource Is Nothing Then Exit Sub
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...