Макс. количество символов, которые можно использовать в строке в функции 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
Это выполняет процедуру в определенное время и передает набор переменных к нему. но строка является слишком длинной.
Обновление: К сожалению, я уверен, что это не окно часов. Кроме того, это не действительно макс. размер строки, с которой я имею дело. Это - макс. размер строки в функции 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
Но если Вы изменяете 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
Этот код не работает, я вполне уверен, это - потому что функция vba не может обработать строку больше чем с 255 символами. Даже если Вы находитесь в Excel и вызываете функцию и даете ему строку дольше, что 255 символов он не работает.
Попробуйте в ячейке A1 =vlookup ("действительно длинная строка", A1:Z10, 1) и затем поместите действительно длинную строку где-нибудь в тот диапазон. vlookup перестанет работать (не, не удаются найти его, но Вы на самом деле не сможете сделать это),
Также я знаю, что существует макс. длина к имени sub, я просто нахожусь под нею. Извините, что это выглядит настолько ужасным.
Обновление 2: таким образом, я только что закончил тем, что печатал переменную к листу и заставил функцию, вызванную ontime читать их от листа.:(
Это работает, и в окне сообщения отображается более 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
В окне сообщения строка обрезается до 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
Обновлен, чтобы показать, что строка может быть длиннее 255 символов и таким образом использоваться в подпрограмме / функции в качестве параметра. Это показывает, что длина строки составляет 1443 символа. Фактический предел в VBA составляет 2 ГБ на строку.
Возможно, вместо этого существует проблема с API, который вы используете и который имеет ограничение на строку (например, строку фиксированной длины). Проблема не в самом VBA.
Хорошо, я вижу, что проблема именно в самом методе Application.OnTime. Он ведет себя как функции Excel в том смысле, что они принимают только строки длиной до 255 символов. Однако процедуры и функции VBA не имеют этого ограничения, как я показал. Возможно, тогда это ограничение накладывается на любой встроенный метод объекта Excel.
Обновление :
изменено ... длиннее 256 символов ...
на ... длиннее 255 символов ...
Вы уверены? Эта ветка форума предполагает, что это может быть ваше окно просмотра. Попробуйте вывести строку в MsgBox, который может отображать максимум 1024 символа:
MsgBox RunMacros