Prøver at lave en VBA kode der kan bruges gennem rækkerne,men det vil ikke ,som jeg vil..
Eks.
I D1 skrives funktionen : =Test(), VBA koden skal da tage eks. og sige summer de 3 celler (A1+B1+C1) der ligger til venstre for udgangscellen (den celle der kalder VBA funktionen) og returner den samlede værdi. Men da det er den samme funktion der skal kaldes i D2,D3,D4 osv. så skal det gøres relativt.
har rodet lidt med dette kald..
With Application.Caller CallerRow = .Row CallerCol = .Column CallerAddr = .Address End With
men når jeg skal bruge dette i det relative, ja så ........
Nogen der forstår problem og evt. har et foreslag ?
Højreklik på arkfanen Vælg Vis Program kode Indsæt følgende kode der
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then Exit Sub col = Application.Min(3, (Target.Column - 3) + 2)
'Hvis du foretr?kker blot at f? resultatet af SUM s? anvend istedet denne: 'Target = Evaluate("=Sum(" & Target.Offset(0, -col).Resize(1, col).Address & ")")
Ikke helt den ting jeg ledte efter ( dog lidt god eksempel på relativ adresse).
Grunden til min funktion er at der på mange rækker skal´laves den samme beregning, dog kan der indsættes og slættes rækker af bruger, samt at så er der kun et sted der skal ændres ved evt. rettelse/udvidelse. Ved indsættelse af række skal jeg da kun indsætte denne ene funktion.
Jeg er nok tungnem. Hvorfor skal du bruge en funktion til så simpel en opgave som at summere? Funktionen er nem nok at lave, men hvorfor ikke bare en formel i cellen, hvor du så kopierer cellen, og referencerne flytter med?
Fordi at der i denne kode skal forgå en del mere. Man skal kunne slette og indsætte rækker uden at referencer bliver brudt. Derfor i princippet skal der kun kigges u den enkelte række, men der skal foregå relativt, da det på forhånd ikke vides om der er 10 eller 20 rækker (som bruger selv indsætter eller sletter med en anden VBA funktion). Ved at gøre det på denne måde skal jeg kun indsætte en formel (kald af VBA funktion) et sted i rækken og resten i rækken regnes ud fra denne. Samtidigt skal jeg ikke flere steder rundt for at rette hvis/når der ændres i beregningen, men kan nøjes med at gøre det et sted..
Eric Bentzen via cementir.onmicrosoft.com tir. 7. aug. 11.02 (for 4 dage siden) til Eric
Function Test(ByVal rInput As Range) As Double Dim rCell As Range
For Each rCell In rInput If IsNumeric(rCell) = False Then GoTo BeforeExit Next
Test = WorksheetFunction.Sum(rInput)
BeforeExit: Set rCell = Nothing Set rInput = Nothing End Function
Synes godt om
Ny brugerNybegynder
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.