【发布时间】:2019-05-22 22:22:51
【问题描述】:
我在文件中添加了一个简单的 Previous Sheet 宏,它工作正常,直到它开始返回 #NAME 错误,我不知道为什么。
我打算将它与工作簿中一致的命名单个单元格范围一起使用,在命名范围之前我已经成功使用它并且认为它不会对功能产生任何影响。命名范围后,尽管它不再起作用,即使对于常规的非命名范围也是如此。
我已经通过创建一个新工作簿、填写一些工作表并尝试进行测试,但它仍然返回 #NAME 错误。当我评估函数时,错误出现在第一步:识别函数。但是,当我在公式栏中键入时,程序通常会为我提供公式。
我也尝试通过单元格引用命名单元格,甚至在单元格之前添加工作表名称(例如“prevsheet(previoussheetname!a1),或prevsheet(thissheetname!a1))。我什至在最后的努力中尝试添加单元格名称前的双引号。
为了全面披露,我还有另一个宏子例程,它使用对上一张和下一张表的引用,但由于它无法识别函数本身(这应该是一个早期标志),它利用了相对引用(即 @987654334 @,activesheet(index + 1))。当时我并不认为它会破坏功能,但随着我越来越绝望和困惑,也许这是一种可能性。
我使用的PrevSheet() 代码:
Function PrevSheet(RCell As Range)
Dim xIndex As Long
Application.Volatile
xIndex = RCell.Worksheet.Index
If xIndex > 1 Then _
PrevSheet = Worksheets(xIndex - 1).Range(RCell.Address)
End Function
正如 Chris Neilsen 所建议的那样
Function PrevSheet(RCell As Range) As Variant
Application.Volatile
PrevSheet = RCell.Worksheet.Previous.Range(RCell.Address).Value
结束函数
根据 Chris Neilsen 的建议,我已将命名范围编辑为如下所示:
!(nothing)$column$row,其范围设置为Workbook
宏已启用
任何对 vba、宏和 excel 有更好理解的人都可以告诉我为什么会发生这种情况以及如何解决它,以便它返回输入函数的工作表左侧第一张工作表中指定单元格的值? (即sheet4中=prevsheet(A1)会返回sheet3中单元格A1的值)
我希望我的问题现在更清楚了!
【问题讨论】:
-
不清楚你希望函数返回什么............上一个工作表的名称或的值上一个工作表中的单元格或什么 ??
-
#NAME表示未从当前工作簿或任何插件中找到 UDFPrevSheet。您的 UDF 应该返回 Range。如果启用了宏,那么这个 UDF 函数应该显示并且不会给你 #NAME 错误。 -
您的问题可能与您定义命名范围的方式有关。请用您的姓名的完整详细信息更新您的 Q