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

时间:2015-10-14 09:48:12

标签: excel vba excel-vba listbox clipboard

目标:使用VBA(excel)以excel友好格式用表格(从列表框中)填充剪贴板,以便我可以将(ctrl + V)粘贴到Excel中值被分成正确的列和行,就像它们在原始列表框中一样。

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

我正在使用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

当前状态:我已经仔细查看并找到了在特定工作表的代码中执行此操作的方法,但我的最终用户需要自由地将其复制到多个工作表中非常特别的时尚。我知道总是可以选择右键单击 - >导入文本向导,但如果可能的话,再次使用ctrl + V是首选方法。

一如既往,感谢任何帮助/建议,谢谢。

1 个答案:

答案 0 :(得分:2)

在每一行中将您的字符串与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