17

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("really long string", A1:Z10, 1) で試してから、その範囲内のどこかに非常に長い文字列を配置します。vlookup は失敗します (見つからないわけではありませんが、実際には実行できません)。

また、サブネームには最大の長さがあることを認識しています。私はそのすぐ下にいます。見た目が悪くてすみません。

更新2:変数をシートに出力し、ontimeによって呼び出される関数を取得して、シートからそれらを読み取ることになりました。:(

4

6 に答える 6

19

ここで何かを見逃しているかもしれませんが、文字列を目的のサイズで宣言できないのはなぜですか? たとえば、私の VBA コードでは、次のようなものをよく使用します。

Dim AString As String * 1024

これは 1k 文字列を提供します。明らかに、Excel や使用可能なメモリなどのより大きな制限内で、好きな宣言を使用できます。

これは場合によっては少し非効率的である可能性があり、Trim(AString) のような構造を使用して余分な末尾の空白を取り除くことをお勧めします。それでも、256 文字を簡単に超えます。

于 2014-03-07T17:59:11.647 に答える
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

メッセージボックスは文字列を1023文字に切り捨てますが、文字列自体は非常に大きくなる可能性があります。

また、数値付きの固定変数名(たとえば、、、、 ...)を使用する代わりにVar1、配列を使用することをお勧めします。これは宣言がはるかに短く、使いやすい-ループです。Var2Var3Var255

次に例を示します。

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の実際の制限は、文字列ごとに2GBです。

おそらく、代わりに、使用しているAPIに問題があり、文字列(固定長の文字列など)に制限があります。問題はVBA自体ではありません。

わかりました。問題は特にApplication.OnTimeメソッド自体にあると思います。最大255文字の文字列のみを受け入れるという点でExcel関数のように動作します。私が示したように、VBAの手順と機能にはこの制限はありません。おそらく、この制限は、組み込みのExcelオブジェクトメソッドに課せられます。


更新:に
変更...longer than 256 characters......longer than 255 characters...

于 2010-04-04T17:07:24.363 に答える
9

本気ですか?このフォーラム スレッドは、ウォッチ ウィンドウである可能性があることを示唆しています。最大 1024 文字を表示できる MsgBox に文字列を出力してみてください。

MsgBox RunMacros
于 2010-03-25T15:20:20.690 に答える
0

Excel には 255 文字しか表示されませんが、実際には 255 文字を超える文字が保存されている場合、完全な文字列を表示するには、すぐに表示されるウィンドウで参照してください。

を押して、イミディエイト ウィンドウにCrl + G入力し、 を押します。?RunWhatEnter

于 2018-12-14T17:56:01.003 に答える