備選:循環附加塊,直到分配的長度不是什麼預期
Const INT_MAX As Integer = 32767
Dim i As Long
ActiveCell.Value = ""
Dim buff As String: buff = Space$(INT_MAX)
Do
i = i + 1
ActiveCell.Value = ActiveCell.Value & buff
If Len(ActiveCell.Value) <> (i * INT_MAX) Then
MaxLen = Len(ActiveCell.Value)
Exit Function
End If
Loop
甚至
ActiveCell.Value = Space$(A_BIG_NUMBER)
MaxLen = Len(ActiveCell.Value)
這裏的一個變種我們在哪裏取expone幾個步驟(更大和更大的步驟,其尺寸每次增加stepFactor
)。
Function MaximumNumberOfCharactersACellCanContain(r As Range, _
Optional ByVal stepFactor As Double = 2)
Dim n As Double
Dim nActual As Long
Dim l As Long
n = 1
Do
n = n * stepFactor
nActual = CLng(n)
r.Cells(1, 1).Value = Space$(nActual)
l = Len(r.Cells(1, 1).Value)
If l <> nActual Then
MaximumNumberOfCharactersACellCanContain = l
Exit Function
End If
Loop
End Function
實例:
Debug.Print MaximumNumberOfCharactersACellCanContain(Range("A1"), 8)
的stepFactor
選擇是之間的折衷:減少迭代(較大的因數是更好)的數量
- ,和
- 限制向下最後一次迭代的成本(失敗的成本)。如果
stepFactor
太大,那麼你寫了一個很長的字符串到這個單元格,這很慢。
- 確保最後一次迭代永遠不會超出內存限制(我的系統上約有1.3億個字符)。 (可能會添加錯誤處理來處理這種可能性。)
stepFactor
介於2到8之間的值應該穩健且快速。
我懷疑它在Excel中是硬編碼的,因此不會暴露在註冊表中的任何地方。那就是說,你有沒有試過註冊表搜索? – 2014-09-24 11:42:06
我認爲這個限制強烈地與公式欄中的字符數限制有關。公式欄可能是像System.Controls.Textbox這樣的API控件之一,它接受System.Int32的.MaxLength屬性,它可以以某種方式解釋32,767個字符的限制。 – 2014-09-24 11:42:35