Когато използвате тази линия в Excel VBA:
Cells(a, 20).Value = regexProjet.Execute(Cells(a, 1).Value)(0)
Получавам предупреждение, че параметърът или командата са невалидни.
Имам използването на тази линия на много места в моя код и тя работи добре, форматът на клетките са всички стандартни (те са низове ...).
Всеки може да ми даде някои съвети за това какво да търси?
FYI това е начина, по който обявих режекс:
Dim regexProjet As Object
Set regexProjet = CreateObject("VBScript.RegExp")
regexProjet.IgnoreCase = True
regexProjet.Pattern = "^ ([a-z]+)(-)([0-9]+)" "conserve seulement la clé du projet
Отговори:
2 за отговор № 1Ще получите този отговор, ако регулярните изречения не съвпадат с данните ви. За да го избегнете, използвайки техниката, която използвате, първо направете тест, за да видите дали регулярните изрази съответстват на вашия низ.
например:
If regexProjet.test(Cells(a,1).value) then
Cells(a, 20).Value = regexProjet.Execute(Cells(a, 1).Value)(0)
Else
... your error routine
End If
Също така, трябва да имате предвид, че ако просто се опитвате да съответствате на общия модел, няма нужда от групите за заснемане (и те ще добавят време за изпълнение, което прави по-малко ефективни).
0 за отговор № 2
Ето примерния код, който трябва да изпълня в Excel 2013, но е малко по-различен от това, което имате. Получих кода от [Как към редовните изрази]: http://support.microsoft.com/kb/818802
Sub testreg()
Dim regexProjet As New RegExp
Dim objMatch As Match
Dim colMatches As MatchCollection
Dim RetStr As String
RetStr = ""
regexProjet.IgnoreCase = True
regexProjet.Pattern = "^ ([a-z]+)(-)([0-9]+)"
Set colMatches = regexProjet.Execute(Cells(1, 1).Value)
For Each objMatch In colMatches " Iterate Matches collection.
RetStr = RetStr & " " & objMatch.Value
Next
Cells(1, 20).Value = RetStr
End Sub