【问题标题】:Need a Excel Formula or Macro to count rows in a Table in a closed Workbook需要 Excel 公式或宏来计算已关闭工作簿中表中的行数
【发布时间】:2020-08-05 16:20:19
【问题描述】:

我正在寻找一种方法来计算已关闭工作簿无需打开源文件(公式或宏)中的表中的行数。我有以下代码 sn-p 对范围执行此操作,但不适用于表格。

    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。

我们将不胜感激。

【问题讨论】:

  • 我只是猜测下班后躺在床上太累了,什么都做不了,但是您是否尝试过公式="countif('"your code,"*" &")" 或=not(countblank (,.. 等等。请原谅我筋疲力尽。在查看/研究引用封闭工作簿的特殊情况之前,我会用尽我所知道的所有选项和方法。..
  • 您需要文件的完整路径。 .从它在您的机器中的位置。请参阅 - ozgrid.com/forum/index.php?thread/…。就是这样。我出去了。
  • 所以上面的 sn-p 工作得很好。这是我插入错误的文件路径的错误。再次感谢。

标签: excel vba excel-formula


【解决方案1】:

它不适合你的唯一原因是:

A.已关闭文件的路径名。尝试将这些工作簿扩展名更改为 .xlsm ,并完整引用它们。和

B. ShNew1.Delete

我现在正在我的电脑上试用它,它可以正常工作。我很高兴。

摆脱 ShNew1.Delete。您的CountA已关闭 .xlsm 文件上的工作方式与预期一样。并且只需输入整个路径。

.."C:\Users\User\Documents\... " 等。或者您的文档及其位置的任何内容。

我应该先询问是否将已关闭的文件重命名为 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

【讨论】:

  • 感谢大卫的帮助。看来我的文件路径可能有错误。我明天要测试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 2016-02-07
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多