如果主要在公式Excel VBA中引用它,则复制另一个工作表

时间:2015-06-06 17:41:49

标签: vba excel-vba excel

我有一个工作表,它引用同一工作簿“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中的公式。

1 个答案:

答案 0 :(得分:1)

您在评论中说“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")