2017-05-16 42 views
2

我希望能夠使用字符串變量來調用諸如left()和right()之類的應用程序函數。Excel VBA - 按名稱調用應用程序函數(左,右)

原因是我目前的代碼工作正常,但有多個left()和right()實例,每次運行時都可能需要更改。我希望每次只能更改一次(「全局」)。

谷歌搜索後,我試圖CallByNameApplication.Run。看起來他們只能使用自定義的類/宏。這是真的?還有什麼我應該看看?我不需要特定的代碼,謝謝!

+0

什麼你想要做什麼?目前爲止的代碼是什麼?你正嘗試在VBA中使用'LEFT()'? – BruceWayne

+0

我不明白你的意思是字符串變量。你的意思是傳遞給函數Right(「TheLastLetterIsR」,「1」),其中數字1是一個字符串? –

回答

3

如果你想LeftRight,你可以建立一個自定義函數。

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。 您甚至可以使用單元格引用來執行此操作,並在運行代碼之前更新單元格。

結果

堆棧

溢出

+0

我試圖避免寫我自己的功能,但似乎沒有辦法繞過它。非常感謝你! – lemon

1

最簡單的解決方法是用一個通用函數替換所有的LeftRight調用。而不是

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 

然後,你可以改變一個功能需要。

+0

謝謝你的好評!我選擇了Scott Holtzman的解決方案,因爲我可以在主模塊中將其與其他變量一起更改。 – lemon

1

你也可以使用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 
+0

酷 - 我剛剛學到了一些新東西。 –