在vba函数中绕过Max String大小?

Omm*_*mit 17 excel ontime vba excel-vba

vba函数中字符串中可以使用的最大字符数为255.我正在尝试运行此函数

Var1= 1
Var2= 2
.
.
.
Var256 =256

RunMacros= "'Tims_pet_Robot """ & Var1 & """ , """ & Var2 & """ , """   ... """ & Var256 """ '"
Runat=TimeValue("15:00:00")
Application.OnTime EarliestTime:=Runat, Procedure:=RunMacros & RunMacros2 ', schedule:=True
Run Code Online (Sandbox Code Playgroud)

它在某个时间运行一个过程并将一堆变量传递给它.但是字符串太长了.

更新:遗憾的是,我确信它不是观察窗口.而且,它实际上并不是我正在处理的字符串的最大大小.它是vba函数中字符串的最大大小.

例如,此功能有效.

Sub test()
Dim RunAt As Date
Dim RunWhat As String

RunAt = Now + 0.00001
RunWhat = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 'that makes 254 'a''s
Application.OnTime EarliestTime:=RunAt, Procedure:="'" & RunWhat & " 12'"

End Sub


Sub aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(m As Integer)
MsgBox ("it works!" & m)
End Sub
Run Code Online (Sandbox Code Playgroud)

但是如果你将12更改为123则会破坏示例

Sub test2()
Dim RunAt As Date
Dim RunWhat As String

RunAt = Now + 0.00001
RunWhat = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 'that makes 254 'a''s
Application.OnTime EarliestTime:=RunAt, Procedure:="'" & RunWhat & " 123'"

End Sub


Sub aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(m As Integer)
MsgBox ("it works!" & m)
End Sub
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用,我很确定这是因为vba函数无法处理超过255个字符的字符串.即使你在Excel中并调用一个函数并给它一个字符串更长的255个字符它也不起作用.

尝试单元格A1 = vlookup("真正的长字符串",A1:Z10,1)然后将真正长字符串放在该范围内的某个位置.vlookup将失败(找不到它,但你实际上无法做到)

另外我知道子名称有一个最大长度,我就在它之下.对不起,它看起来很难看.

更新2:所以我最终将变量打印到工作表并获取ontime调用的函数以从工作表中读取它们.:(

Kev*_*ock 15

这样可以在消息框中显示超过255个字符.

Sub TestStrLength()
    Dim s As String
    Dim i As Integer

    s = ""
    For i = 1 To 500
        s = s & "1234567890"
    Next i

    MsgBox s
End Sub
Run Code Online (Sandbox Code Playgroud)

消息框将字符串截断为1023个字符,但字符串本身可能非常大.

我也建议,而不是使用固定变量名称与数字(例如Var1,Var2,Var3,... Var255),您使用的数组.这是更短的声明和更容易使用 - 循环.

这是一个例子:

Sub StrArray()
Dim var(256) As Integer
Dim i As Integer
Dim s As String

For i = 1 To 256
    var(i) = i
Next i

s = "Tims_pet_Robot"
For i = 1 To 256
    s = s & " """ & var(i) & """"
Next i

    SecondSub (s)
End Sub

Sub SecondSub(s As String)
    MsgBox "String length = " & Len(s)
End Sub
Run Code Online (Sandbox Code Playgroud)

更新此项以显示字符串可以超过255个字符,并在子例程/函数中用作参数.这表明字符串长度为1443个字符.VBA的实际限制是每串2GB.

也许您正在使用的API存在问题,并且对字符串有限制(例如固定长度字符串).问题不在于VBA本身.

好的,我看到问题特别是Application.OnTime方法本身.它的行为类似于Excel函数,因为它们只接受长度最多为255个字符的字符串.VBA程序和功能虽然没有我所示的这个限制.也许这个限制是针对任何内置的Excel对象方法施加的.


更新:
更改...longer than 256 characters......longer than 255 characters...

  • 感谢您的回复。你是对的。vba中的函数最多可以处理2 GB的字符串!谢谢。但是当您意识到我真正的问题是像Exel函数那样使用Application.OnTime方法时,它只能处理大小为255的字符串。我想我应该接受我将不得不处理此限制吗?我希望周围有办法。 (2认同)

小智 13

我可能在这里错过了一些东西,但为什么你不能只用你想要的大小声明你的字符串?例如,在我的VBA代码中,我经常使用类似的东西:

Dim AString As String * 1024
Run Code Online (Sandbox Code Playgroud)

它提供1k字符串.显然,您可以在更大的Excel限制和可用内存等中使用您喜欢的任何声明.

在某些情况下,这可能有点低效,您可能希望使用Trim(AString)之类的结构来消除任何多余的尾随空白.不过,它很容易超过256个字符.


Pru*_*der 9

你确定吗?这个论坛帖子暗示它可能是你的观察窗口.尝试将字符串输出到MsgBox,最多可显示1024个字符:

MsgBox RunMacros
Run Code Online (Sandbox Code Playgroud)

  • 255个对象/字符是监视窗口的最大值.我在过去遇到了与Collection Object相同的问题. (4认同)