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