2014-08-28 182 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

相關問題