目标:使用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是首选方法。
一如既往,感谢任何帮助/建议,谢谢。
答案 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