VBA宏执行VLOOKUP时弹出‘Update Values: MODs’窗口的解决求助
解决VLOOKUP宏弹出"Update Values: MODs"窗口的问题
出现该弹窗的核心原因是Excel无法明确识别公式里的'MODs'!A:D指向当前工作簿内的工作表,误将其判定为外部文件引用。以下是几种可行的修复方案:
方案1:明确指定当前工作簿引用
在公式中加入当前工作簿的名称,让Excel直接定位到当前打开的工作簿内的MODs工作表,彻底消除外部引用的误判:
Sub VLOOKUP_Formula_3() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim lr As Integer lr = sh.Range("A" & Application.Rows.Count).End(xlUp).Row ' 获取当前工作簿名称,统一用方括号包裹适配含空格的情况 Dim wbName As String wbName = "[" & ThisWorkbook.Name & "]" ' 写入带明确工作簿引用的公式 sh.Range("AD2").Formula = "=VLOOKUP(AC2,'" & wbName & "MODs'!A:D,2,0)" sh.Range("AE2").Formula = "=VLOOKUP(AC2,'" & wbName & "MODs'!A:D,3,0)" sh.Range("AF2").Formula = "=VLOOKUP(AC2,'" & wbName & "MODs'!A:D,4,0)" sh.Range("AD2:AF" & lr).FillDown sh.Range("AD2:AF" & lr).Copy sh.Range("AD2:AF" & lr).PasteSpecial xlPasteValues Application.CutCopyMode = False End Sub
方案2:使用工作表CodeName(更稳定)
每个工作表都有一个固定的CodeName(可在VB编辑器的属性窗口中查看,比如默认的Sheet2),直接用CodeName引用无需依赖工作表显示名称,也不会触发外部引用判定:
Sub VLOOKUP_Formula_3() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim lr As Integer lr = sh.Range("A" & Application.Rows.Count).End(xlUp).Row ' 直接使用MODs工作表的CodeName(示例为Sheet2,需替换为实际CodeName) sh.Range("AD2").Formula = "=VLOOKUP(AC2,Sheet2!A:D,2,0)" sh.Range("AE2").Formula = "=VLOOKUP(AC2,Sheet2!A:D,3,0)" sh.Range("AF2").Formula = "=VLOOKUP(AC2,Sheet2!A:D,4,0)" sh.Range("AD2:AF" & lr).FillDown sh.Range("AD2:AF" & lr).Copy sh.Range("AD2:AF" & lr).PasteSpecial xlPasteValues Application.CutCopyMode = False End Sub
方案3:临时禁用链接更新(应急方案)
如果只是临时屏蔽弹窗,可以在执行公式前禁用自动更新链接,执行完成后恢复原有设置:
Sub VLOOKUP_Formula_3() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim lr As Integer lr = sh.Range("A" & Application.Rows.Count).End(xlUp).Row ' 保存原有设置并禁用链接更新提示 Dim originalUpdateSetting As Boolean originalUpdateSetting = Application.AskToUpdateLinks Application.AskToUpdateLinks = False sh.Range("AD2").Formula = "=VLOOKUP(AC2,'MODs'!A:D,2,0)" sh.Range("AE2").Formula = "=VLOOKUP(AC2,'MODs'!A:D,3,0)" sh.Range("AF2").Formula = "=VLOOKUP(AC2,'MODs'!A:D,4,0)" sh.Range("AD2:AF" & lr).FillDown sh.Range("AD2:AF" & lr).Copy sh.Range("AD2:AF" & lr).PasteSpecial xlPasteValues ' 恢复原有设置 Application.AskToUpdateLinks = originalUpdateSetting Application.CutCopyMode = False End Sub
推荐优先使用方案1或方案2,从根源上明确引用范围,避免Excel的误判。
内容的提问来源于stack exchange,提问作者LBroussard
相关产品推荐
相关产品推荐

