用户自定义命令button,基于checkbox复制True / False

嗨,我是新的Excel VBA,我被困在下面的问题,

我的工作簿有sheet1 = Chandler_Endorsements(包含启动UserForm1的button)。 我的用户窗体有26个checkbox和2个CommandButton(复制和复位)。

每个checkbox都与工作簿中工作表2中的单元格相关联。 每个后续单元格都有一个值,例如。 ABc,XYz等以特定的格式。

我的目标是让用户检查他们想要select的每个项目的checkbox,然后select“复制”(CommandButton1),然后他们可以粘贴这些文件。 例如。 如果他们选中了checkbox1和2,则与这些checkbox关联的单元格将被选中并复制,然后粘贴到单词文件上。

另外,如果checkbox稍后由用户在该单元之间取消select并被复制。

我用下面的代码给每个checkbox赋值:

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 

但通过使用上面的代码,它不是应付我select的每个细胞(在checkbox中选中)。 请帮助我正确的代码。

这里有一个build议来做一个不同的方式:

  • 此代码逐步通过UserForm每个Control
  • 检查它是否是CheckBox
  • validation它的.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中的CommandButton。

检查并logging用户同时select和复制单元格的checkbox。 然后,用户可以手动粘贴到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