我在 VBA 上编写了一个非常简单的 Ceaser Cipher 加密算法。它接受一个字符串值并应用 x 移位。
很满意。但是,想把它带到下一步,但我不确定它是否可行。
我想在另一个模块中调用这个加密函数并传递一个字符串值来加密。
IE。我想做的是这样的
Private Sub Encryption()
'Encryption method of string Var
End Sub
---- 和另一个子 ----
Private Sub function()
Dim Text as String
Text = "Hello"
Encryption(Text)
End Sub
所以在这个例子中,我定义了一个加密任何字符串变量的方法。在另一个函数中,我定义了一个字符串并将其初始化为“Hello”。然后对其调用加密功能...不确定这在 VBA 中是否可行?
当我在函数中调用函数时,我不确定如何传入变量。请问有什么建议吗?
最佳答案
您需要更改 Sub Routine to a Function .另外,去掉 Private
关键字,因为这将不允许您跨不同的模块调用它。
所以改变这个:
Private Sub Encryption()
'Encryption method of string Var
End Sub
对此:
Function Encryption(ByVal inputString as String) As String
'Encryption method of string Var
End Sub
现在,在您的函数中,您需要将保存第一个字符串(要加密的字符串)的任何变量更改为新创建的变量
inputString
.在这方面很难为您提供帮助,因为您没有提供 Sub Encryption()
的完整代码.此外,请确保您设置了 功能 将自己命名为函数中新加密的文本。因此,您的函数基本上如下所示:
Function Encryption(ByVal inputString as String) As String
'Encryption method of string Var
Encryption = 'the value to return from this function
End Sub
现在,您的第二个子将如下所示:
Private Sub test()
Dim Text as String, encryptedText as String
Text = "Hello"
encryptedText = Encryption(Text)
End Sub
您只需创建新变量
encryptedText
等于新函数 Encryption
.因此,
Sub
之间的主要区别和 Function
是一个函数将返回值。它们基本上都以相同的方式处理代码。方法 2(编辑)
在重新考虑您的问题后,我相信您是在使用您的 Sub 通过将变量传递为
ByRef
来获取加密文本。 ,并且您可能只是因为 Private
而无法调用 Sub关键词。如果这是发生了什么,那么您可以简单地删除 Private 关键字,它应该可以按预期工作。
所以你的 Sub 应该是这样的:
Sub Encryption() '<-- Notice, no Private scope
'Encryption method of string Var
End Sub
或者
Public Sub Encryption()
'Encryption method of string Var
End Sub
你应该采取look at this有关范围的其他阅读。
关于VBA 加密方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976371/