【问题标题】:Copy another worksheet if the main references it in formulas, Excel VBA如果主要在公式 Excel VBA 中引用它,则复制另一个工作表
【发布时间】:2015-06-07 23:25:00
【问题描述】:

我有一个工作表引用同一工作簿“ProductsList”中的另一个工作表。 VBA 应将工作表保存为独立的电子表格,如果任何公式包含对我的产品列表的引用,也应将其保存。

我正在尝试使用以下内容:

Function UsesProductsList(ws As Worksheet) As Boolean
    Dim r As Range
    Dim c As Range
    Set r = ws.UsedRange
    UsesProductsList = False
    For Each c In r
        If InStr(1, c.Formula, ProductsList.Name) > 0 Then
            UsesProductsList = True
            Exit Function
        End If
    Next c
End Function

但有一个错误。当我调试错误时,我可以看到它与以下行 If InStr(1, c.Formula, ProductsList.Name) > 0 Then 有关,当我用鼠标悬停时,我可以看到单元格 A1 中的公式。

【问题讨论】:

  • 你有什么错误?
  • 运行时错误 424 需要对象
  • ProductsList.Name 可能是原因。如果“ProductsList”是工作簿的名称,则使用 Workbooks 这样的集合:Workbooks("ProductsList").Worksheets(1).Name ... 或工作表的任何名称:Workbooks("ProductsList").Worksheets("SomeSheetName").Name
  • 怎么样?我只是想如果公式中存在指定的名称,VBA 应该识别它并继续保存。
  • ProductsList 是其中一张工作表的名称

标签: vba excel


【解决方案1】:

您在 cmets 中说“ProductsList 是其中一个工作表的名称”。 VBA 不会自动知道工作簿中的哪些内容被命名。所以你必须使用像 Workbooks("book_name")Worksheets("sheet_name") 这样的代码,其中 book_name 和 sheet_name 被实际名称替换。所以你需要修改这段代码:

If InStr(1, c.Formula, ProductsList.Name) > 0 Then

对任何一个

If InStr(1, c.Formula, "ProductsList") > 0 Then

或者

If InStr(1, c.Formula, Worksheets("ProductsList").Name) > 0 Then

这两者最终都以在函数中硬编码的名称结束。您还可以将函数的定义更改为:

Function UsesProductsList(ws As Worksheet, wsProductList As Worksheet) As Boolean

然后将代码行更改为:

If InStr(1, c.Formula, wsProductsList.Name) > 0 Then

当您使用UsesProductsList 函数时,您需要包含 ProductsList 表的参数。您可以使用ThisWorkbook.Worksheets("ProductsList")ActiveWorkbook.Worksheets("ProductsList")

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2013-10-26
    • 2019-05-02
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多