2014-08-28 9 views
-1

Я совершенно новый, чтобы преуспеть в макросах VBA, поэтому моя проблема должна быть легко решена.Копирование рабочих листов из одной книги в другую

Я пытаюсь открыть все файлы в одной папке, немного отредактировать эти файлы и скопировать их в существующую книгу. К сожалению, ошибка времени выполнения «424»: требуется объект.

Выделено находится ряд:

ActiveSheets.Copy После того, как: = Workbooks ("Macro sheets.xlsm") Sheets (Sheets.Count)

Похоже, "Макро sheets.xlsm", не делает. существует, но это имя рабочей книги, из которой я запускаю этот макрос.

Я прошел через многие форумы, пробовал много кодов, но до сих пор не нашел решения.

Пожалуйста, помогите мне?

Спасибо большое,

Jan

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) 

Это хорошая практика, чтобы объявить Option Explicit в верхней части каждого модуля, таким образом а «переменная не определена» ошибки делает его легче обнаружить опечатки в именах переменной/объекта. Вы можете установить это автоматически, перейдя в VBA> «Инструменты»> «Параметры»> «Редактор»> «Требовать переменную».

+0

Здравствуйте, Дэйв, большое спасибо за ваш ответ. Теперь макрос работает для части за другим, поэтому для книг с одним рабочим листом. Есть ли у вас какие-либо идеи, как решить проблему с двумя выбранными рабочими листами? –

+0

', если Activeworkbook.Worksheets.Count = 2, то листы (1) .Select ActiveSheet.Name = Левый (Activeworkbook.Name, InStr (Activeworkbook.Name,) "" - 1) & "_1_month" Листы (2) .Select ActiveSheet.Name = Left ("" Activeworkbook.Name, InStr (Activeworkbook.Name,) - 1) & "_by_month" Activeworkbook.Sheets.Select «вот проблема: ActiveSheets.Copy After: = Рабочие книги («Macro sheets.xlsm»). Листы (таблицы.) 'отсюда это работает: Else' –

+0

Это снова ссылка на Activesheets. Вместо того, чтобы выбирать все листы, а затем пытаться их скопировать, вы можете изменить Activeworkbook.Sheets.Select for Activeworkbook.Sheets.Copy – Dave

Смежные вопросы