2017-09-20 87 views
1

覆蓋問題:是否可以在VBA中將公式編碼保存爲變量,而不將它們放在工作表上的單元格中?在VBA中編寫公式導致類型不匹配13

我得到的錯誤爲開頭的行「My_Date =左(更換」 ......我相信它也將是一個問題「My_Take =右(更換」行。

功能應該拿號碼的開出字符串:

Public Function SplitText(pWorkStr As String, pIsNumber As Boolean) As String 

Dim xLen As Long 
Dim xStr As String 
xLen = VBA.Len(pWorkStr) 
For i = 1 To xLen 
    xStr = VBA.Mid(pWorkStr, i, 1) 
    If ((VBA.IsNumeric(xStr) And pIsNumber) Or (Not (VBA.IsNumeric(xStr)) And Not (pIsNumber))) Then 
     SplitText = SplitText + xStr 
    End If 
Next 
End Function 

此格式的數字爲日期,並採取沒有任何字母:

Sub Fill_Date_and_Take() 

    Dim NAMEoFILE As String 

    Dim My_Date As String 
    Dim My_Take As String 

    NAMEoFILE = "I love dogs 09-20-17 Take Number 2.xlsx" 

    My_Date = Left(Replace(Replace(Replace(SplitText(NAMEoFILE, True), 2, 0, "-"), 5, 0, "-"), 8, 0, "_"), 7) 
     MsgBox (My_Date) 

    My_Take = Right(Replace(Replace(Replace(SplitText(NAMEoFILE, True), 2, 0, "-"), 5, 0, "-"), 8, 0, "_"), 1) 
     MsgBox (My_Take) 

End Sub 
+2

您正在將'' - 「'傳遞給['Replace'函數]的'Start'參數(https://msdn.microsoft.com/zh-cn/vba/language-reference-vba/articles/替代功能)。它期望一個'長'。 – GSerg

+2

作爲一個方面說明,'SplitText'內的大條件可以簡化爲'If VBA.IsNumeric(xStr)= pIsNumber Then''。 – GSerg

+1

嗨Gserg,謝謝你的幫助!我希望使用「 - 」,「 - 」和「_」來設置日期的格式。當我在單元格中運行它時,它可以工作。你知道爲什麼它不會在VBA代碼? ...在一個單元格中,它表示替換(舊文本,起始編號,字符數,新文本),這就是我爲什麼要這樣格式化的原因。 – mitchmitch24

回答

0

我有點新的堆棧溢出,所以我不是肯定的怎麼送et GSerg對答案的評論,但我所要做的只是將每個「替換」改爲「WorksheetFunction.Replace」!

My_Date = Left(WorksheetFunction.Replace(WorksheetFunction.Replace(WorksheetFunction.Replace(SplitText(NAMEoFILE, True), 2, 0, "-"), 5, 0, "-"), 8, 0, "_"), 7) 

My_Take = Right(WorksheetFunction.Replace(WorksheetFunction.Replace(WorksheetFunction.Replace(SplitText(NAMEoFILE, True), 2, 0, "-"), 5, 0, "-"), 8, 0, "_"), 1) 

謝謝GSerg!