vba运行时错误1004 应用程序定义或对象定义错误

Sub 复制数值()
Dim new_Book As Workbook
Set new_Book = Workbooks.Add
ThisWorkbook.Sheets(1).Copy before:=new_Book.Sheets(1)
new_Book.Activate
Sheets(1).Range("A1:H").End(xlUp).Select '该行调试出错,我只希望复制出A1:H列的最后一行非空行
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
new_Book.SaveAs "D:\" & Mid(Sheets("1").Range("A2"), 6, 23) & ".xls"
End Sub

下图:我希望只复制出A1:H21行的内容

vba运行时错误1004 应用程序定义或对象定义错误是设置错误造成的,解决方法为:

1、先打开一个文件。

2、单击文件―选项―信任中心―信任中心设置。

3、打开“信任中心”对话框 宏设置。

4、勾选“信任对VBA工程对象模型的访问” 点击确定。就不会出现运行时错误1004提示。 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-29
估计是你代码前面有强制声明语句:Option Explicit,而你的S1和s4并没有声明,所以出错。删除那句或将变量全部声明即可。
另外从代码看出了一个重要问题,在While (s1.Cells(r1, 1) <> "")循环体内并没有改变r1的值,所以 s1.Cells(r1, 1) 是永远不会变的,如果满足条件进入循环就成了死循环。另外While (s1.Cells(r1, 1) <> "")这句的外层括号是多余的
第2个回答  推荐于2017-12-16
Sheets(1).Range("A1:H").End(xlUp).Select很明显,应该改为 Sheets(1).Range("A1:H1").End(xlUp).Select,你就缺了一个1,就是Range("A1:H1"),呵呵。采纳吧。。。本回答被提问者采纳
第3个回答  2014-12-30

试试改改这里:

For G = 1 To Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)
Next

在Sheets.Count前面加一个wb.

改后如下:

For G = 1 To wb.Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)
Next

第4个回答  2013-12-30
Sheets(1).Range("A1:H").End(xlUp).Select 改成 Sheets(1).Range("A1:H1").End(xlUp).Select
--注意写全追问

非常感谢你的回答,都很好,可只能采纳一个

相似回答