我有一个用Visual Basic编写的函数,应该在两个Excel工作簿中阅读并对其进行一些文本分析。
我得到的问题是,每当我尝试在工作表的单元格中运行该函数时,都会在VBA中出现错误“需要常量表达式”,并且出现“ #VALUE!”错误。单元中的错误。
我的功能行看起来像
Function CriticalPercentage() As Double
然后我通过在单元格中键入“ = CriticalPercentage()”来调用该函数。
当我在单元格中键入函数调用后单击Enter时,它将转到VBA,显示错误消息,并且Function CriticalPercentage() As Double
以黄色突出显示。在我从函数中提供的以下代码的最后一行中,它也以蓝色突出显示.Count
。
Function CriticalPercentage() As Double
Debug.Print "the first line works fine"
ByVal WorkbookName1 As String, ByVal WorkbookName2 As String
' this section accesses the excel files and sheets the script will be working with
WorkbookName1 = "name of excel file"
WorkbookName2 = "name of excel file"
Workbooks.Open WorkbookName1
Workbooks.Open WorkbookName2
' define variables for the the two workbooks
Dim Workbook1, Workbook2 As Excel.Workbook
Dim Worksheet1, Worksheet2 As Excel.Worksheet
' create workbook objects to work with
Set Workbook1 = Excel.Workbooks(WorkbookName1)
Set Workbook2 = Excel.Workbooks(WorkbookName2)
' sets worksheet variables to the sheets contained in the two workbooks, respectively
Set Worksheet1 = Workbook1.Sheets(1).Select
Set Worksheet2 = Workbook2.Sheets(1).Select
'---------------------------------------------------------------------------------------
' this section of code works on reading in all the neccessary info from the ARCHER excel file
' search for [Application Name & Finding]
Dim i, j, k As Integer
Dim numRows As Integer
Const numRows = Worksheet1.UsedRange.Rows.Count
我尝试在Debug.Print
之后放置Function CriticalPercentage() As Double
语句,但是它不会立即显示在窗口中,因此我被认为在取消该功能时我做错了什么
在此方面的任何帮助以及对于我为什么会收到此错误的任何见解,我将不胜感激。如果需要提供更多代码,我会很乐意这样做。
非常感谢!
答案 0 :(得分:4)
问题不在于函数的签名,而是此指令的问题:
Const numRows = Worksheet1.UsedRange.Rows.Count
Dim
和Const
语句不可执行,它们是声明性语句-您不能在它们上设置断点:当编译器看到{{ 1}}声明在处理VBA代码时,会在编译时在静态上下文中评估值表达式 ,并将该值“刻录”到所有调用站点。
Const
基本上,编译一次是:
Const foo = 42
Debug.Print foo
在编译时,Debug.Print 42
不是常量表达式:它需要直到运行时才存在的对象,例如Worksheet1.UsedRange.Rows.Count
引用。
长话短说,对变量使用UsedRange
,对恒定的事物使用Dim
-例如Const
或rgbRed = &HFF0000
,即无论您如何看待或何时看待事物,始终具有相同价值的事物。如果它不是常数,则不应为Pi = 3.14159
。