Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 工作表上变量的多个赋值_Excel_Vba - Fatal编程技术网

Excel 工作表上变量的多个赋值

Excel 工作表上变量的多个赋值,excel,vba,Excel,Vba,我有一个函数,它指向工作簿中的一个特定工作表,从中获取一些数据并将其返回给该函数。代码如下: Function nameOfFlow(jobSheet As String, jobName As String) As String Dim ws As Worksheet Dim curCell As Long Set ws = Worksheets(jobSheet) For curCell = 2 To ws.Rows.Count If ws.

我有一个函数,它指向工作簿中的一个特定工作表,从中获取一些数据并将其返回给该函数。代码如下:

Function nameOfFlow(jobSheet As String, jobName As String) As String
    Dim ws As Worksheet
    Dim curCell As Long

    Set ws = Worksheets(jobSheet)
    For curCell = 2 To ws.Rows.Count
        If ws.Cells(curCell, 2).Value = jobName Then
            nameOfFlow = ws.Cells(curCell, 2).Offset(0, 3).Value
        End If
    Next curCell
End Function

问题是,当这个函数只被调用一次时,它就可以正常工作并按预期运行。但是,例如,当它在同一个流中被多次调用时,我会在将变量分配给工作表的行上得到一个错误。我真的不确定这里出了什么问题。我得到一个
下标超出范围的错误。任何帮助都将不胜感激

如果Personal.xlsb中有此函数,如果当前的ActiveBook不是您期望的,则可能会出现此错误。确保活动工作簿包含工作表“jobSheet”或将ws作为参数传递给“NameOffflow”函数

您应该避免使用这一行代码:

For curCell = 2 To ws.Rows.Count
它将使宏遍历工作簿的所有行

您可以这样更正:

For curCell = 2 To ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
    If ws.Cells(curCell, 1).Value = jobName Then
        nameOfFlow = ws.Cells(curCell, 2).Offset(0, 3).Value
    End If
Next curCell

如果Personal.xlsb中有此函数,则如果当前ActiveBook不是您期望的ActiveBook,则可能会出现此错误,并且应避免使用以下代码行:For curCell=2 To ws.Rows.Count。您将遍历工作簿的所有行…谢谢Seb的回答。我添加了一个ThisWorkbook。在调用此函数的函数中激活,它就工作了!现在,我对VBA不是很有经验,但是,您能告诉我,是否可以只遍历那些包含一些单元格的行,这些单元格中有值?我知道这与这个问题无关。但是,如果你能让我知道,那就太好了!我将制定一个答案