我知道它很简单,但我不知道我哪里出错 - 请帮助
设置场景:
我目前在工作簿中有3个工作表
Sheet1 - 包含将根据比赛的固定日期移动的原始数据
Sheet2 - 由从表单1复制的原始数据组成
查看 - 来自sheet2的数据视图
该过程是 - 用户将在sheet1中手动拖放灯具,然后剪辑启用宏的按钮,该按钮将获取灯具的副本并在sheet2中添加包含数据的其他列
然后点击最后一个按钮,在“视图”表格中创建此数据的视图。
所有视图表都在调用一个名为VnthLookup
的已定义模块,用相对值填充每个单元格。
问题
目前每张工作表的VBA和公式工作正常,在创建视图时,如果我通过单击单元格并单击键盘上的返回按钮手动提示计算,则更新并正常工作。但是,当我尝试重新计算整个视图表时,它会超时并需要永远完成计算(最多一个小时+仅30行,8列标题)
vnthlookup模块的编码是
Public Function VlookupNth(MyVal As Variant, MyRange As Range, Optional ColRef As Long, Optional Nth As Long = 1)
Dim Count, i As Long
Dim MySheet As Worksheet
Count = 0
Set MySheet = Sheets(MyRange.Parent.Name)
If ColRef = 0 Then ColRef = MyRange.Columns.Count
For i = MyRange.Row To MyRange.Row + MyRange.Rows.Count - 1
If MySheet.Cells(i, MyRange.Column).Value = MyVal Then
Count = Count + 1
If Count = Nth Then
VlookupNth = MySheet.Cells(i, MyRange.Column + ColRef - 1).Value
Exit Function
End If
End If
Next i
VlookupNth = ""
End Function
我的视图表在从B列到J列的每个单元格中都有以下公式 - 取决于我从sheet2请求的值,'X'将是不同的。
=VlookupNth(1,Sheet2!C:AAA,X,2)
理解为什么这么长时间的任何帮助都会受到赞赏。
如果解释需要澄清,请高兴地发送工作簿,请留下转发地址。答案 0 :(得分:4)
你有两个问题:
MyRange
变量。重写如下:
Public Function VlookupNth(ByVal MyVal As Variant, ByVal MyRange As Range, Optional ByVal ColRef As Long = 0, Optional ByVal Nth As Long = 1) As Variant
Dim Count As Long, i As Long
Count = 0
If ColRef = 0 Then ColRef = MyRange.Columns.Count
'Do not consider uninitialized rows
Set MyRange = Application.Intersect(MyRange, MyRange.Parent.UsedRange)
If Not MyRange Is Nothing Then
For i = 1 To MyRange.Rows.Count
If MyRange.Cells(i, 1).Value = MyVal Then
Count = Count + 1
If Count = Nth Then
VlookupNth = MyRange.Cells(i, ColRef).Value
Exit Function
End If
End If
Next i
End If
VlookupNth = ""
End Function
答案 1 :(得分:1)
也许不是回应,而是一些提示&建议开始。
Dim Count, i As Long 'is defining Count as a variant
Dim Count as long, i As Long 'is the proper syntax
然后
Set MySheet = Sheets(MyRange.Parent.Name)
似乎毫无意义。由于MySheet
是工作表,而您使用的是Set
,因此应为Set MySheet = Sheets(MyRange.Parent)
我建议你
Option Explicit
,