我希望能夠使用字符串變量來調用諸如left()和right()之類的應用程序函數。Excel VBA - 按名稱調用應用程序函數(左,右)
原因是我目前的代碼工作正常,但有多個left()和right()實例,每次運行時都可能需要更改。我希望每次只能更改一次(「全局」)。
谷歌搜索後,我試圖CallByName和Application.Run。看起來他們只能使用自定義的類/宏。這是真的?還有什麼我應該看看?我不需要特定的代碼,謝謝!
我希望能夠使用字符串變量來調用諸如left()和right()之類的應用程序函數。Excel VBA - 按名稱調用應用程序函數(左,右)
原因是我目前的代碼工作正常,但有多個left()和right()實例,每次運行時都可能需要更改。我希望每次只能更改一次(「全局」)。
谷歌搜索後,我試圖CallByName和Application.Run。看起來他們只能使用自定義的類/宏。這是真的?還有什麼我應該看看?我不需要特定的代碼,謝謝!
如果你想Left
或Right
,你可以建立一個自定義函數。
Option Explicit
Sub Test()
Debug.Print LeftRight("L", "StackOverflow", 5)
Debug.Print LeftRight("R", "StackOverflow", 8)
End Sub
Function LeftRight(sWhich As String, sValue As String, iLength As Integer) As String
Select Case sWhich
Case "L": LeftRight = Left(sValue, iLength)
Case "R": LeftRight = Right(sValue, iLength)
End Select
End Function
您只需根據需要使用「L」或「R」。改一次,每次通過爲sWhich
。 您甚至可以使用單元格引用來執行此操作,並在運行代碼之前更新單元格。
結果
堆棧
溢出
我試圖避免寫我自己的功能,但似乎沒有辦法繞過它。非常感謝你! – lemon
最簡單的解決方法是用一個通用函數替換所有的Left
和Right
調用。而不是
x = Left("abc", 2)
說
x = LeftOrRight("abc", 2)
,然後有一個功能
Function LeftOrRight(str As Variant, len As Long) As Variant
'Uncomment this line for Left
LeftOrRight = Left(str, len)
'Uncomment this line for Right
LeftOrRight = Right(str, len)
End Function
然後,你可以改變一個功能需要。
謝謝你的好評!我選擇了Scott Holtzman的解決方案,因爲我可以在主模塊中將其與其他變量一起更改。 – lemon
你也可以使用SWITCH
實現斯科特的想法(沒有錯誤處理,如果字符串長度無效):
Sub Test()
Debug.Print LeftRight("L", "StackOverflow", 5)
Debug.Print LeftRight("R", "StackOverflow", 8)
End Sub
Function LeftRight(sWhich As String, sValue As String, iLength As Integer) As String
LeftRight = Switch(sWhich = "L", Left$(sValue, iLength), sWhich = "R", Right$(sValue, iLength))
End Function
酷 - 我剛剛學到了一些新東西。 –
什麼你想要做什麼?目前爲止的代碼是什麼?你正嘗試在VBA中使用'LEFT()'? – BruceWayne
我不明白你的意思是字符串變量。你的意思是傳遞給函數Right(「TheLastLetterIsR」,「1」),其中數字1是一個字符串? –