将 WB 声明为 public,其中文件名基于单元格值
Declare WB as public where file name is based on cell value
我需要有关全局声明 2 个工作簿的帮助,其中工作簿名称基于单元格值。
我有 3 个工作簿工作簿
- “UPSHI”(文件名不变)工作簿
- “UAH DR_M04 2022”(M04 和 2022 每月变化,具体取决于月份和年份)工作簿
- "2022_M04_OP21_AAH"(2022 年,M04 和 OP21 每月变化)。
UPASHI 工作簿将是我的主文件,它将创建我所有的按钮和公式,我在单元格 B1 中为第二个工作簿创建了公式,该公式将标识第二个工作簿的当前名称,并在单元格 B7 中创建另一个公式以标识当前我的第 3 个工作簿的名称。
我使用单元格 B1 和 B7 激活工作簿,工作正常,但是当我想将 sheet 从工作簿 2 复制到我的工作簿 3 时,我无法使它工作。
我想为每个工作簿声明一个全局变量,当我想激活或 select 工作簿时可以调用它,我怎样才能让它工作?
这是我当前的代码:
Sub PrepFile_Click()
Workbooks(ActiveSheet.Range("b1").Value).Activate
Application.DisplayAlerts = False
Sheets("Upstream Asset Hierarchy -OLD").Delete
Application.DisplayAlerts = True
Sheets("Upstream Asset Hierarchy Viewer").Name = "Upstream Asset Hierarchy -OLD"
Workbooks("UPASHI Automation File").Activate
Workbooks(ActiveSheet.Range("b7").Value).Activate
Sheets("Upstream Asset Hierarchy Viewer").Copy before:=Workbooks(ActiveSheet.Range("b1").Value).Sheets("UPSASSET")
End Sub
请尝试下一种方式:
- 在标准模块顶部(在声明区域)声明四个
Public
变量:
Option Explicit
Public wbUPS as Workbook, wbUAH as Workbook, wb3 As Workbook, ws As Worksheet
- 创建一个
Sub
,让我们说“SetWorbooks”,放置下一个代码:
Sub SetWorbooks
Set wbUPS = ThisWorkbook
Set ws = wbUPS.Worksheets("The name of the active sheet")
Set wbUAH = Workbooks(ws.Range("b1").Value)
Set wb3 = Workbooks(ws.Range("b7").Value)
End Sub
运行 上面的代码(一次)然后只使用 wbUPS
、wbUAH
、wb3
。当然,涉及的工作簿必须是打开的...
- 以下方式使用上述变量:
Sub PrepFile_Click()
If wbUAH Is Nothing Then SetWorbooks 'just in case
Application.DisplayAlerts = False
wbUAH.Sheets("Upstream Asset Hierarchy -OLD").Delete
Application.DisplayAlerts = True
wbUAH.Sheets("Upstream Asset Hierarchy Viewer").Name = "Upstream Asset Hierarchy -OLD"
wb3.Sheets("Upstream Asset Hierarchy Viewer").Copy before:=wbUAH.Sheets("UPSASSET")
End Sub
激活、选择不会带来任何好处(如果您知道如何避免),只会消耗 Excel 资源...
如果有什么不清楚的,请不要犹豫,要求澄清。当然,我无法测试上面的解决方案。
我需要有关全局声明 2 个工作簿的帮助,其中工作簿名称基于单元格值。
我有 3 个工作簿工作簿
- “UPSHI”(文件名不变)工作簿
- “UAH DR_M04 2022”(M04 和 2022 每月变化,具体取决于月份和年份)工作簿
- "2022_M04_OP21_AAH"(2022 年,M04 和 OP21 每月变化)。
UPASHI 工作簿将是我的主文件,它将创建我所有的按钮和公式,我在单元格 B1 中为第二个工作簿创建了公式,该公式将标识第二个工作簿的当前名称,并在单元格 B7 中创建另一个公式以标识当前我的第 3 个工作簿的名称。
我使用单元格 B1 和 B7 激活工作簿,工作正常,但是当我想将 sheet 从工作簿 2 复制到我的工作簿 3 时,我无法使它工作。
我想为每个工作簿声明一个全局变量,当我想激活或 select 工作簿时可以调用它,我怎样才能让它工作?
这是我当前的代码:
Sub PrepFile_Click()
Workbooks(ActiveSheet.Range("b1").Value).Activate
Application.DisplayAlerts = False
Sheets("Upstream Asset Hierarchy -OLD").Delete
Application.DisplayAlerts = True
Sheets("Upstream Asset Hierarchy Viewer").Name = "Upstream Asset Hierarchy -OLD"
Workbooks("UPASHI Automation File").Activate
Workbooks(ActiveSheet.Range("b7").Value).Activate
Sheets("Upstream Asset Hierarchy Viewer").Copy before:=Workbooks(ActiveSheet.Range("b1").Value).Sheets("UPSASSET")
End Sub
请尝试下一种方式:
- 在标准模块顶部(在声明区域)声明四个
Public
变量:
Option Explicit
Public wbUPS as Workbook, wbUAH as Workbook, wb3 As Workbook, ws As Worksheet
- 创建一个
Sub
,让我们说“SetWorbooks”,放置下一个代码:
Sub SetWorbooks
Set wbUPS = ThisWorkbook
Set ws = wbUPS.Worksheets("The name of the active sheet")
Set wbUAH = Workbooks(ws.Range("b1").Value)
Set wb3 = Workbooks(ws.Range("b7").Value)
End Sub
运行 上面的代码(一次)然后只使用 wbUPS
、wbUAH
、wb3
。当然,涉及的工作簿必须是打开的...
- 以下方式使用上述变量:
Sub PrepFile_Click()
If wbUAH Is Nothing Then SetWorbooks 'just in case
Application.DisplayAlerts = False
wbUAH.Sheets("Upstream Asset Hierarchy -OLD").Delete
Application.DisplayAlerts = True
wbUAH.Sheets("Upstream Asset Hierarchy Viewer").Name = "Upstream Asset Hierarchy -OLD"
wb3.Sheets("Upstream Asset Hierarchy Viewer").Copy before:=wbUAH.Sheets("UPSASSET")
End Sub
激活、选择不会带来任何好处(如果您知道如何避免),只会消耗 Excel 资源...
如果有什么不清楚的,请不要犹豫,要求澄清。当然,我无法测试上面的解决方案。