【问题标题】:Excal VBA - Vlookup macro dropdown - out of stack spaceExcel VBA - Vlookup 宏下拉列表 - 堆栈空间不足
【发布时间】:2018-08-07 02:25:27
【问题描述】:

我有一张 Excel 表格,我可以从下拉列表中选择多个项目。

选择特定项目后,将运行特定宏,将 vlookup 公式粘贴到单元格区域。

我的工作簿 VBA 如下所示:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Select Case Range("B2")

Case "Company 1"
Call Company1

Case "Company 2"
Call Company2

End Select
End Sub

我的宏如下所示

Sub Company1()
Range("D7:D14").Formula = "=VLOOKUP(B7,'SheetLocation\[Sheet1.xls]Sheet1'!$A$6:$E$93,3,FALSE)"
End Sub

Sub Company2()
Range("D7:D14").Formula = "=VLOOKUP(B7,'SheetLocation\[Sheet2.xls]Sheet2'!$A$6:$E$93,3,FALSE)"
End Sub

每次我选择值表单下拉列表时使用此类宏,我的 excel 都会挂起并显示错误 Runtime error 28 - Out of stack space。

需要你们的帮助。

【问题讨论】:

  • 您不在乎 Range("B2") 在哪个工作表上?
  • 我在乎,应该是 Sheet1,我知道它没有定义。尽管如此添加到代码中:code If Not Intersect(Target, Range("B2")) Is Nothing 然后解决了这个问题。
  • 你不能使用 worksheet_change 造成无限循环吗?
  • 这个问题现在回答了吗?

标签: excel vlookup vba


【解决方案1】:

您正在使用Workbook_SheetChange 粘贴公式。每次任何单元格更改值时都会触发此事件,因此它会为每个粘贴的公式激活,并且在计算完成时再次触发。每次计算公式时,Excel 都会重新计算所有公式,因此它会一次又一次地触发此事件。所以是的,无限循环溢出内存,你会得到那个错误。要修复它,请禁用事件

Application.EnableEvents = False
Select Case Range("B2")

Case "Company 1"
Call Company1

Case "Company 2"
Call Company2

End Select
Application.EnableEvents = true

但老实说,最好的解决方案是不使用该事件。在那种情况下,你真的需要它吗?

更多关于Out of stack space (Error 28)的信息

更多关于Workbook.SheetChange Event的信息

【讨论】:

  • 我使用了这个事件,因为它被建议在一个关于带有下拉列表的宏的tuts中
猜你喜欢
  • 2017-11-14
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
相关资源
最近更新 更多