Как получить буфер обмена в 2D массив (excel vba)


Я очень новичок в Excel VBA и хочу получить текст из буфера обмена в 2D массив, с первым разделителем vbNewLine и вторым разделителем пробел. Как создать двумерный массив неизвестного размера? Могу ли я разделить массив, как ниже, где я потерпел неудачу?

Sub CommandButton1_Click()
    Dim DataObj As MsForms.DataObject
    Set DataObj = New MsForms.DataObject
    Dim strArray() As String

    On Error GoTo ERRROR

    '~~> Get data from the clipboard.
    DataObj.GetFromClipboard

    '~~> Get clipboard contents
    myString = DataObj.GetText(1)

    '~~> Split into string, delimiter vbNewLine
    strArray = Split(myString, vbNewLine)

Вот здесь я потерплю неудачу

    '~~> Split each strArray and store in strArray2, delimiter " ".
    Dim strArray2() As String
    For ii = LBound(strArray2) To UBound(strArray2)
        strArray2(ii) = Split(strArray(ii))
    Next ii

Exit Sub
ERRROR:
    If Err <> 0 Then    
    'Handel error
End If
End Sub
1 2

1 ответ:

Вы делаете это неправильно.

Это то, что вы пытаетесь сделать? (непроверенные )
Sub CommandButton1_Click()
    Dim DataObj As MsForms.DataObject
    Dim strArray, strArray2
    Dim i As Long, j As Long
    Dim myString As String

    On Error GoTo ERRROR

    Set DataObj = New MsForms.DataObject

    '~~> Get data from the clipboard.
    DataObj.GetFromClipboard

    '~~> Get clipboard contents
    myString = DataObj.GetText(1)

    '~~> Split myString, delimiter vbNewLine
    strArray = Split(myString, vbNewLine)

    '~~> Split each strArray and store in strArray2, delimiter " ".
    For i = LBound(strArray) To UBound(strArray)
        strArray2 = Split(strArray(i))

        For j = LBound(strArray2) To UBound(strArray2)
            Debug.Print strArray2(j)
        Next j
    Next i

    Exit Sub
ERRROR:
    If Err <> 0 Then Debug.Print Err.Description
End Sub