2017-03-17 79 views
0

我想将每个月在文本框中更改的宏设置为在对话框中输入的某个月份。
这是我写的。没有错误,但它也没有做这项工作。你能帮助找到问题吗?谢谢。VBA:在文本框中查找字符串并将它们更改为某个字符串

Sub ChangeMonth() 
Dim xWs As Worksheet 
Dim shp As Shape 
Dim xFindStr As String 
Dim xReplace As String 
Dim z As Integer 
Set xWs = Application.Sheets("Mail") 
xReplace = Application.InputBox("Replace to :", "Replacement", "", Type:=2) 
'On Error Resume Next 
For Each shp In xWs.Shapes 
    xValue = shp.TextFrame.Characters.Text 
    For x = 1 To 12 
     shp.TextFrame.Characters.Text = VBA.Replace(xValue, MonthName(x), "xxxx") 
    Next x 
    shp.TextFrame.Characters.Text = VBA.Replace(xValue, "xxxx", xReplace) 
Next 
End Sub 

回答

1

这主要的问题是,你被“XXXX”更换所有的MONTHNAME,但你直接放在形状的文本价值,但你使用xValue

Sub ChangeMonth() 
    Dim xwS As Worksheet 
    Dim ShP As Shape 
    Dim xFindStr As String 
    Dim xReplace As String 
    Dim z As Integer 

    Set xwS = ThisWorkbook.Sheets("Mail") 
    xReplace = InputBox("Replace to :", "Replacement", "", Type:=2) 

    'On Error Resume Next 
    For Each ShP In xwS.Shapes 
     xValue = ShP.TextFrame.Characters.Text 
     For x = 1 To 12 
      xValue = VBA.Replace(xValue, MonthName(x), xReplace) 
     Next x 
     ShP.TextFrame.Characters.Text = xValue 
    Next ShP 
End Sub 
+0

我看到你的逻辑。你是对的。但是,我不得不添加应用程序。到这一行:xReplace = Application.InputBox(“替换为:”,“SociétéGénérale”,“”,类型:= 2)否则会出错。我跑了它。现在它用“假”取代了几个月。你知道为什么吗? – Francis

+1

@FrancisZHENG:'假'...你打了“取消”也许吧?尝试在InputBox部分之后添加'Msgbox xReplace'。我可能没有把你的输入正确。否则,它似乎是确定的。 – R3uK

+0

我测试过了,没有问题。我必须击中“取消”,因为它现在正在工作。最后一个问题,你知道如何编写代码:如果点击“取消”,那么不要做任何替换? – Francis

相关问题