Avatar billede HrJensen12 Juniormester
13. december 2014 - 13:26 Der er 1 kommentar og
1 løsning

VBA - mangler lille ændring i kode

Hej alle

VBA-koden nedenfor gør at man kan vise mellemregninger som også er refereret til andre celler, hvilket er meget smart.
Eks:

A1 = 2
A2 = 3
A3 = A1+A2
A4 =udregn(A3)
Nu viser A4: '=2+3

Dog er mit problem at jeg ikke ved hvordan jeg modificere koden så den kan vise værdier fra andre celler der er "låst" eks. $A$1

Eks.:

A1 = 2
A2 = 3
A3 = A1+$A$2
A4 =udregn(A3)
Nu viser A4: '=2+$A$2 hvilke er her hvor koden mangler at blive optimeret.

Det vil være en stor hjælp hvis i kunne hjælpe mig.

På forhånd tak!

VBA-koden:
-----------------------------------

Function Udregn(rngF As Range) As String
    Dim vRefs As Variant, lngRef As Long
    Udregn = "'" & rngF.Formula
    vRefs = Split(PatternExtract(Udregn, "[A-Z]{1,2}[0-9]+", , -1))
    For lngRef = LBound(vRefs) To UBound(vRefs) Step 1
        Udregn = Replace(Udregn, vRefs(lngRef), Round(Evaluate(vRefs(lngRef)), 3), 1, -1, vbTextCompare)
    Next lngRef
End Function

'RegExp Function
Function PatternExtract(strF As String, strPattern As String, _
            Optional boolIgnoreCase As Boolean = True, Optional lngInstance As Long = 1) As Variant
    Dim RegExp As Object, RegExpMatch As Object
    On Error Resume Next
    Set RegExp = CreateObject("vbscript.regexp")
    With RegExp
        .Global = True
        .IgnoreCase = boolIgnoreCase
        .Pattern = strPattern
    End With
    Set RegExpMatch = RegExp.Execute(strF)
    If lngInstance > RegExpMatch.Count Then
        PatternExtract = ""
    Else
        If lngInstance = -1 Then
            For lngInstance = 1 To RegExpMatch.Count Step 1
                PatternExtract = PatternExtract & " " & RegExpMatch(lngInstance - 1)
            Next lngInstance
            PatternExtract = Replace(PatternExtract, " ", "", 1, 1)
        Else
            PatternExtract = RegExpMatch(lngInstance - 1)
        End If
    End If
    Set RegExpMatch = Nothing
    Set RegExp = Nothing
End Function

-----------------------------------
Avatar billede Den Store Stygge ;0) Seniormester
14. december 2014 - 04:24 #1
Indsæt en linie som fjerne dine $   
Lige efter:
On Error Resume Next

strF = Replace(strF, "$", "")

Håber det giver mening ;0)
Avatar billede HrJensen12 Juniormester
14. december 2014 - 10:10 #2
Perfekt...
Tak! :)
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
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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