Cześć,
mam taki kod:
Sub Test()
Dim textString As String
Dim PatternToFind As String
Dim tablename As String
tablename = "T_DATACENTERSSOURCE"
textString = "=INDEX(INDIRECT(""T_DATACENTERSSOURCE[DATACENTER]""),MATCH([@RegionName],T_DATACENTERSSOURCE[LOCATIONID]),0))"
**PatternToFind = "(?!""" & tablename & ")"**
If IsNamePresent(textString, PatternToFind) = True Then
MsgBox "ok"
End If
End Sub
Function IsNamePresent(ByVal inputString As String, testName As String)
IsNamePresent = False
With CreateObject("vbscript.regexp")
.Global = True
.IgnoreCase = False
.Pattern = testName
If .Test(inputString) Then IsNamePresent = True
End With
End Function
Jest to tylko przykład na potrzeby tego tematu.
W całościowym makrze robię petlę i w kazdej formule (string), jesli znajde dokładną nazwę tabeli , która nie jest w funkcji "INDIRECT" - dodaje INDIRECT.
Czyli w przykładzie powyżej w ciągu textString dla tabeli T_DATACENTERSSOURCE[LOCATIONID] muszę dodać "INDiRECT".
Ale żeby nie kręcić się wkoło powinien znaleźć czy w danej formule są nazwy tabeli bez cudzysłowy z przodu (to wskazuje czy była użyta funckja INDIRECT czy nie).
Próbuję napisać taki pattern do regex'a, który wskaże czy w danej formula jest dokładna nazwa tabeli bez " z przodu.
Dokładna czyli "T_DATACENTER" juz nie powinno pasować.
Jak to zrobić?
Kod powyżej nie działa (patternToFind jest błędny)
Dzieki za pomoc,
Jacek