Excel VBA运行时错误1004“;应用程序定义或对象定义错误“;

Excel VBA运行时错误1004“;应用程序定义或对象定义错误“;,vba,excel,Vba,Excel,我正在编写一个程序,当用户单击“确定”时,保存当前文件,复制文件中的某些值;然后将值粘贴到其他文件。然后两个文件都关闭。我的问题是它给了我一个错误: 运行时错误:“应用程序定义或对象定义错误” 它突出了这一行: ThisWorkbook.Worksheets("data").Range("C31", Range("C106").End (xlToRight)).Copy 我把这一行和它后面的那一行分开,单独测试它,它就像我想要的那样工作。我在没有这两行代码的情况下测试了程序的其余部分,它的工作

我正在编写一个程序,当用户单击“确定”时,保存当前文件,复制文件中的某些值;然后将值粘贴到其他文件。然后两个文件都关闭。我的问题是它给了我一个错误:

运行时错误:“应用程序定义或对象定义错误”

它突出了这一行:

ThisWorkbook.Worksheets("data").Range("C31", Range("C106").End (xlToRight)).Copy
我把这一行和它后面的那一行分开,单独测试它,它就像我想要的那样工作。我在没有这两行代码的情况下测试了程序的其余部分,它的工作方式与我预期的一样。 我试着把它限制在只复制一个细胞,结果成功了。 我确保那张纸的名字是正确的。 我试图只复制一行:

Range("C31", range("C31").End(xlToRight)) 
它仍然不起作用,我遇到了相同的错误消息。 我想说我引用了一些错误的东西,但我看不出来。 任何回复都会有帮助,谢谢

另外,我很抱歉代码中有冗余,我没有像应该的那样多使用“Dim”

Sub Button425_Click()
Dim FName As String
Dim FPath As String
Dim yourmsg As String
Dim testmsg As String
yourmsg = "Are you sure that you want to save and exit?"
testmsg = MsgBox(yourmsg, vbOKCancel + vbExclamation)
FPath = "I:\a\d\f\daily log recycle\"
FName = Sheets("Sheet1").Range("C3").Text
If testmsg = 1 Then
    ThisWorkbook.SaveAs filename:=FPath & "\" & FName
    Workbooks.Open ("I:\a\d\f\new daily log 1.xlsm")
    ThisWorkbook.Worksheets("data").Range("C31", Range("C31").End(xlToRight)).Copy
    Workbooks("new daily log 1.xlsm").Worksheets("data").Range("D31").PasteSpecial xlPasteValues
    ThisWorkbook.Worksheets("sheet1").Range("E45").Copy
    Workbooks("new daily log 1.xlsm").Worksheets("sheet1").Range("E44").PasteSpecial
    Workbooks("new daily log 1.xlsm").Worksheets("sheet1").Range("E45").ClearContents
    Workbooks("new daily log 1.xlsm").Save
    Workbooks("new daily log 1.xlsm").Close
    ThisWorkbook.Saved = True
    Application.Quit
Else 'do nothing
End If

End Sub

我发现了几个问题:

FPath = "I:\a\d\f\daily log recycle\"
ThisWorkbook.SaveAs filename:=FPath & "\" & FName
当您尝试保存时,您将有
…\daily log recycle\\\
。删除一个反斜杠
\
,我建议删除
.SaveAs
行中的反斜杠

然后,用这两行:

Workbooks.Open ("I:\a\d\f\new daily log 1.xlsm")
ThisWorkbook.Worksheets("data").Range("C31", Range("C31").End(xlToRight)).Copy
ThisWorkbook.Worksheets("sheet1").Range("E45").Copy
ThisWorkbook.Saved = True
ThisWorkbook
可能没有指向您认为是的工作簿。在以下所有行中指定
工作簿(“new daily log 1.xlsm”)。
,为什么不将
此工作簿
替换为显式
工作簿(“…”
),以便100%确定引用的两个打开的工作簿中的哪一个

对于这两行,我也会这样做:

Workbooks.Open ("I:\a\d\f\new daily log 1.xlsm")
ThisWorkbook.Worksheets("data").Range("C31", Range("C31").End(xlToRight)).Copy
ThisWorkbook.Worksheets("sheet1").Range("E45").Copy
ThisWorkbook.Saved = True

另外,为了清楚起见,
thiswoolk.Saved=True
告诉Excel在您关闭工作簿时不要提示您保存工作簿,但实际上它不会保存工作簿。如果您想实际保存它,您需要使用
.save
,就像您在
工作簿(“new daily log 1.xlsm”)的上面做几行一样。save
您正在混合一个完全寻址的范围

ThisWorkbook.Worksheets("data").Range("C31"
Range("C106").End (xlToRight)
具有相对寻址范围

ThisWorkbook.Worksheets("data").Range("C31"
Range("C106").End (xlToRight)
试一试