Это продолжение моего предыдущего вопроса ( Получение информации о OLEObjects из Workbook с VBA )
Сценарий: Я пытаюсь получить данные изРабочий лист.Данные могут быть обычными строками или числами или могут быть заключены в флажки (отмечены или нет).
Пример данных:
+---------+-------+------------------+------+------------------+
| item1 | 2004 | | | |
+---------+-------+------------------+------+------------------+
| value x | rfd | checkbox for rfd | nfd | checkbox for nfd |
+---------+-------+------------------+------+------------------+
| ident | test7 | call3 | | |
+---------+-------+------------------+------+------------------+
Obs: В этом примере «флажок для rfd / nfd» является обычным флажком (либо форма, либо activex), и в зависимости от элемента на этом листе может быть выбран любой из них.
Цель: То, что я пытаюсь сделать, это прочитать лист в 2 этапа: сначала прочитать все данные, которые вызваны напрямую, поэтому я использую код:
Sub Test_retrieve()
' this will get all non object values from the sheet
Dim array_test As Variant
Dim i As Long, j As Long
array_test = ThisWorkbook.Sheets(1).UsedRange
For i = 1 To ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To ThisWorkbook.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
ThisWorkbook.Sheets(2).Cells(i, j) = array_test(i, j)
Next j
Next i
End Sub
, чтобы получить:
+---------+-------+------------------+------+------------------+
| item1 | 2004 | | | |
+---------+-------+------------------+------+------------------+
| value x | rfd | | nfd | |
+---------+-------+------------------+------+------------------+
| ident | test7 | call3 | | |
+---------+-------+------------------+------+------------------+
Далее я пытаюсь достичь всех целей / форм в моей рабочей таблице.Я использовал следующий код для получения имени, значения (проверено не) и местоположения всех объектов activex:
Sub getavticeboxvalue()
' this will get the names and values (as binary) of all the activex controlbox objects in the sheet
Dim objx As Object
Dim i As Long
i = 1
For Each objx In ThisWorkbook.Sheets(1).OLEObjects
If objx.Object.Value = True Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = 1
ThisWorkbook.Sheets(3).Cells(i, 2).Value = objx.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = objx.BottomRightCell.Address
ElseIf objx.Object.Value = False Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = 0
ThisWorkbook.Sheets(3).Cells(i, 2).Value = objx.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = objx.BottomRightCell.Address
End If
i = i + 1
Next objx
End Sub
, что дает что-то вроде:
+-------+-----------+----------+
| value | name | location |
+-------+-----------+----------+
| 0 | checkbox1 | $C$2 |
+-------+-----------+----------+
| 1 | checkbox2 | $E$2 |
+-------+-----------+----------+
Затем я перейду квведите значения (1 и 0) в первую таблицу в том месте, где изначально установлены флажки, где (местоположение).
Проблема: Когда я пытаюсь выполнить ту же процедуру для управления формой (вместо activex) у меня меньше вариантов, и хотя я могу их искать (ThisWorkbook.Sheets (1) .Shapes.Type = 8) я не могу найти их имя или местоположение.
Вопрос: Есть ли способ найти их имя и местонахождение?Есть ли более эффективный способ достижения результата?
Цель:
+---------+-------+------------------+
| item1 | 2004 | | | |
+---------+-------+------------------+
| value x | rfd | 0 | nfd | 1 |
+---------+-------+------------------+
| ident | test7 | call3 | | |
+---------+-------+------------------+