Получение имени и местоположения определенных фигур из рабочего листа с помощью VBA - PullRequest
0 голосов
/ 18 декабря 2018

Это продолжение моего предыдущего вопроса ( Получение информации о 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 |      |   |
+---------+-------+------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...