Userform命令按钮,基于CheckBox True / False进行复制

时间:2015-08-18 21:36:18

标签: excel vba excel-vba checkbox userform

您好我是Excel VBA的新手,我遇到了以下问题,

我的工作簿有sheet1 = Chandler_Endorsements(包含启动UserForm1的按钮)。我的Userform有26个CheckBox和2个CommandButton(复制和重置)。

每个CheckBox都与工作簿中sheet2中的单元格相关联。每个后续单元具有例如值。 ABc,XYz等具有特定格式。

我的目标是让用户检查他们想要选择的每个项目的CheckBox,然后选择"复制" (CommandButton1)然后他们可以粘贴word文件。 例如。如果他们检查了checkbox1& 2,选中并复制与这些复选框相关联的单元格,然后将它们粘贴到word文件上。

此外,如果稍后用户未选中该复选框,则应选择并复制该单元格。

我使用以下代码为每个复选框赋值:

Private Sub CheckBox1_Click()
CheckBox1.Caption = Range("A3").Value
End Sub

Private Sub CheckBox10_Click()
CheckBox10.Caption = Range("A14").Value
End Sub

并且,为了处理相关的单元格,我使用下面的代码:

If CheckBox1.Value = True Then
    ActiveSheet.Range("A3").Copy
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    Else: CheckBox1.Value = False
  End If

  If CheckBox2.Value = True Then
    ActiveSheet.Range("A4").Copy
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    Else: CheckBox2.Value = False
  End If

但是通过使用上面的代码,它不会处理我选择的每个单元格(选中复选框)。请帮助我正确的代码。

2 个答案:

答案 0 :(得分:1)

这是一个以不同方式做的建议:

  • 此代码逐步执行Control
  • 中的每个UserForm
  • 检查其是CheckBox
  • 验证其.Value = True
  • 它将数据存储到String
  • CheckBox.Value设为False
  • String数据传输到剪贴板

Option Explicit

Sub TestRun()
Dim cCont As Control
Dim StrCopy As String
Dim IntI As Long
Dim Mydata As New DataObject

IntI = 1

For Each cCont In UserForm1.Controls

If TypeName(cCont) = "CheckBox" Then
    If cCont.Value = True Then
        StrCopy = StrCopy & Chr(10) & ActiveSheet.Range("B" & IntI).Value
        cCont.Value = False
    End If
IntI = IntI + 1
End If
Next cCont

Mydata.SetText StrCopy
Mydata.PutInClipboard
End Sub

答案 1 :(得分:0)

试一试......您可以在工作表1中应用自动打开而不是单击CommandButton。

检查并记录用户选择并同时复制单元格的复选框。然后,用户可以手动粘贴到word文件。

Sub auto_open()
UserForm1.Show
Call Copy
End Sub


Sub Copy()
Dim SelectRange as String
SelectRange = ""

If UserForm1.CheckBox1.Value = True Then
    SelectRange = SelectRange + "," + "A3"
End If
If UserForm1.CheckBox2.Value = True Then
    SelectRange = SelectRange + "," + "A4"
End If
'So AS, checkbox3,4,5.......

If SelectRange <> "" Then
    SelectRange = Mid(SelectRange, 2, Len(SelectRange))
    Sheets("sheet2").Range(SelectRange).Select
    Selection.copy
End If

UserForm1.CheckBox1.Value = False
UserForm1.CheckBox2.Value = False
'So AS, checkbox3,4,5.......

End Sub