【问题标题】:Referencing a workbook whose file name changes consistently - solution suggestions?引用文件名不断变化的工作簿 - 解决方案建议?
【发布时间】:2020-02-03 02:15:24
【问题描述】:

这里是 VBA 新手。 在工作中,我正在创建一个宏,它可以编译和格式化我们每月获得的报告和文件名更改中的数据。 由于名称更改,而不必进入 VBE 并从那里更改名称,是否有一个我可以创建的用户表单允许我输入工作簿的名称,并且可以将其插入脚本?

到目前为止我所拥有的:

Sub tester()

Dim wbName As String
wbName = Application.InputBox("What is the workbook name?")
If Right(wbName, 4) <> ".xls" Then wbName = wbName + ".xls"
Set mainWB = Workbooks(wbName)

Dim copyThis As Range, pasteThis As Range

Set copyThis = mainWB.Worksheets(2).Columns("F")
Set pasteThis = Workbooks("VBA Workbook.xlsm").Worksheeets(1).Columns("A")

copyThis.Copy Destination:=pasteThis

End Sub

工作簿名称将逐月更改。

欢迎替代解决方案

谢谢大家

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    假设您的宏位于 Personal.xlsb 中,并且您拥有需要引用为 ActiveWorkbook 的工作簿,您可以这样做:

    Dim mainWB as Workbook
    Set mainWB = ActiveWorkbook
    

    那么你只需使用mainWB 作为参考,所以:

    mainWB.Worksheets("Sheet1").Range("A1")
    

    或者如果您希望用户输入 WB 名称:

    Dim wbName as String
    wbName = Application.InputBox("What is the workbook name?")
    If right(wbName, 4) <> ".xls" Then wbName = wbName + ".xls"
    Set mainWB = Workbooks(wbName)
    ...
    

    ...如果用户键入的名称不正确,您可能希望在 InputBox() 情况下添加错误处理。

    【讨论】:

    • 谢谢!这是有见地的。由于引用了活动工作簿,如果我有两个工作簿并且我想引用第二个工作簿怎么办?
    • @patriciajlim 您可以使用输入法,或者,只需单击进入/退出您希望处于活动状态的工作簿中的单元格,然后运行子
    • 我已经尝试了代码,但是收到一个错误,提示下标超出范围。 Set mainWB = Workbooks(wbName) 突出显示为错误行。我已经更新了上面的代码,你能帮我找出可能有什么问题吗?
    • @patriciajlim wbName 抛出错误时是什么? (在Set wbName ... 行之前添加Debug.print wbName)您可能必须包含该工作簿的路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多