Avatar billede claus_lind Praktikant
04. august 2018 - 19:59 Der er 5 kommentarer

VBA kode relativt

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 ?

Mvh. Claus
Avatar billede excelent Ekspert
05. august 2018 - 08:59 #1
Her er en Dobbeltklik-løsning

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)

'Denne inds?tter SUM-formel:
Target.Formula = "=Sum(" & Target.Offset(0, -col).Resize(1, col).Address & ")"

'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 & ")")

Target.Offset(1, 0).Select
End Sub
Avatar billede claus_lind Praktikant
05. august 2018 - 12:16 #2
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.

Mvh. Claus
Avatar billede Sitestory Mester
06. august 2018 - 20:13 #3
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?
Avatar billede claus_lind Praktikant
06. august 2018 - 22:17 #4
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..

Mvh. Claus
Avatar billede Sitestory Mester
11. august 2018 - 17:10 #5
Måske det noget à la dette, du søger:


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

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