VBA Excel - Поиск, где все имена используются в книге - PullRequest
0 голосов
/ 18 марта 2020

Я ищу какой-нибудь код VBA или справочник, который может найти все места в книге (или, возможно, за ее пределами, но это не является нормальным использованием для меня). Я использую Excel 2010 (пока).

Я записываю полный список имен, их источников, формул и мест их использования. У меня есть несколько первых из класса имен, но метод «где они используются» отнимает много времени, даже если отключить действия обновления Excel.

Я видел несколько ссылок на этот код (ниже) в различных сайты, но это трудоемкий метод. (Я упоминаю некоторые имена в больших количествах, например, тысячи). Код ниже: https://excelhelphq.com/how-to-find-all-dependent-cells-outside-of-worksheet-and-workbook-in-excel-vba/

Sub messageBoxCellDependents()
    Dim SelRange As Range
    Set SelRange = Selection
    MsgBox findDepend(SelRange) 'show user dependent cells in a pop up message box
End Sub

Function fullAddress(inCell As Range) As String
    fullAddress = inCell.Address(External:=True)
End Function

Function findDepend(ByVal inRange As Range) As String
    Dim sheetIdx As Integer
    sheetIdx = Sheets(inRange.Parent.Name).Index

    If sheetIdx = Worksheets.Count Then 'vba bug workaround
        Sheets(sheetIdx - 1).Activate
    Else
        Sheets(Worksheets.Count).Activate
    End If

    Dim inAddress As String, returnSelection As Range
    Dim i As Long, pCount As Long, qCount As Long
    Set returnSelection = Selection
    inAddress = fullAddress(inRange)

    Application.ScreenUpdating = False
    With inRange
        .ShowPrecedents
        .ShowDependents
        .NavigateArrow False, 1
        Do Until fullAddress(ActiveCell) = inAddress
            pCount = pCount + 1
            .NavigateArrow False, pCount
            If ActiveSheet.Name <> returnSelection.Parent.Name Then
                Do
                    qCount = qCount + 1
                    .NavigateArrow False, pCount, qCount
                    findDepend = findDepend & fullAddress(Selection) & Chr(13)

                    On Error Resume Next
                    .NavigateArrow False, pCount, qCount + 1
                Loop Until Err.Number <> 0
                .NavigateArrow False, pCount + 1
            Else
                findDepend = findDepend & fullAddress(Selection) & Chr(13)

                .NavigateArrow False, pCount + 1
            End If
        Loop
        .Parent.ClearArrows
    End With

    With returnSelection
        .Parent.Activate
        .Select
    End With

    Sheets(sheetIdx).Activate 'activate original worksheet
End Function

Однако, при использовании функции «Трассировка зависимостей» на ленте, полученные стрелки и ссылки занимают столько времени, сколько требуется для стрелки (когда они находятся на листе) для рендеринга на экране, что мне кажется, что есть записанный список того, где используются элементы (по крайней мере, в рабочей книге).

Существует ли этот список на самом деле? Есть ли способ добраться до него? В теории должен быть более быстрый метод.

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