Just nu i M3-nätverket
Jump to content

Uppdatera formel


Norrlandsexpressen

Recommended Posts

Norrlandsexpressen

Hej,

 

jag skriver in en formel i VBA, jag måste för att den skall aktiveras dubbelklicka i den cell den införs i. Den ser ut som:

Range("J104") = "=EXAKT(D4, INDIRECT(ADDRESS(4,9,,,A1000)))"

 

och returnerar #NAMN?

 

Skrivs samma formel in som:

ActiveCell.FormulaR1C1 = _

"=EXACT(R[-100]C[-8], INDIRECT(ADDRESS(4,11,,,R[896]C[-11])))"

 

och returnerar SANT eller FALSKT, behöver jag inte dubbelklicka (eller F2) för att den skall bli aktiv.

 

Jag vill använda första metoden för att skriva in min formel annars blir det ohållbart, vet någon hur jag kan lösa detta problem utan att behöva dubbelklicka i aktuell cell?

 

 

 

Link to comment
Share on other sites

I VBA måste du skriva in formler med deras engelska namn, dvs

 

Range("J104").Formula ="=EXACT(D4, INDIRECT(ADDRESS(4,9,,,A1000)))"

 

troligen det som är felet. Annars gillar jag bättre att antingen arbeta med relativa referenser och med namngivna celler i VBA. Det senare så att koden följer med vid ändringar på bladet, om cellen flyttas eller tas bort.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Norrlandsexpressen

Tusen tack, det fungerar alldeles utmärkt.

 

Vet du också om det går att använda namn på flikar i aktuell formel? Jag har en variabel som heter flik som tilldelats en namn. Jag vill använda variabeln i formeln men får inte till det. Nu har jag löst det genom att ge cell A1000 värdet på denna variabel och sedan använda A1000 i formeln. Det går ju men önskar en smidigare variant om det går.

 

/D

 

Link to comment
Share on other sites

Visst går det

 

enkel funktion på samma blad:

Blad1.Cells(1,2).Formula = "=MAX(A:A)"

 

Om den nu ska jobba på Blad2 och du inte vet namnet när du skriver koden:

Blad1.Cells(1,2).Formula ="=MAX(" & Blad2.Name & "!A:A")

eller för att vara på säkra sidan om ett mellanslag skulle finnas i namnet:

Blad1.Cells(1,2).Formula ="=MAX('" & Blad2.Name & "'!A:A")

 

Ed: samtidigt kan man fråga sig, varför skriver du formler till bladet med kod? Inte bättre att de finns där från början?

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-11-10 15:17:41 av Monshi]

Link to comment
Share on other sites

Norrlandsexpressen

Hej, tack för dina tips, det funkar nog inte för den situation jag har, jag förklarar lite mer vad det är jag vill uppnå.

I ett blad (som jag vet namnet på) kommer jag att infoga en massa data radvis, det kan vara data på 10 rader, 25 rader eller vad som helst. För en del av dessa rader vill jag skapa en egen flik där det ska in diagram och formler som återspeglar värden från den egna raden. Några formler är DGET och jag måste då ha villkoren på samma sida som databasen (vilken är den flik jag vet namnet på och all data finns på). För att inte ha en massa villkor jag kanske inte använder vill jag skapa villkoren för respektive flik i samband med att den skapas. Jag kommer inte att veta ordningen på flikarna så noga så därför var jag ute efter en variant där jag kan referera till en flik med en variabel.

 

Hoppas jag inte missuppfattat ditt inlägg och du har givit lösningen till detta. Så som jag förstått den kod du gav så tar den och infogar formeln i första bladet och tar data från andra bladet. Det innebär att jag måste veta flikens placering räknat från första fliken?

 

/Daniel

 

Link to comment
Share on other sites

Ok, ser inte hela problemet framför mig så jag kan inte säga om du är på rätt spår eller ej. Det mesta i Excel går att göra på mer än ett sätt, låt oss nöja oss med det.

 

Exemplet var ett sätt att plocka namnet från ett blad.

 

Blad1 i exemplet är det namn, den variabel, som finns i VBA som pekar på ett blad. Det är ett namn som man kan ändra endast i VBA-utforskaren och är därmed ett säkert sätt att i koden adressera blad.

 

Det finns några sätt att adressera blad

1: Me - referensen till det blad man kör koden på.

2: VBA-namnet på ett blad. I svenskt Excel Blad#, i engelskt Sheet#

3: Via samligen Worksheets. Adressera med namn, Worksheets("DataBladet"), eller via index, WorkSheets(1)

4: Via, oftast, mindre bra ActiveSheet.

 

1 och två är de bästa alternativen, 3 kan gå fel om användaren ändrar namn och 4 kan man ofta inte vara säker på att det blir rätt blad.

 

Infogar man, skapar man nya flikar i koden är det bra att fånga in referensen till dessa vid skapandet.

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-11-11 11:17:16 av Monshi]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...