Excel VBA-工作表函数.CountA错误-需要对象

Excel VBA-工作表函数.CountA错误-需要对象,excel,vba,object,required,Excel,Vba,Object,Required,伙计们。我是一个编程新手,试图编写一个宏来从多个工作簿中提取一些数据行,并将它们编译成一个新工作簿,然后绘制它们的图形。我已经知道了如何循环浏览源电子表格,以及其他一些事情,但现在我被困在几个地方。(为了清晰起见,我会用不同的思路问不同的问题。) 此问题是关于使用WorksheetFunction.CountA获取我正在搜索的项目列表编号时出错的问题。我想知道号码,这样我就可以知道什么时候我找到了我所有的搜索字符串。如果我找不到它们,我想通知用户并退出 根据上的建议,我编写了一个代码段来测试Co

伙计们。我是一个编程新手,试图编写一个宏来从多个工作簿中提取一些数据行,并将它们编译成一个新工作簿,然后绘制它们的图形。我已经知道了如何循环浏览源电子表格,以及其他一些事情,但现在我被困在几个地方。(为了清晰起见,我会用不同的思路问不同的问题。)

此问题是关于使用WorksheetFunction.CountA获取我正在搜索的项目列表编号时出错的问题。我想知道号码,这样我就可以知道什么时候我找到了我所有的搜索字符串。如果我找不到它们,我想通知用户并退出

根据上的建议,我编写了一个代码段来测试CountA函数。我得到一个“需要对象”错误。我已经复习了几个关于这个话题的帖子,但我还是不明白。以下是我的代码片段:

Sub a_test_kpi_count()

Dim kpi_list_count As Integer

 Set kpi_list_count = Application.WorksheetFunction.CountA("kpi_list")

 MsgBox "There are " & kpi_list_count & "kpis in the list."


End Sub
当我运行代码时,编辑器会停止并突出显示“kpi\u list\u count”或“CountA”。嗯,那很有帮助

我应该补充一点,“kpi_列表”是宏所在工作表上的命名范围。但是,当我以这种方式指定范围时,会出现相同的错误:

Set kpi_list_count = Application.WorksheetFunction.CountA("K3:K7")
因此,我不认为命名范围是我的问题

在正确的方向轻推将是非常感激的

或者,请随便叫我白痴,并指出我明显的错误!;-)

编辑:

谢谢你,本

此代码正在运行:

Sub a_test_KPI_count()

Dim KPIListCount As Long

 KPIListCount = WorksheetFunction.CountA(Sheet1.Range("KPI_list"))

 MsgBox "There are " & KPIListCount & "KPIs in the list."

End Sub
谢谢大家!!奇怪的是,当我使用工作表名称、按钮时,它不起作用。工作表名称是否区分大小写?我这样问是因为编辑坚持“按钮”而不是“按钮”

如果可以的话,还有几个问题要问我,关于你的一些建议:

3,长与整数。在这种情况下,我算的是一个短名单(
  • 设置
    用于
    对象
    变量-将其删除

  • 指定命名范围时,需要调用
    Range

    kpi_list_count = Application.WorksheetFunction.CountA(Range("kpi_list"))
    
  • 99.9999%的时间您想要的是
    ,而不是
    整数
    ;请参阅:

  • 最佳做法是指定
    范围
    所在的工作表(根据需要更改):

  • 如果需要,可以删除
    应用程序

  • 考虑使用而不是

  • 设置
    用于
    对象
    变量-将其删除

  • 指定命名范围时,需要调用
    Range

    kpi_list_count = Application.WorksheetFunction.CountA(Range("kpi_list"))
    
  • 99.9999%的时间您想要的是
    ,而不是
    整数
    ;请参阅:

  • 最佳做法是指定
    范围
    所在的工作表(根据需要更改):

  • 如果需要,可以删除
    应用程序

  • 考虑使用而不是


  • 由于
    kpi\u list\u count
    是一个整数,请删除
    Set
    。工作表名称与工作表代码名称不同。若要使用工作表名称,请使用此工作簿。工作表(“按钮”)
    而不是
    Sheet1
    。请参阅为什么
    Long
    优于
    integer
    。没有“功能差异”在命名约定中,而不是如何(正面/负面)它会影响可读性和可维护性。在VBA标准库中,使用
    snake_case
    的成员只有0个,这应该是一个很好的线索!此外,如果/当您开始执行OOP并实现接口时,您会发现公共成员名称中的下划线实际上会使代码不可编译,因为下划线确实具有VBA中的特殊含义。关于工作表名称与代码名称,您可能想在我的博客上阅读,它应该加以澄清。由于
    kpi\u list\u count
    是一个整数,请删除
    Set
    。工作表名称与工作表代码名称不同。若要使用工作表名称,请使用
    此工作簿。工作表(“按钮”)
    而不是
    Sheet1
    。有关为什么
    Long
    Integer
    更可取的信息,请参阅。命名约定中没有“功能差异”,除了如何(正面/负面)之外它会影响可读性和可维护性。在VBA标准库中,使用
    snake_case
    的成员只有0个,这应该是一个很好的线索!此外,如果/当您开始执行OOP并实现接口时,您会发现公共成员名称中的下划线实际上会使代码不可编译,因为下划线确实具有VBA中的特殊含义。关于工作表名称与代码名称,您可能想在我的博客上阅读,它应该会澄清这一点。非常感谢您提供的教育性回答。但是,我仍然在使用这两种方法时遇到“需要对象”错误。“”kpilitcount=Application.WorksheetFunction.CountA(范围(“KPI_列表”))KPIListCount=Application.WorksheetFunction.CountA(Buttons.Range(“KPI_list”)“你能用你正在使用的修改过的代码编辑你的问题吗?我应该在原始问题中这样做吗?仍在学习协议。是的,那将是最好的。你可以将它作为“编辑”添加到末尾。”.注意-您可以按工作表名称或工作表代码名称来引用工作表。我使用的是后者。代码名称可以在VBEditor中找到。很可能
    按钮
    不是工作表的实际代码名称。非常感谢您提供的教育性回答。但是,我仍然获得了“需要对象”的信息这两种方法都有错误。“”kpilitcount=Application.WorksheetFunction.CountA(范围(“KPI_列表”))kpilitcount=Application.WorksheetFunction.CountA(按钮.Range(“KPI_列表”))'你能用你正在使用的修改后的代码编辑你的问题吗?我应该在原始问题中这样做吗?仍然在这里学习协议。是的,那将是最好的。你可以将它添加到末尾,作为“编辑”.注意-您可以按工作表名称或工作表代码名称引用工作表。我使用的是后者。代码名称可以在VBEditor中找到。很可能
    按钮
    不是工作表的实际代码名称。
    kpi_list_count = Application.WorksheetFunction.CountA(Sheet1.Range("kpi_list"))