Скопируйте каждый рабочий лист из одного файла Excel в другой

Имея это, вероятно, легко решить проблему, но без каких-либо навыков программирования мне трудно взломать...

Я сделал файл excel с кнопкой, назначенным ей макросом.

Что он должен делать:

  1. Откройте другой файл xls, который пользователь может искать на жестком диске.
  2. скопировать каждый лист из открытого файла
  3. Вставьте его в исходный файл и закройте тот, из которого он был скопирован.

Пока я получил это:

Sub Importfile()

Dim sFile As String
Dim wb As Workbook

sFile = Application.GetOpenFilename("*.xls,*.xls")

If sFile <> "False" Then
    Set wb = Workbooks.Open(sFile)


    'Copy and paste code , where I dont know what to do




    wb.Close
End If

End Sub

person Adam    schedule 11.04.2013    source источник
comment
Эксель 2003? Вы пытались использовать макрорекордер для этого?   -  person Kazimierz Jawor    schedule 11.04.2013
comment
Для этого вы можете использовать бесплатно доступную надстройку RDBMerge. stackoverflow.com/questions/15186302/   -  person Santosh    schedule 11.04.2013
comment
этот вопрос задают почти ежедневно в stackoverflow, одном из наиболее часто встречающихся дубликатов Excel...   -  person K_B    schedule 11.04.2013
comment
Хорошая идея KazJaw. Спасибо! Моя единственная проблема заключается в том, что когда я начинаю записывать это, я открываю его для определенного файла. Но я хочу, чтобы он был закодирован как любой файл, открытый пользователем.   -  person Adam    schedule 11.04.2013
comment
Посмотрите, как записанный макрос выполняет копирование, внедрите это в свой макрос. Вы просто пытаетесь продублировать одну книгу или собрать рабочие листы из многих книг?   -  person NickSlash    schedule 11.04.2013
comment
это примерно несколько листов из рабочей тетради. Если я использую записанный код макроса, то он ищет тот файл, из которого я скопировал при записи. Но я хочу, чтобы активировался тот файл, который будет открывать пользователь. Надеюсь, я ясно :)   -  person Adam    schedule 11.04.2013
comment
Установите wb = Workbooks.Activate(sFile) что-то вроде этого, я думаю..   -  person Adam    schedule 11.04.2013


Ответы (1)


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

Я использовал For Each, вы также можете просто For или любую другую петлю, которая вам нравится.

Sub Importfile()

Dim sFile As String
Dim wb As Workbook
Dim ws As Worksheet

sFile = Application.GetOpenFilename("*.xls,*.xls")

If sFile <> "False" Then
    Set wb = Workbooks.Open(sFile)

    For Each ws In wb.Worksheets
        ws.Copy before:=ThisWorkbook.Worksheets(1)
    Next ws

    wb.Close
End If

End Sub

У меня макрос работает! Пожалуйста, убедитесь, что вы разместили код в правильном месте.

На изображении ниже «Книга 1» — это ваш исходный лист (тот, который вы копируете листы в), код макроса должен быть вставлен в «модуль» (красный квадрат), а не любой из тех, что в оранжевом квадрате. Если у вас нет «модуля 1» (или любого другого), вам нужно вставить новый, заглянув в меню «вставка» в верхней части редактора vba.

введите здесь описание изображения

person NickSlash    schedule 11.04.2013
comment
Выглядит красиво и просто. Я получаю сообщение об ошибке: не удалось скопировать метод объекта '_Worksheet'. - person Adam; 11.04.2013
comment
ws.Copy before:=ThisWorkbook.Worksheets(1) — это указано как проблема. Даже если я изменю ThisWorkbook на исходное имя файла, в котором выполняется макрос - person Adam; 11.04.2013
comment
Действительно, это была проблема. Я очень ценю вашу помощь. Отличное мастерство вы освоили :) - person Adam; 11.04.2013