2014-12-11 4 views
0

Я сделал следующий скрипт, и у меня есть проблема, две первые замены работают, но не заменяют if. Я пробовал много разных способов, но он все еще не работает Знаете ли вы, почему?Проблема на скрипте excel vba

Private Sub CommandButton1_Click() 

Dim totalCases As Integer 
totalCases = Range("Q1").End(xlDown).Row 

    For caseNb = 2 To totalCases Step 1 
     replace_me_that caseNb, 17 
    Next caseNb 

    For caseNb = 2 To totalCases Step 1 
     replace_me_that caseNb, 18 
    Next caseNb 

End Sub 

Private Sub replace_me_that(ByVal caseNb As Integer, ByVal column As Integer) 

Dim val As String 
Dim objRegExp As Object 
If (Cells(caseNb, column).Value = "") Then 
    Exit Sub 
End If 
     val = Cells(caseNb, column).Value 
     Set objRegExp = CreateObject("VBScript.RegExp") 
      With objRegExp 
       .Global = True 
       .IgnoreCase = True 
      End With 
     objRegExp.Pattern = "\s*\(0\)\s*|\s*[()]\s*" 
     val = objRegExp.Replace(val, "") 
     val = Replace(val, ".", "")      =>work 
     val = Replace(val, " ", "")      =>work 
     If (Left(val, 2) = "33") Then      =>condition true 
      val = Replace(val, "33", "+33", 1)   =>don't work 
     End If 
     Cells(caseNb, column).Value = val 

End Sub 

ответ

0

Я нашел ошибку, каждая ячейка была отформатирована как целое, а не текст. Теперь он работает

0

Мое предположение было бы, что либо 33, содержащаяся в ячейке рассматривается как целое или, возможно, что вам нужно установить последнюю опцию «vbcomparetext». Обычно я использую эту опцию, когда я сравниваю строки, и это нормально работает для меня. Удачи.

+1

Просто добавьте, что если это так, вы можете также обернуть val в строку: If (Left (str (val), 2) = "33") –

+0

@Mark Moore Я не могу do str (val) cause val уже является строкой. –

+0

@ Томас Бек Саттон Как? потому что функция LEFT принимает два аргумента (строка, количество символов), нет другого аргумента, который я думаю. Может быть, у вас есть другое решение, чем функция LEFT? –

Смежные вопросы