2017-08-16 210 views
1

vba相当新颖,但我写了一个代码,可以在列中取消合并,然后复制单元格,然后粘贴到不同的宏工作簿中。当我第一次运行代码时,代码运行良好。不过,我今天试图使用它,我很震惊,我有一个错误。此错误指出它无法找到目标文件名。这很奇怪,因为目标文件名没有改变或移动。这里是一个代码示例。Excel VBA-运行时错误1004打开工作簿

误差示出了在线路:

设置第二册= Workbooks.Open( “报道跨式燃料 Usage.xlsm财政'17”)

的代码如下:

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") 
+3

很可能您的工作簿文件名或路径发生了变化。 –

+0

不相关,但如果'book1'是'ThisWorkbook',那么如果您放弃了'book1'并使用了现有的'ThisWorkbook'对象引用,那么您的代码将更容易遵循。另请参阅[如何避免选择和激活](https://stackoverflow.com/q/10714251/1188513)。 ...然后,你已经在'With'块中引用了'sheet1' ... –

+0

让我困惑的是为什么你从2个不同的集合('Worksheets',然后'Sheets'非常接下来的一行) - 将'.Buttons(“Button 6”)。Text'赋值到'With'块中。 –

回答

2

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

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

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中很多东西,最好是明确的。给它一个完整的路径。

+0

我很新,这是我写过的第一个代码。但这很有道理,谢谢。当我粘贴时,我应该使用“路径”,而不是文件名 –

+0

@ShellyPig真棒。如果您不确定接下来要做什么,请参阅[本帮助中心页面](https://stackoverflow.com/help/accepted-answer)。 –

+0

不确定你是否看到我的编辑评论 –