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

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

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 

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

代码是指另一个封闭的工作簿是什么原因? 我怎样才能在新的工作簿中工作,而不是打开旧工作簿? 任何帮助将不胜感激,这是驱使我坚果!

感谢我从中学到的build议。 与此同时,一位同事发现了问题的根源:这些macros是完美的工作,但我也复制了一个工作表中的button链接到macros,链接是特定于旧的工作簿,而不是现有的macros。 所以每次我用一个button来运行一个macros时,它就会打开旧的工作表并运行macros。 如果我从macros框中运行macros,它将在新的(当前活动的)工作簿中工作,而不打开旧的工作簿。 所以我问的问题是错误的问题,但我现在看到如何解决问题,通过重新连接控制button到正确的工作簿。

您可能需要在macros的开头添加一个活动的工作簿引用,然后使用该引用来作为表单引用的前缀。 就像是:

 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