VBA错误:公式中使用的值是错误的数据types?
我试图创build一个函数,生成一个秘密编码的消息。 它有三件事:一个string,例如“testingtestingonetwothree”,以及所需的字符数,例如5,以及所需的字数,例如5.它通过从第一个字符开始生成消息,并通过string提取每五个字符,将这些字符放入一个码字中,然后从第二个字符开始,通过string提取每五个字符,将这些字符放入第二个码字,依此类推。 它只输出一个string,用空格分隔代码字。 所以这个例子会产生:“tntnt egieh stntr tegwe isooe”。
我在编码方面没问题,但VBA新手。 我已经做了我认为是有效的function,但是当它在电子表格中使用时,我会得到#VALUE! 错误:“公式中使用的值是错误的数据types”。 这是我所做的用户定义的function:
Function encode(strng, numchars, numwords) Dim word As Integer Dim step As Integer Dim temp As String Dim output As String For word = 1 To numchars step = word temp = "" Do While step <= Len(strng) temp = temp & Mid(strng, 1, step) step = step + numchars Loop If word = 1 Then output = temp Else output = output & " " & temp Next word encode = output End Function
而当它在电子表格中使用时,我只是把它叫做
=encode(A16,A7,A10)
如果A16包含testtestingonetwothree,则A7包含5,而A10包含5。
我的function好吗? 还有什么你们可以看到哪些可能会给价值错误? 任何帮助将不胜感激,非常感谢阅读。
编辑:这现在输出一个值,但错误的值。 它输出:“ttestintestingtesttestingtestingontestingtesting testonetwot tetestingtestingtestiteing testing testing testing testing onetwoth”,当它输出:“tntnt egieh stntr tegwe isooe”时。 你有什么可以看到我的function做错了吗?
编辑2:固定Mid函数后,按照vacip的答案,temp = temp&Mid(strng,step,1),函数现在生成正确的答案。
好吧,大家都说它是有效的,但对我来说,它不会产生所需的输出。 什么…?
无论如何,我认为你的Mid函数的顺序是错误的,尝试像这样:
temp = temp & Mid(strng, step, 1)
另外,确保正确地声明你的variables,如下所示:
Function encode(strng As String, numchars As Integer, numwords As Integer) As String
我也重写了你的IF语句,对我来说,单线的事情是很奇怪的。
If word = 1 Then output = temp Else output = output & " " & temp End If
这样它对我有效。
其他人已经解决了types问题。 这是一个不同的build议。 您所描述的密码是一个简单的转置密码,特别是一个列转换( https://en.wikipedia.org/wiki/Transposition_cipher#Columnar_transposition )
人们使用这种预先计算机的方式是将字符逐行写入网格,然后逐列阅读。 事实上 – 即使是在电脑上,这仍然是最简单的方法。 声明一个可重定义为具有例如5列(其中5是字母之间的跳跃)的数组的变体,并且行的数量被select为足够大以便网格可以保持string。 在逐行加载字符之后,使用嵌套for循环逐列读取它们。
一旦你得到一个基本的例子工作,你可以尝试实现一个版本,使用一个密钥来确定您读取列的顺序,以增加安全性。
编码经典密码学/密码分析是学习编程语言的一种很好的方法。 当我尝试学习一门新语言时,我所做的第一件事就是实现一个Vigenere密码。 即使它已经很长时间了,翻译成现代方言Basic有些棘手,Caxton Foster的书“微型计算机的密码分析(Cryptanalysis for Microcomputer)”非常有趣,可以从网上书店购买几美元。
你需要定义你的函数的types。 所以在这种情况下,我相信你会想要的
Function encode(strng, numchars, numwords) As String
我完全按照原样testing了你的代码,而且工作正常。
所以,你的问题可能是:
- 你的function的某个论点是不正确的types。 (我敢打赌,
len
方法是那里的问题)。
检查A16
是否真的是一个string。 如果不是,如果你想要传递数字,就考虑把它转换成一个string:
Function encode(strng as variant, numchars as integer, numwords as integer) as string strng = str(strng)
检查A7
和A10
是否真的是整数。