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

Сценарий: Я пытаюсь прочитать всю информацию или рабочий лист с помощью VBA (изначально Python, но я не мог найти способ сделать это).Поскольку листы, которые я должен читать, имеют разные форматы и обычно являются беспорядочными, я перебираю все объекты на листе, получая их имя и значение (проверено или нет, как двоичный файл).

Проблема: Ящики, как правило, не в порядке, поэтому я не знаю, в каком порядке.Поэтому я пытаюсь получить какую-то базовую форму местоположения или ссылку на ячейки вокруг него.

Что я пробовал: Следуя документации (https://docs.microsoft.com/en-us/office/vba/api/excel.oleobjects) Я пробовал все типыразличные свойства, но ни одно из них не может помочь с этой проблемой напрямую. Наиболее близким я был с BottomRightCell, но это только возвращает значение ячейки, тогда как мне нужно было бы местоположение или номер ячейки, поэтому я могу ссылаться на флажок правильно.*

Вопрос: Есть ли способ сделать такую ​​идентификацию? Был бы лучший способ прочитать все содержимое листа (в том числе, если флажок установлен или нет) напрямую, илиэти две операции должны выполняться отдельно?

Код делать дальше:

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


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.Placement 'here is the issue

        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.Placement 'here is the issue
        End If
        i = i + 1

    Next objx

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...