Нужна формула или макрос Excel для подсчета строк в таблице в закрытой книге - PullRequest
1 голос
/ 05 августа 2020

Я ищу способ подсчета строк в таблице в закрытом Рабочей книге БЕЗ открытия исходного файла, формулы или макроса. У меня есть следующий фрагмент кода, который делает это для диапазона, но не работает для таблицы.

    Dim FName1 As String

'   Path to Family Mapping.xlsx
    FName1 = "\\ent.acme.com\IMI\[Family Mapping.xlsx]"
    
    'get row count of closed workbook [Family Mapping.xlsx] Worksheet "BMS-DES-POBA"
    Const ShName1 As String = "BMS-DES-POBA"
    Const ColNo1 As Integer = 1
    Dim ShNew1 As Worksheet
    Dim LastRow5 As Long
    Dim LastRow6 As Long
    Debug.Print FName1
    Application.DisplayAlerts = False
    Set ShNew1 = Worksheets.Add
    With ShNew1.Range("A1")
        .FormulaR1C1 = "=COUNTA('" & FName1 & ShName1 & "'!C" & ColNo1 & ")"
        LastRow5 = .Value
    End With
    ShNew1.Delete
    Application.DisplayAlerts = True
    Debug.Print Trim(LastRow5) + 1       'add one row to count to account for Header row

Я пробовал следующие формулы, но пока ничего не работает:

.FormulaR1C1 = "=COUNTA('" & FName1 & ShName2 & "'!C" & ColNo12 & ")"
.FormulaR1C1 = "=ROWS('" & FName1 & ShName2 & "'!Table_Query[#Data])"

Формула COUNTA возвращает 1 048 576 строк, что составляет всю длину электронной таблицы. Формула ROWS возвращает #REF, когда исходный файл с таблицей закрыт.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 августа 2020

Единственная причина, по которой он не работал у вас:

A. Путь к закрытому файлу. Попробуйте изменить эти расширения книги на .xlsm и ссылаться на них полностью. И

Б. ShNew1.Delete

Сейчас пробую на своем компьютере, и он работает. Я хорошо наелся.

Избавиться от ShNew1.Delete. Ваш CountA работает так, как должен, с файлом closed .xlsm. И просто поместите весь путь.

.. "C:\Users\User\Documents\... " et c. Или что бы там ни было для вашего документа и его местоположения.

Я должен был сначала спросить, будет ли переименование ваших закрытых файлов в xlsm, а затем запуск, как показано, на данный момент приемлемым обходным решением.

Я знаю, что вы можете массово переименовать, в том числе расширения, пока они закрыты. Так что, если вы довольны переименованием файлов .xlsm, удалением ShNew1.Delete и помещением всего пути в Fname1, тогда он вернет вам правильные значения даже при закрытии.

Sub main()


Dim FName1 As String

'   Path to Family Mapping.xlsx
    FName1 = "C:\Users\User\Documents\[MyFileName.xlsm]"
    
    'get row count of closed workbook [Family Mapping.xlsx] Worksheet "BMS-DES-POBA"
    Const ShName1 As String = "Sheet1"
    Const ColNo1 As Integer = 1
    Dim ShNew1 As Worksheet
    Dim LastRow5 As Long
    Dim LastRow6 As Long
    Debug.Print FName1
    Application.DisplayAlerts = False
    Set ShNew1 = Worksheets.Add
    With ShNew1.Range("A1")
        '.FormulaR1C1 = "=COUNTa('" & FName1 & ShName1 & "'!C" & ColNo1 & ")"
        '.FormulaR1C1 = "=COUNTif('" & FName1 & ShName1 & "'!C" & ColNo1 & "," & Chr(34) & "*" & Chr(34) & ")"
        '.FormulaR1C1 = "=COUNTif('" & FName1 & ShName1 & "'!C" & ColNo1 & "," & Chr(34) & "*" & Chr(34) & ")"
     ''With ShNew1.Range("A2")
        .FormulaR1C1 = "=COUNTA('" & FName1 & ShName1 & "'!C" & ColNo1 & ")"
        LastRow5 = .Value
    End With
    
    
    'ShNew1.Delete
    Application.DisplayAlerts = True
    Debug.Print Trim(LastRow5) + 1
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...