您好我是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
但是通过使用上面的代码,它不会处理我选择的每个单元格(选中复选框)。请帮助我正确的代码。
答案 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