|
我曾问过另一个类似问题,当时吕布版主找出原因了。
'MS原文:http://support.microsoft.com/kb/832136/zh-cn/
MS对那个问题有交代,我测试验证过。
- Sub Test1()
- Dim s As String, Arr(0) As String
- On Error Resume Next
- Do Until Err.Number = 1004
- s = s & "A"
- Arr(0) = s
- Range("A1") = Arr
- Loop
- MsgBox Len(s)
- '03返回912
- '07返回8204
- '10返回8204
- End Sub
复制代码 如今,你的问题是在这问题基础上,又加了一个条件(引用工作表函数)。我用上面方式作了部分测试:
- Sub Test2()
- Dim s As String
- Dim Arr(1 To 1, 1 To 1) As String
- Dim x As Long
- On Error Resume Next
- Do Until Err.Number <> 0
- s = s & "A"
- Arr(1, 1) = s
- Range("A1") = Application.WorksheetFunction.Index(Arr, 0, 1)
- Loop
- x = Len(s)
- Stop 'x=32768
- End Sub
- Sub Test3()
- Dim s As String
- Dim Arr(1 To 1, 1 To 1) As String
- Dim x As Long
- On Error Resume Next
- Do Until Err.Number <> 0
- s = s & "A"
- Arr(1, 1) = s
- Range("A1") = Application.WorksheetFunction.Index(Arr, 1, 0)
- Loop
- x = Len(s)
- Stop 'x=32768
- End Sub
- Sub Test4()
- Dim s As String
- Dim Arr() As Variant
- Dim x As Long
- On Error Resume Next
- Do Until Err.Number <> 0
- s = s & "A"
- Arr = [a1:b2].Value
- Arr(1, 1) = s
- Arr(1, 2) = s
- Arr(2, 1) = s
- Arr(2, 2) = s
- Range("A1:A2") = Application.WorksheetFunction.Index(Arr, 0, 1)
- Loop
- x = Len(s)
- Stop 'x=256
- End Sub
复制代码
我猜想,是因为单元格赋值给数组后,MS为避免用户出错,所以做了“人性化”处理吧(即限制不能>255)。
可惜,没找着MS对此的原文解释。
|
|