将 WB 声明为 public,其中文件名基于单元格值

Declare WB as public where file name is based on cell value

我需要有关全局声明 2 个工作簿的帮助,其中工作簿名称基于单元格值。

我有 3 个工作簿工作簿

  1. “UPSHI”(文件名不变)工作簿
  2. “UAH DR_M04 2022”(M04 和 2022 每月变化,具体取决于月份和年份)工作簿
  3. "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

请尝试下一种方式:

  1. 在标准模块顶部(在声明区域)声明四个 Public 变量:
 Option Explicit

 Public wbUPS as Workbook, wbUAH as Workbook, wb3 As Workbook, ws As Worksheet
  1. 创建一个 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

运行 上面的代码(一次)然后只使用 wbUPSwbUAHwb3。当然,涉及的工作簿必须是打开的...

  1. 以下方式使用上述变量:
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 资源...

如果有什么不清楚的,请不要犹豫,要求澄清。当然,我无法测试上面的解决方案。