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

Dynamiskt värde (VBA)


Martassen

Rekommendera Poster

Jag behöver lite hjälp.

Jag har ett dynamiskt värde i cellen P8, vilket rör sig upp och ner. I cellen Q8 vill jag spara det högsta värdet som P8 antagit någonsin.

I Visual Basic Editor skapar jag en ny Modul där jag skriver:

 

Private Sub Worksheet_Calculate()

If Range("P8") > Range("Q8") Then

Range("Q8") = Range("P8")

End If

End Sub

 

 

Jag fattar inte riktigt vad som är fel. Ska jag skriva nåt i Q8 för att hämta den här modulen eller något i den stilen? Jaja, det fungerar inte i alla fall. Q8 är blank. Jag vill att detta ska ske automatiskt, alltså när jag matar in ett värde i en cell som i sin tur påverkar P8 så ska Q8 uppdateras om nu P8 är större. Jag vill inte ha ett macro som jag ska behöva trycka på köra varje gång för att uppdatera Q8. Jag vill att detta ska fungera för flera blad i samma workbook.

 

Tacksam för hjälp!

Länk till kommentar
Dela på andra webbplatser

Worksheet_Calculate är en händelse som sker på ett arbetsblad och denna kod måste då vara sparad på det arbetsblad som händelsen ska ske på, ej i en modul.

 

Om du vill att samma händelse ska ske på flera blad då får du använda en händelse i ThisWorkbook:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

och i denna kontrollera vilket blad (Sh) som det ändrats på och vilken cell (Target).

 

Notera att denna funktion körs VARJE gång något värde ändras i din bok. VARJE gång. behöver jag säga att jag brukar inte rekommendera användandet av dessa funktioner om man absolut inte måste eftersom de kan ge mer problem än det är värt.

 

För att hålla lite ordning på dessa funktioner finns det två knep

1: Se alltid till att det första som sker i funktionen är en snabb och enkel kontroll ifall funktionen ska köras eller ej. I ditt fall, om det är samma cell på alla blad, se till att kontrollera om det är den cellen och enbart den cellen som finns i Target.

 

2: Om du har annan kod som arbetar med att ändra på bladet, se till att stänga av händelserutiner innan denna skriver till bladet. Glöm inte aktivera dem igen

Application.EnableEvents

 

Och sista ord - måste du kontrollera varje ändring? Du kan inte lösa det på annat vis? Exempelvis genom att kontrollera värdet när bladet inaktiveras?

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

 

Tråden flyttad till VBA

Länk till kommentar
Dela på andra webbplatser

  • 3 veckor senare...

Det var att jag inte fattade att jag skulle lägga koden i ThisWorkbook.

 

Tack för hjälpen!

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...