以 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
目标: 使用 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