2014-08-28 128 views
-1

我对excel VBA宏很新,所以我的问题应该很容易解决。从一个工作簿复制工作表到其他

我试图打开一个文件夹中的所有文件,编辑这些文件一点点,并将它们复制到现有的工作簿。不幸的是,发生运行时错误'424':Object required。

聚焦的行:

ActiveSheets.Copy后:=工作簿( “宏sheets.xlsm”)表(Sheets.Count)

它看起来像 “宏sheets.xlsm”,其实不然。存在,但这是工作簿的名称,我从中运行此宏。

我已经经历了许多论坛,尝试了很多代码,但仍然没有找到解决方案。

请问有人能帮我吗?

谢谢了很多,

Sub nahranidat() 

Dim YourFile As Variant 
Dim YourFolderPath As Variant 
YourFolderPath = "K:\MMR\2015\BO\macro files connection\" 
ChDir YourFolderPath 
YourFile = Dir(YourFolderPath & "*.*") 
Do While YourFile <> "" 
    Workbooks.Open Filename:=YourFolderPath & YourFile 
    YourFile = Dir 
Set myObject = ActiveWindow 


If Activeworkbook.Worksheets.Count = 2 Then 

Sheets(1).Select 
ActiveSheet.Name = Left(Activeworkbook.Name, InStr(Activeworkbook.Name, ".") - 1) & "_1_month" 
Sheets(2).Select 
ActiveSheet.Name = Left(Activeworkbook.Name, InStr(Activeworkbook.Name, ".") - 1) & "_by_month" 


Activeworkbook.Sheets.Select 

ActiveSheets.Copy After:=Workbooks("Macro sheets.xlsm").Sheets(Sheets.Count) 

Else 

Sheets(1).Select 
ActiveSheet.Name = Left(Activeworkbook.Name, InStr(Activeworkbook.Name, ".") - 1) 

Activeworkbook.Sheets.Select 

ActiveSheets.Copy After:=Workbooks("Macro sheets.xlsm").Sheets(Sheets.Count) 


End If 

Application.CutCopyMode = False 
myObject.Close , SaveChanges:=False 
Loop 


End Sub 

回答

1

你引用ActiveSheets代替ActiveSheet所以VBA将假设你已经创建了一个新的对象。只要改变该行

ActiveSheet.Copy After:=Workbooks("Macro sheets.xlsm").Sheets(Sheets.Count) 

这是很好的做法,申报方案在每个模块的顶部明确,这样一个“变量没有定义”错误会使得它更容易发现变量/对象名称拼写错误。您可以通过转到VBA>工具>选项>编辑器>需要变量声明来自动设置它。

+0

你好戴夫,非常感谢你的回答。现在,该宏适用于其他部分之后的部分 - 所以对于具有一个工作表的工作簿。你有什么想法,如何解决两个选定的工作表的问题? – 2014-08-29 07:41:05

+0

'如果Activeworkbook.Worksheets.Count = 2然后 表(1)。选择 ActiveSheet.Name =左(Activeworkbook.Name,InStr函数(Activeworkbook.Name, “”) - 1)& “_1_month” 表(2)。选择 ActiveSheet.Name =左( “” Activeworkbook.Name,InStr函数(Activeworkbook.Name,) - 1)& “_by_month” Activeworkbook.Sheets.Select “这里的问题是: ActiveSheets.Copy After:= Workbooks(“Macro sheets sheets.xlsm”)。Sheets(Sheets.Count) 'from here works: Else' – 2014-08-29 07:49:14

+0

这是对Activesheets的参考。您可以选择Activeworkbook.Sheets.Copy – Dave 2014-08-29 08:04:02

相关问题