以 excel 粘贴友好格式将列表框中的项目添加到剪贴板

Adding items from a listbox into the clipboard in a excel paste friendly format

目标: 使用 VBA (excel) 用 table(来自列表框)填充剪贴板 excel 友好的格式,这样我就可以将 (ctrl+V) 粘贴到 excel 中,然后将值拆分为正确的列和行,就像它们在原始列表框中一样。

问题:我似乎无法正确设置格式;当我将剪贴板的内容粘贴到 excel 时,每一行都包含在一个用“,”分隔的单元格(第一列)中(这是我尝试用作一种 "delimiter" -不确定这是否正确?)

我正在使用 API 解决方法来填充剪贴板,我不想用代码把你逼死,但这是最重要的一点(无论如何我觉得 - 问我是否需要查看更多代码)。

Private Sub btnCopyTable_Click()    

Dim I As Long
Dim J As Long
Dim tmp As String
Dim arrItems() As String
Dim clipboard As DataObject

ReDim arrItems(0 To lbIPActions.ColumnCount - 1)
For J = 0 To lbIPActions.ListCount - 1
    For I = 0 To lbIPActions.ColumnCount - 1
        On Error Resume Next ' Handles null values
        arrItems(I) = lbIPActions.Column(I, J)
        On Error GoTo 0
    Next I
    tmp = tmp & Join(arrItems, ",") & vbCrLf
Next J

MsgBox tmp

ClipBoard_SetData tmp

End sub

当前输出:

1,1,Low,Controls,,LS,Do this,02-Oct-2015,Note 1,Brev
2,1,Low,Controls,,LS,Do that,02-Oct-2015,Note 2,Brev

当前状态: 我环顾四周,找到了一种在代码中针对特定 sheet 执行此操作的方法,但我的最终用户需要以非常特别的方式将其复制到多个 sheet 中的自由。我知道总是可以选择右键单击 -> 导入文本向导,但如果可能的话,ctrl+V 仍然是首选方法。

一如既往,感谢任何 help/advice,提前致谢。

在每行中用 Tab 分隔您的字符串,这样就可以了。像这样:

Dim I As Long
Dim J As Long
Dim textItem As String
Dim copyText As String
Dim clipboard As DataObject

For J = 0 To lbIPActions.ListCount - 1
    For I = 0 To lbIPActions.ColumnCount - 1
        textItem = vbNullString
        On Error Resume Next ' Handles null values
        textItem = lbIPActions.Column(I, J)
        On Error GoTo 0
        If I > 0 Then copyText = copyText & vbTab
        copyText = copyText & textItem
    Next I
    If J < lbIPActions.ListCount - 1 Then copyText = copyText & vbNewLine
Next J

ClipBoard_SetData clipboardText