Как ссылаться на флажок в VBA для Excel - PullRequest
0 голосов
/ 04 июня 2019

Я создал флажок, используя ленту разработчика> Вставка> Элементы управления ActiveX> Флажок.Я хотел бы закодировать подпрограмму, которая, когда флажок установлен, диапазон значений из листа PCAPV10 копируется в диапазон в листе спецификации.Я не уверен, правильно ли я ссылаюсь на свой флажок в коде, и продолжаю получать объектную ошибку.Любые предложения?

Я пробовал кодировать в подпункте флажок, а также ссылки на флажок из другого подпункта.Кажется, я не могу понять, как это сделать.

Private Sub CheckBox1_Click()
Dim PCAPV10 As Worksheet
Set PCAPV10 = Workbooks("CFC Calculation Program (Macro Enabled)").Sheets("Price Calculation APV10")
Dim BOM As Worksheet
Set BOM = Workbooks("CFC Calculation Program (Macro Enabled)").Sheets("BOM")
Dim chk1 As CheckBox
Set chk1 = Sheets("Price Calculation APV10").CheckBoxes("Check Box 1")
If Sheets("PCAPV10").OLEObjects("chk1").Object.Value = True Then
BOM.Range("A6:C120").Value = PCAPV10.Range("E11:I84").Value
End If
End Sub

Я бы хотел, чтобы код распознавал, когда флажок установлен, и если true, установите диапазон в пределах спецификации, равный диапазону.в листе PCAPV10.Если не проверено, ничего не делать.Вместо этого я получаю сообщение об ошибке «1004»: ошибка приложения или объекта.

Ответы [ 4 ]

1 голос
/ 04 июня 2019

Нет необходимости объявлять CheckBox1 как переменную.Вы также помещаете свою переменную PCAPV10 в Sheets ("").Попробуйте это:

If PCAPV10.OLEObjects("CheckBox1").Object.Value = True Then
     BOM.Range("A6:C120").Value = PCAPV10.Range("E11:I84").Value
End If

Если вы хотите определить это, я уверен, что нет пробелов:

Set chk1 = Sheets("Price Calculation APV10").CheckBoxes("CheckBox1")
0 голосов
/ 04 июня 2019

Мне кажется, проблема в том, что вы по ошибке выбрали флажок в элементах управления формой, а не в ActiveX. Дважды проверьте это. Затем измените ваш код следующим образом:

Private Sub CheckBox1_Click()
Dim PCAPV10 As Worksheet
Set PCAPV10 = Workbooks("CFC Calculation Program (Macro Enabled)").Sheets("Price Calculation APV10")
Dim BOM As Worksheet
Set BOM = Workbooks("CFC Calculation Program (Macro Enabled)").Sheets("BOM")
If CheckBox1.Value = True Then
    BOM.Range("A6:C120").Value = PCAPV10.Range("E11:I84").Value
End If
End Sub
0 голосов
/ 04 июня 2019

Вы уже объявили флажок и установите флажок.Просто измените следующее:

If chk1.Value= 1 Then
0 голосов
/ 04 июня 2019

Возможно, это не лучшая практика, но я всегда привязывал флажок к ячейке, в которой он находится, так что ячейка переключается TRUE / FALSE.

Затем я подгоняю текст к цвету заливки, чтобы он не был виден пользователю.

Тогда в VBA я просто использую .range() или .cell(), чтобы соответствовать этой ячейке.

Так что я бы использовал:

If Sheets("PCAPV10").range()

вместо того, что у вас есть.

...