为什么VBA宏打开它复制的文件,而不是当前工作簿中的工作表?

时间:2016-04-12 14:19:17

标签: excel vba excel-vba

我将模块1中的所有宏从一个文件复制到另一个模块1,包括这个:

Sub OpenMonth4tabs()
 '
' OpenMonth4tabs Macro
' Closes all sheets except Base Values
' Opens sheets for Month 4, prepares Base Data for month 4 view
'
 Call HideAllSheets
 Call PrepareMonth4Base

Sheets("M4 Sales Record").Visible = True
Sheets("M4 Sales Record").Select
Sheets("M4 P&L").Visible = True
Sheets("M4 P&L").Select
Sheets("M4 Sales KPIs").Visible = True
Sheets("M4 Sales KPIs").Select
Sheets("M4 Aftersales KPIs").Visible = True
Sheets("M4 Checklist").Visible = True
Sheets("M4 Checklist").Select
Range("C10").Select

End Sub

但是,虽然我正在使用的文件中包含与原始文件具有完全相同名称的选项卡(它是具有相似名称的更高版本),但在运行时它会打开原始文件和选项卡,而不是当前的选项卡工作簿。我在代码中看不到任何标识原始工作簿的内容,也不知道如何防止这种情况。

代码引用另一个已关闭的工作簿的原因是什么? 如何让它在新工作簿中工作,而不是打开旧工作簿? 任何帮助将不胜感激,这让我疯了!

2 个答案:

答案 0 :(得分:2)

感谢您从中学到的建议。与此同时,一位同事找到了问题的根源: 这些宏工作得很好,但我也复制了一个带有链接到宏的按钮的工作表,这些链接专门用于旧工作簿中的宏,而不是当前的宏。因此,每次我使用按钮运行宏时,它都会打开旧工作表并在其上运行宏。如果我从宏框中运行宏,它可以在新的(当前活动的)工作簿中工作,而无需打开旧的工作簿。 所以我问的问题是错误的问题,但我现在看到如何通过将控制按钮重新链接到正确的工作簿来解决问题。

答案 1 :(得分:0)

您可能希望在宏的开头添加活动工作簿引用,然后使用它来作为Sheets引用的前言。类似的东西:

dim wb as workbook
set wb = ActiveWorkbook

Call HideAllSheets
Call PrepareMonth4Base

wb.worksheets("M4 Sales Record").Visible = True
wb.worksheets("M4 Sales Record").Select
etc