ListBox
是否具有允许在选择项目后直接使用 Ctrl + C 组合从ListBox
复制值的属性?
答案 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