【问题标题】:How to Activate a Workbook using a variable workbook name?如何使用可变工作簿名称激活工作簿?
【发布时间】:2019-11-19 09:27:09
【问题描述】:

我是 VBA 新手,需要一些关于我的代码的帮助。我正在使用 Excel 和 Application.GetOpenFilename 提示用户选择要打开的文件。当我将数据从一个文件复制到另一个文件时,我正在尝试激活 GetOpenFilename 应用程序打开的工作簿。

我正在从我的主工作簿运行 VBA 代码,这就是我的代码的样子。

打开导入文件

strGetFilename = Application.GetOpenFilename(, , "Open Import Workbook")
Workbooks.Open strGetFilename 

对于这个例子,我们假设选择打开的文件是 Workbook2,然后我从 Workbook2 中的一个表中选择数据并复制它。

ActiveSheet.ListObjects("table1").Range.Select
   Selection.Copy

我现在将数据粘贴到我的主工作簿中

Windows("PrimaryWorkbook.xlsm").Activate
Sheets("Sheet1").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks _
              :=False, Transpose:=False

这就是我被绊倒的地方。我想返回 Workbook2 以复制其他表格/工作表或能够执行其他数据编辑,并且我不希望文件名被硬编码。

有什么建议吗?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    将其分配给变量

    Sub x()
    
    Dim wb As Workbook, strGetFilename As String
    strGetFilename = Application.GetOpenFilename(, , "Open Import Workbook")
    
    Set wb = Workbooks.Open(strGetFilename)
    
    MsgBox wb.Name
    
    End Sub
    

    阅读this,了解如何避免使用 Select/Activate。

    然后你可以使用

    wb.Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    

    【讨论】:

    • 这很好用,最重要的是,感谢您将我引导到有关避免选择/激活的线程。该主题帮助我更好地理解 DIM & Set,现在我的爬行变成了步行。
    【解决方案2】:

    你需要使用'Set'

    Set fileVariable = Workbooks.Open(path & "\" & fileName)
    

    然后您可以使用 fileVariable.Range("A1").select 引用该变量。

    通常最好避免选择和激活。可以直接编码

    .range("A1").value2 = .range("B1").value2 
    

    复制和粘贴。

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2014-07-02
      • 1970-01-01
      • 2017-01-16
      • 2023-04-05
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多