列表框复制值属性

时间:2018-02-13 17:23:28

标签: excel vba listbox

ListBox是否具有允许在选择项目后直接使用 Ctrl + C 组合从ListBox复制值的属性?

1 个答案:

答案 0 :(得分:0)

虽然MSForm.ListBox本身不具有此功能,但是您可以编写一些函数来完成该任务。 您需要将KeyDown事件添加到列表框中,并检查 Ctrl + C 组合。 我使用另外两个功能:

  • 一个从列表框的特定列返回选择(如果将HasHeader设置为TRUE,它将忽略第一行)

  • 另一个功能是将列表框中的文本放入剪贴板

请注意,您必须预先知道必须从哪一列复制数据。如果必须动态,则可以查看MouseMove事件以找到光标位置并推断应复制哪一列。
您可能还必须向项目添加一些库引用。

Private Sub List_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Not ListChoice(List, 0, HasHeader) = vbNullString And KeyCode = 67 And Shift = 2 Then
    ClipText ListChoice(List, 0)
End If
End Sub

Public Function ListChoice(ByRef SourceList As MSForms.ListBox, _
                  Optional ByVal Column As Long = 0, _
                  Optional ByVal HasHeader As Boolean = False) As String
'This function returns value of a selected row in single-select list.
With SourceList
    If .ListIndex < 0 - HasHeader Then
        ListChoice = vbNullString
        Exit Function
    End If
    If IsNull(.List(.ListIndex, Column)) Then
        ListChoice = vbNullString
    Else
        ListChoice = .List(.ListIndex, Column)
    End If
End With
End Function
Public Function ClipText(ByVal MyText As String)
' This function accepts any text strings
' and puts them in the clipboard
Dim D As DataObject
Set D = New DataObject
With D
    .SetText MyText
    .PutInClipboard
End With
Set D = Nothing
End Function