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
단, 123을 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 really long string " , A1 : Z10 , 1) 셀을 사용하여 매우 긴 스트링을 그 범위 내에 배치합니다.vlookup은 실패합니다(확실히 찾을 수 있지만 실제로는 찾을 수 없습니다).
또한 서브네임에는 최대 길이가 있는 것을 알고 있으며, 바로 아래에 있습니다.너무 못생겨서 미안해요.
업데이트 2: 그래서 변수를 시트에 인쇄하고 제시간에 호출된 함수를 시트에서 읽어낼 수 있게 되었습니다. : )
제가 뭔가 놓쳤을 수도 있는데 왜 원하는 크기로 줄을 신고하지 않는 거죠?예를 들어, VBA 코드에서는 다음과 같은 것을 자주 사용합니다.
Dim AString As String * 1024
1k 스트링을 제공합니다.Excel, 사용 가능한 메모리 등의 더 큰 한도 내에서 원하는 선언문을 사용할 수 있습니다.
이 방법은 다소 비효율적일 수 있으며 불필요한 후행 공백을 없애기 위해 구성 요소처럼 Trim(ASTRing)을 사용하는 것이 좋습니다.그래도 256자를 훌쩍 넘습니다.
이렇게 하면 메시지 상자에 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의 실제 제한은 문자열당 2GB입니다.
대신 사용하고 있는 API에 문제가 있어 문자열(고정 길이의 문자열 등)에 제한이 있을 수 있습니다.VBA 자체에 문제가 있는 것은 아닙니다.
네, 특히 어플리케이션에 문제가 있다는 것을 알 수 있습니다.On Time 메서드 자체입니다.최대 255자 문자열만 사용할 수 있다는 점에서 엑셀 함수처럼 작동합니다.VBA 절차 및 기능에는 표시된 바와 같이 이 제한이 없습니다.아마도 이 제한은 내장된 Excel 객체 메서드에 적용됩니다.
업데이트:...longer than 256 characters...로로 합니다....longer than 255 characters...
확실합니까?이 포럼 스레드는 워치창일 수 있음을 나타냅니다.최대 1024자를 표시할 수 있는 MsgBox에 문자열을 출력해 보십시오.
MsgBox RunMacros
이 테스트에서는, VBA 의 문자열의 길이는 10^8 문자 이상일 수 있습니다.하지만 10^9로 바꾸면 실패합니다.
Sub TestForStringLengthVBA()
Dim text As String
text = Space(10 ^ 8) & "Hello world"
Debug.Print Len(text)
text = Right(text, 5)
Debug.Print text
End Sub
따라서 Intermediate window editor 또는 MsgBox 출력에 의해 오도되지 않도록 하십시오.
전달하고 싶은 인수에 대해 모듈레벨 변수를 사용하여 발신자 역할을 하는 다른 서브를 가질 수 없습니다.예를 들면...
Option Explicit
Public strMsg As String
Sub Scheduler()
strMsg = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Application.OnTime Now + TimeValue("00:00:01"), "'Caller'"
End Sub
Sub Caller()
Call aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa("It Works! " & strMsg)
End Sub
Sub aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(strMessage As String)
MsgBox strMessage
End Sub
Excel에는 255자만 표시되지만 실제로는 255자 이상 저장된 경우 전체 문자열을 보려면 즉시 창에서 확인하십시오.
눌러서 입력?RunWhat바로 옆 창에서 를 누릅니다.
이 문제의 주요 원인 중 하나는 Excel 파일 사양(Excel에 의해 자동으로 추가됨)을 포함한 프로시저 플러스 인수 문자열 전체가 255자로 제한되어 있다는 것입니다.이것은 Excel의 파일 풀패스 기본 사양에 의해 악화됩니다.따라서 저처럼 매우 깊은 폴더 구조를 긴 파일 이름 및 설명 폴더 이름(자주 사용하는 것처럼)과 함께 사용하는 경우 OnTime을 사용할 때 이 요소가 자주 문제가 될 수 있습니다.
회피책: 포함된 워크북의 이름을 항상 명시적으로 포함하므로 Excel이 자동으로 입력할 필요가 없어집니다(비논리적인 방법으로).
Sub CallOnTime()
Application.OnTime Now + TimeSerial(0, 0, 1), _
"'" & ThisWorkbook.Name & "'!'TargetMacro 37,""Some really long String parameter…""'"
End Sub
Sub TargetMacro(I As Integer, S As String)
MsgBox "I=" & I & ", S=" & S
End Sub
그러면 호출된 프로시저의 논거에 사용할 문자열 길이의 부동산을 많이 살 수 있습니다.
중요: 위의 예에서 따옴표로 둘러싸인 뱅 딜리미터('!')가 포함되어 있는 것과 위치를 확인합니다.
원래 설계자는 Excel 어플리케이션의 동일한 인스턴스에서 실행되는 다른 워크북과의 식별이 애매해지는 것을 피하기 위해 완전한 파일 경로를 프로시저의 파일 이름과 함께 포함하기로 선택했을 것으로 추측됩니다.그러나 Excel은 동일한 이름의 여러 워크북이 서로 다른 폴더 경로(물론 그래야 함)에 있더라도 단일 인스턴스에서 열 수 없기 때문에 이는 말도 안 되는 근거입니다.
추가 공간 절약 힌트:
- 모수에 워크시트 규격이 포함된 경우 이름 대신 숫자 시트 색인 속성을 사용하십시오.
- 쉼표 구분 기호 주변의 공백 문자를 모두 삭제합니다.
언급URL : https://stackoverflow.com/questions/2516702/getting-around-the-max-string-size-in-a-vba-function
'source' 카테고리의 다른 글
| python을 사용하여 XLSX를 CSV로 올바르게 변환 (0) | 2023.04.27 |
|---|---|
| ngFor와 함께 trackBy를 사용하는 방법 (0) | 2023.04.27 |
| 선택적 입력 인수를 사용하는 bash 스크립트를 작성하는 방법 (0) | 2023.04.22 |
| 클라우드 프로젝트를 빌드할 때 "객체 참조가 객체의 인스턴스로 설정되지 않음" (0) | 2023.04.22 |
| Enum을 ASP의 DropDownList 컨트롤에 바인드하려면 어떻게 해야 합니다.인터넷? (0) | 2023.04.22 |