2017-03-17 82 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

相關問題