2015-08-18 1 views
0

Привет Я новичок в Excel VBA и я застрял на уровне ниже проблемы,UserForm CommandButton для копирования на основе CheckBox True/False

Моя книга имеет Лист1 = Chandler_Endorsements (содержит кнопку для запуска UserForm1). В моей Userform есть 26 CheckBox и 2 CommandButton (копирование и сброс).

Каждый CheckBox связан с ячейкой в ​​sheet2 в книге. Каждая из последующих ячеек имеет значение, например. ABc, XYz и т. Д. В определенном формате.

Моя цель состоит в том, чтобы пользователь проверил CheckBox для каждого из элементов, которые они хотят выбрать, затем выберите «Копировать» (CommandButton1), а затем они могут вставить их в файл слов. Например. Если они установили checkbox1 & 2, ячейка, связанная с этими флажками, будет выбрана и скопирована, а затем они будут вставляться в файл слова.

Также, если флажок позже не выбран пользователем между этой ячейкой, необходимо выбрать и скопировать.

Я использовал ниже кодов, чтобы дать значение для каждого чекбокса:

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

Есть ли численный порядок в клетках, что соотносится с флажком? (Как 'CheckBox1 = Cell A3',' CheckBox2 = Cell A4'? – DragonSamu

+0

Да. Я установил свой лист1 в числовом порядке, а затем использовал ниже коды: Если UserForm1.CheckBox1.Value = True Затем SelectRange = SelectRange + "," + "A3" End If 'So AS, checkbox2,3,4,5 ....... –

ответ

0

Попробуйте это ... Вы можете применить автоматическое открытие нажимания CommandButton в листе 1.

Проверьте и запишите Флажки, которые пользователь может выбрать и скопировать ячейки одновременно. И тогда пользователь может вставить файл слова вручную.

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 
+0

Благодарим за помощь. Теперь пользовательская форма открывается автоматически, используя вышеприведенный код. Поскольку я связал все 26 checkbox с 26 различными строками в sheet1.Но есть небольшая проблема в другой части. –

+0

Например, если я установил флажок 1,2, 15 и 25, который связан с строкой № 1,2,15 & 25 соответственно в листе1, а затем нажмите кнопку Command (Копировать), он выбирает только выбранные строки, которые правильно, но когда я пытаюсь вставить это в файл слова, все строки от 1 до 25 вставлены туда, где я хотел вставить только строку № 1,2,15 & 25. Просьба помочь мне решить эту проблему. У меня есть другое командное имя с именем «Сброс», и я хочу дать ему код, который, когда я нажимаю на этот флажок, должен быть снят, а мой лист должен быть обновлен, значит нет выбора или копирования. –

+0

Существует глупый метод, но он работает. 1. Вы можете передать значение строк или скопировать строки на лист 3, а затем скопировать/вставить в файл слова. 2. Вы можете применить этот код «UserForm1.CheckBox1.Value = False» к вашему сбросу CommandButton. Если это сработает для вас, пожалуйста, примите этот ответ с зеленой меткой. –

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