Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
VBA:Excel在结束时崩溃,如果_Vba_Excel - Fatal编程技术网

VBA:Excel在结束时崩溃,如果

VBA:Excel在结束时崩溃,如果,vba,excel,Vba,Excel,我知道这个函数工作正常,但是当我尝试填写电子表格时,它几乎会立即导致Excel崩溃。当我进入调试模式时,它会告诉我在最后有一个问题。我相信这是正确的,因为End If结束了前面的If语句 Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long) 'Update 20150310 Dim rng As Range Dim xResult As String xResult = "" For Each rng

我知道这个函数工作正常,但是当我尝试填写电子表格时,它几乎会立即导致Excel崩溃。当我进入调试模式时,它会告诉我在最后有一个问题。我相信这是正确的,因为End If结束了前面的If语句

 Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)

'Update 20150310
Dim rng As Range
Dim xResult As String

xResult = ""
For Each rng In pWorkRng
    If rng = pValue Then
        xResult = xResult & " " & rng.Offset(0, pIndex - 1)
    End If '<-- crashes here
Next
MYVLOOKUP = xResult
End Function
函数MYVLOOKUP(pValue作为字符串,pWorkRng作为范围,pIndex作为长度)
'更新20150310
变暗rng As范围
将结果设置为字符串
xResult=“”
对于pWorkRng中的每个rng
如果rng=pValue,则
xResult=xResult&&&rng.Offset(0,pIndex-1)

如果“允许将循环限制为仅第一列和该工作表上的使用范围,则结束:

 Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)

'Update 20150310
Dim rng As Range
Dim xResult As String
'resets the range to only the first column and the used range.
'this will limit the cycling to the smallest possible range.
Set pWorkRng = Intersect(pWorkRng.Columns(1), pWorkRng.Parent.UsedRange)

xResult = ""
For Each rng In pWorkRng
    If rng = pValue Then
        xResult = xResult & " " & rng.Offset(0, pIndex - 1)
    End If 
Next
MYVLOOKUP = xResult
End Function

仅供参考,这可以在Office 365 Excel中使用新的TEXTJOIN()公式作为数组来完成
=TEXTJOIN(“,TRUE,IF(LookupRange=pValue,ResultRange,”)
用Ctrl-Shift-Enter确认。
结束如果
没有问题,确切的错误是什么?崩溃是指桌面崩溃还是运行时错误。如果是,是什么?内存不足?范围有多大?您是否希望只查看第一列?如果是这样的话,将范围限制在第一列。也许还可以将其更改为数组,并从那时起使用数组。@Nathan_Sav我想到了这一点,但不知道OP是如何使用公式的,这让它变得很困难。如果OP没有放入整个范围的值,而只放入第一列,并且让偏移量做第二维的工作,则很难放入数组。我相信这是可行的。对于那些想知道的人,我将525个名字的名单与7000个名字的名单进行了匹配,每个名字前面都有一个角色。我需要将这些角色附加到525个名字中的每一个。基本上,在一张电子表格上,鲍勃是一名经理,而在另一张表格上,鲍勃可以扮演许多角色