Обходя Размер строки Max в функции 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

Это выполняет процедуру в определенное время и передает набор переменных к нему. но строка является слишком длинной.

Обновление: К сожалению, я уверен, что это не окно часов. Кроме того, это не действительно макс. размер строки, с которой я имею дело. Это - макс. размер строки в функции 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 читать их от листа.:(

17
задан Community 9 July 2018 в 19:34
поделиться

2 ответа

Это работает, и в окне сообщения отображается более 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 символов ...

15
ответ дан 30 November 2019 в 11:32
поделиться

Вы уверены? Эта ветка форума предполагает, что это может быть ваше окно просмотра. Попробуйте вывести строку в MsgBox, который может отображать максимум 1024 символа:

MsgBox RunMacros
9
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: