将对象框中的多行复制到剪贴板,作为 text/bullet 点 VBA

Copy multiple lines from object boxes to the clipboard as text/bullet points VBA

所有,

我有下面的代码,它在选择一个框时成功运行,它将相邻的文本复制到剪贴板。 (请看图片);

Sub OptionButton4_Click()

Dim clipb As New DataObject
Dim clipc As New DataObject

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

End Sub

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

例如,如果选择了客户 XYZ 和客户 YY,它将复制

到剪贴板。等等

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

谢谢

首先你需要决定是否需要

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

满足您的要求。


选项框(一次只能select编辑一个)

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

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

注意:按钮的名称可能与其caption/text不同。

因此,如果选项按钮是 select,则此值为 1。您可以使用以下命令从该按钮读取 caption/text:

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

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


复选框(可以一次select编辑多个)

如果您需要同时 select 多个框,您需要复选框而不是选项框。

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

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