maksymalna liczba znaków, które można wykorzystać w ciągu znaków w funkcji VBA 255. próbuję uruchomić tę funkcjęUzyskiwanie rozmiaru Max String w funkcji vba?
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
uruchamia procedurę w określonym czasie i przechodzi kilka zmiennych do niego . ale ciąg jest za długi.
Aktualizacja: Niestety jestem pewien, że to nie jest okno zegarka. Nie jest to tak naprawdę maksymalny rozmiar napisu, z którym mam do czynienia. Jest to maksymalny rozmiar ciąg w funkcji vba.
Na przykład ta funkcja działa.
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
Ale jeśli zmienisz 12 do 123 łamie Przykład
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
Ten kod nie działa, jestem prawie pewien, że to dlatego, że funkcja VBA nie może obsłużyć ciąg z ponad 255 znaki. Nawet jeśli używasz programu Excel i wywołujesz funkcję i dodajesz jej ciąg dłuższy niż 255 znaków, to nie działa.
Spróbuj w komórce A1 = widok ("naprawdę długi ciąg", A1: Z10, 1), a następnie umieść naprawdę długi ciąg gdzieś w tym zakresie. Wada zakończy się niepowodzeniem (nie uda się go znaleźć, ale faktycznie nie będziesz w stanie tego zrobić)
Mam również świadomość, że maksymalna długość subskrypcji jest podana. Przepraszam, że wygląda tak brzydko.
Aktualizacja 2: skończyłem drukowanie zmiennej na arkuszu i otrzymanie funkcji wywoływanej przez ontime, aby odczytać je z arkusza. :(
[Od Joel Spolsky] (http://www.joelonsoftware.com/articles/fog0000000319.html) (który prowadził wiele wczesnych opracowań Excela): "Excel używa wewnętrznie ciągów Pascal, dlatego ciągi znaków w wielu miejscach w Excel jest ograniczony do 255 bajtów i jest to również jeden z powodów, dla których Excel jest niesamowicie szybki. " Prawdopodobnie odnosi się to do kwestii VLookup, o której wspomniałeś, chociaż, jak stwierdzili inni, VBA nie ma takiego limitu. – mwolfe02
Możesz użyć 'String (number_of_repeats, char_to_repeat)' aby stworzyć ciąg w locie zamiast 'aaaaaaaaaaaaaaaaaaaaaaaa ...' –