2016-09-06 1 views
0

У меня есть макрос, чтобы объединить различные книги в один мастер первенствовать книги:комбинат только первый лист из нескольких книг в одну Excel VBA

Sub GetSheets() 
Path = "\Users\myname\Documenten\Test\" 
Filename = Dir(Path & "*.xls") 
    Do While Filename <> "" 
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True 
    For Each Sheet In ActiveWorkbook.Sheets 
    Sheet.Copy After:=ThisWorkbook.Sheets(1) 
    Next Sheet 
    Workbooks(Filename).Close 
    Filename = Dir() 
    Loop 
End Sub 

У меня есть два вопроса относительно этого:

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

Большое спасибо!

+0

Есть несколько символов, которые допустимы в именах рабочих книг, которые являются недопустимыми в именах рабочего листа («[» и «]»), а также имена рабочего листа ограничены 31 символов в то время как имена книг могут быть длиннее. Поэтому будьте готовы к ошибкам или другому непредвиденному поведению, если вы попытаетесь установить имя листа, равное имени книги. – YowE3K

+0

Хорошо спасибо, и если я хочу включить только листы 1 и 4 каждой книги без изменения имени? – Sner88

+0

См. Ответ от user3598756 и просто добавьте строку с надписью '.Worksheets (4) .Copy After: = ThisWorkbook.Sheets (1)' after' .Worksheets (1) .Copy After: = ThisWorkbook.Sheets (1) ' , а также удалить строку 'ThisWorkbook.Sheets (2) .name = .name'. – YowE3K

ответ

1

попробовать это:

Option Explicit 

Sub GetSheets() 
    Dim Path As String, fileName As String 
    Dim Sht As Worksheet 

    Path = "\Users\myname\Documenten\Test\" 
    fileName = Dir(Path & "*.xls") 
    Do While fileName <> "" 
     Workbooks.Open fileName:=Path & fileName, ReadOnly:=True 
     With ActiveWorkbook 
      .Worksheets(1).Copy After:=ThisWorkbook.Sheets(1) 
      ThisWorkbook.Sheets(2).name = .name 
     End With 
     ActiveWorkbook.Close 
     fileName = Dir() 
    Loop 
End Sub 
+0

Спасибо за ваш ответ, но это не работает. Теперь я получаю первый рабочий лист первой книги и сохраняет имя рабочей книги как первое имя листа. Однако мне нужны первые листы всех книг и переименовать первые листы всех книг во имя самих книг. Вы знаете, как это сделать? Может быть, изменить для каждого заявления? – Sner88

+0

код не работает, как вы описали в своем комментарии. Скорее он 1) открывается один за другим, все книги типа «.xls» в заданной папке 2) копирует свой первый рабочий лист только в книгу, в которой находится макрос после первого рабочего листа. 3) переименуйте вновь вставленный лист в соответствии с «имя источника» книги. На самом деле это то, о чем вы просили. Я протестировал его. Не так ли? – user3598756

+0

@ Sner88, вы прошли через это? – user3598756

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