【问题标题】:Excel VBA- Runtime Error 1004 opening a workbookExcel VBA-运行时错误 1004 打开工作簿
【发布时间】:2018-01-25 02:10:10
【问题描述】:

vba 很新,但我编写了一个代码,用于取消合并列中的行,复制单元格然后粘贴到不同的宏工作簿中。代码在我第一次运行时运行良好。但是我今天尝试使用它,我很震惊我有一个错误。此错误表明它找不到目标文件名。这很奇怪,因为目标文件名没有改变或移动。这是代码示例。

错误显示在以下行:

Set book2 = Workbooks.Open("17 财年报告的跨式燃料 用法.xlsm")

代码如下:

Public Sub Button6_Click()
       'Change name of button

       Worksheets("7500").Buttons("Button 6").Text = "Send"
       With Sheets("7500")

       'Unmerge cells
       .Range("AI3:AI92").Select
       With Selection
        For Each rCell In Selection
         With rCell
         If .MergeCells Then
          .MergeArea.UnMerge
         End If
        End With
       Next rCell
       End With
      End With

      'open destination workbook

       Dim book1 As Workbook
       Dim sheet1 As Worksheet
       Dim book2 As Workbook
       Dim sheet2 As Worksheet
       Application.ScreenUpdating = False
       Set book1 = ThisWorkbook
       Set book2 = Workbooks.Open("Fiscal '17 Reported Straddle Fuel Usage.xlsm")
       Set sheet1 = book1.Sheets("7500")
       Set sheet2 = book2.Sheets("Nov ‘17")

【问题讨论】:

  • 很可能您的工作簿文件名或路径已更改。
  • 不相关,但如果 book1ThisWorkbook,如果您删除 book1 并使用已经存在的 ThisWorkbook 对象引用,您的代码将更容易遵循。另请参阅how to avoid Select and Activate。 ...然后,您已经在 With 块中引用了 sheet1...
  • 让我困惑为什么你从 2 个不同的集合中访问同一个工作表(Worksheets,然后是下一行的Sheets) - 将 .Buttons("Button 6").Text 分配移动到 With 块.
  • 另外,Public 的事件处理程序会引发一个标志。而且压痕也低于标准。我建议看看 Rubberduck 如何帮助您改进代码。

标签: vba excel runtime-error filenames


【解决方案1】:

目标文件名没有改变或移动

您没有指定路径。指定路径。

Set book2 = Workbooks.Open("Fiscal '17 Reported Straddle Fuel Usage.xlsm")
Const path As String = "C:\Foo\Bar\Fiscal '17 Reported Straddle Fuel Usage.xlsm"
Set book2 = Workbooks.Open(path)

Workbooks.Open 无论CurDir 路径是什么,只要用户看到“打开文件”对话框并开始浏览,CurDir 的值就会发生变化:没有完整路径的文件名是不可靠。

与 VBA 中的许多内容一样,最好明确说明。给它一个完整的路径。

【讨论】:

  • 我对此很陌生,这是我真正写过的第一个代码。但这是有道理的,谢谢。当我粘贴时,我应该使用“路径”而不是文件名
  • @ShellyPig 太棒了。如果您不确定下一步该怎么做,请参阅this Help Center page
  • 没有,但是如果您不确定发生了什么,您需要阅读有关在 VBA 中使用变量和常量的信息。
  • 谢谢它的工作,不知道为什么事件处理程序是公开的。它甚至不在我的原始代码上。但再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多