【问题标题】:Importing data to Master File that has a changing name将数据导入到名称更改的主文件
【发布时间】:2018-03-12 15:53:49
【问题描述】:

我正在尝试将所选工作簿中的数据复制并粘贴到我的主文件中。我遇到的一个主要问题是回到主文件,原因是主文件的名称每个月都会更改为它正在运行的月份,例如本月的“三月主文件” 下个月运行时的“四月主文件”。我尝试通过引用文件路径返回文件,但它不起作用,例如“Windows(模板文件)。激活”。关于是否有更简单的编写方法并且不必引用文件路径的任何建议?

这就是我到目前为止所做的:

Sub ImportRepurchData()

    Dim combinedBook As Workbook
    Dim filter As String
    Dim caption As String
    Dim combinedFilename As String
    Dim combinedWorkbook As Workbook
    Dim targetWorkbook As Workbook

    TEMPLATEFile = Sheets("Dynamic").Range("ImportRepurch")
    ' Open Source Data

    Set targetWorkbook = Application.ActiveWorkbook

    filter = "Text files (*.xlsx),*.xlsx"
    caption = "Please Select an input file"
    combinedFilename = Application.GetOpenFilename(filter, , caption)

    Set combinedWorkbook = Application.Workbooks.Open(combinedFilename)
    ' Paste Source Data into original workbook

    Range("P4:P100000,AL4:AL100000").Select
    Selection.Copy

    Windows(TEMPLATEFile).Activate

    Sheets("Input Sched-Unsched Split").Select
    Range("B9:B100000,C9:C100000").Select
    ActiveSheet.Paste

    combinedWorkbook.Close

End Sub

【问题讨论】:

  • 你似乎已经掌握了引用工作簿的窍门,为什么不将初始工作簿Set 指向一个对象,然后objectname.Activate 呢?
  • 附言。你已经 Dimmed CombinedBook - 但你不使用它。
  • @CLR 我认为问题是不是稍后在代码中识别工作簿。问题是从 to Set 开始识别工作簿。每个月,在代码运行之前它都有一个不同的名称。 Kieran1995 需要能够告诉 vba 哪个工作簿是主工作簿,能够Set它到一个变量。
  • 你可能是对的@Mistella,但问题是在代码开始时甚至打开了多少张工作表,其中一个正在运行代码等问题有点模糊。Jen 的建议遍历每个寻找模式的书名可能是解决方案,或者只是在开始时Setting 正确的书也可以。这取决于设置。
  • @CLR 感谢您的建议。我刚刚使用“ThisWorkbook”返回到主文件,因为那是运行该文件的工作簿。我应该知道的简单解决方案,所有的好学习

标签: vba excel import excel-formula


【解决方案1】:

如果您从主文件中运行代码,您可以使用 本工作簿 代替 Application.Workbooks(someIndexOrName)

此工作簿始终是运行 tje 代码的工作簿,即使它是加载项 (XLAM)。

如果不是这样,您可以编写一个函数来识别您的工作簿,例如根据是否存在具有特殊名称(或代号)的工作表。甚至可能是多张纸。然后你可以遍历 Application.Workbooks 直到找到你的主文件

【讨论】:

  • 谢谢你,这是有用的建议。
【解决方案2】:

另一点是这会给你带来问题:

Range("P4:P100000,AL4:AL100000").Select
Selection.Copy

Windows(TEMPLATEFile).Activate

Sheets("Input Sched-Unsched Split").Select
Range("B9:B100000,C9:C100000").Select
ActiveSheet.Paste

当你可以达到同样的效果时

 combinedWorkbook.range("P4:P100000").copy targetworkbook.worksheets(""Input Sched-Unsched Split").range("B9")
 combinedWorkbook.range("al4:al100000").copy targetworkbook.worksheets("Input Sched-Unsched Split").range("c9")

永远不要在 VBA 中使用 select 或 activate

【讨论】:

  • 谢谢。我已使用 ThisWorkbook 返回我的主文件,但在使用建议的代码时代码似乎失败了。错误是运行时错误“438”:对象不支持此属性或方法。对此有何建议?
  • @Kieran1995 注意:第二个代码块的第一行多了一个引号。如果您按原样复制和粘贴,则会导致一些错误。
  • @Mistella 发现了 - 在我更改后发生错误
  • @Kieran1995 这可能是因为combinedWorkbook.range 没有工作表引用,例如combinedWorkbook.Worksheet("Sheet1").range。我不确定工作簿是否有范围对象;他们可能只有工作表对象。
  • 对不起,错过了 - 你需要添加工作表名称所以它应该是 combineWorkbook.Sheets("name of sheet").Range(2P4:P100000").copy etc.
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
相关资源
最近更新 更多