将多行从对象框复制到剪贴板,作为文本/项目符号VBA

时间:2017-06-21 12:37:15

标签: vba excel-vba clipboard excel

全部,

我有以下代码,当选择一个复制框时,它会将相邻文本复制到剪贴板。 (请参见图片);

Sub OptionButton4_Click()

Dim clipb As New DataObject
Dim clipc As New DataObject

clipb.SetText "" & "Customer XYZ."
clipb.PutInClipboard

End Sub

enter image description here

因此,客户XYZ将被复制到剪贴板。我会调整/修改代码,以便选择哪些框(可以将多个复制到剪贴板)

例如,如果客户XYZ&客户YY被选中将复制

  • 客户XYZ
  • 客户YY

到剪贴板。等

关于如何调整/修改上述代码的任何建议都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

首先,你需要决定是否需要

  • 选项框(一次只能选择一个框)或
  • 复选框(可以一次选择多个框)

满足您的要求。

选项框(一次只能选择一个)

这3个选项按钮中的每一个都有一个唯一的名称来访问其值:

Worksheets("my-sheet-name").Shapes("Option Button 1").ControlFormat.Value

注意:按钮的名称可能与其标题/文字不同。

如果选择了选项按钮,则此值为1。您可以通过以下方式阅读该按钮的标题/文字:

Worksheets("my-sheet-name").Shapes("Option Button 1").AlternativeText

所以我们最终得到类似的东西:

Dim clipb As New DataObject
Dim clipbText As String

Dim ws As Worksheet
Set ws = Worksheets("my-sheet-name")

If ws.Shapes("Option Button 1").ControlFormat.value = 1 Then
    clipbText = "• " & ws.Shapes("Option Button 1").AlternativeText

ElseIf ws.Shapes("Option Button 2").ControlFormat.value = 1 Then
    clipbText = "• " & ws.Shapes("Option Button 2").AlternativeText

ElseIf ws.Shapes("Option Button 3").ControlFormat.value = 1 Then
    clipbText = "• " & ws.Shapes("Option Button 3").AlternativeText

End If

clipb.SetText clipbText
clipb.PutInClipboard

请注意,您必须调整工作表名称和选项按钮名称。

复选框(可以一次选择多个)

如果您需要同时选择多个方框,则需要使用复选框而不是选项框。

因此代码看起来会有所不同:

Dim clipb As New DataObject
Dim clipbText As String

Dim ws As Worksheet
Set ws = Worksheets("my-sheet-name")

If ws.Shapes("Check Box 1").ControlFormat.value = 1 Then
    clipbText = clipbText & "• " & ws.Shapes("Check Box 1").AlternativeText & vbNewLine
End If

If ws.Shapes("Check Box 2").ControlFormat.value = 1 Then
    clipbText = clipbText & "• " & ws.Shapes("Check Box 2").AlternativeText & vbNewLine
End If

If ws.Shapes("Check Box 3").ControlFormat.value = 1 Then
    clipbText = clipbText & "• " & ws.Shapes("Check Box 3").AlternativeText & vbNewLine
End If

clipb.SetText clipbText
clipb.PutInClipboard