Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/в открытую книгу вставить активный/открытый лист др. книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » в открытую книгу вставить активный/открытый лист др. книги (Макросы/Sub)
в открытую книгу вставить активный/открытый лист др. книги
Yar4i Дата: Среда, 15.03.2017, 14:47 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Добрый день дамы и господа :D
Есть два открытых файла Excel. Название одного из них всегда содержит "М29*...", название второго меняется "Nnn".
Нужно в первый открытый файл "М29..." скопировать активный лист из второго открытого файла "Nnn" (во втором файле может быть и много листов).
Ранее я думал, что необходимо чётко прописывать наименования книг, листов, но наткнулся на этот код:
[vba]
Код
Sub О()
Dim iPath$, iFileName$
    iPath = ThisWorkbook.Path & "\"
    iFileName = Dir(iPath & "*.xls")
    Do Until iFileName = ""
       If iFileName <> ThisWorkbook.Name Then
          ThisWorkbook.Sheets.Add , , , iPath & iFileName
       End If
       iFileName = Dir
    Loop
End Sub
[/vba]
Попробовал его при следующих условиях:
На рабочем столе сохранён Excel с поддержкой макросов "Макросы", открыты обе книги ("М29..." и "Nnn"), запускаю макрос из панели быстрого доступа.
Что на первом файле запускаю, что на втором - результат одинаков: копируется первый лист файла "М29..." в файл "Макросы".
Пусть не правильно,.. пусть не то и не туда, но копируется же.
К сообщению приложен файл: 29_2-12-13_556_.xlsx (8.8 Kb) · Nnn.xlsx (7.6 Kb)


Сообщение отредактировал Yar4i - Среда, 15.03.2017, 14:48
 
Ответить
СообщениеДобрый день дамы и господа :D
Есть два открытых файла Excel. Название одного из них всегда содержит "М29*...", название второго меняется "Nnn".
Нужно в первый открытый файл "М29..." скопировать активный лист из второго открытого файла "Nnn" (во втором файле может быть и много листов).
Ранее я думал, что необходимо чётко прописывать наименования книг, листов, но наткнулся на этот код:
[vba]
Код
Sub О()
Dim iPath$, iFileName$
    iPath = ThisWorkbook.Path & "\"
    iFileName = Dir(iPath & "*.xls")
    Do Until iFileName = ""
       If iFileName <> ThisWorkbook.Name Then
          ThisWorkbook.Sheets.Add , , , iPath & iFileName
       End If
       iFileName = Dir
    Loop
End Sub
[/vba]
Попробовал его при следующих условиях:
На рабочем столе сохранён Excel с поддержкой макросов "Макросы", открыты обе книги ("М29..." и "Nnn"), запускаю макрос из панели быстрого доступа.
Что на первом файле запускаю, что на втором - результат одинаков: копируется первый лист файла "М29..." в файл "Макросы".
Пусть не правильно,.. пусть не то и не туда, но копируется же.

Автор - Yar4i
Дата добавления - 15.03.2017 в 14:47
Perfect2You Дата: Среда, 15.03.2017, 15:33 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Приведенный Вами макрос просматривает ВСЮ папку, где лежит файл с макросом. Из ВСЕХ файлов с расширением xls он выдергивает по листку и копирует в файл с макросом. Причем, похоже для этого даже необязательно: открыты ли они.

Для Вашей цели достаточно находиться на листе, который должен быть скопирован и одной строки:
[vba]
Код
ActiveSheet.Copy After:=Workbooks("М29...").Sheets(Workbooks("М29...").Sheets.Count)
[/vba]
Вместо "М29...", конечно же, должно быть полное имя файла с расширением.
Приведенный пример вставляет новый лист в конец книги (правее всех). А вот так он будет вставлен левее всех:
[vba]
Код
ActiveSheet.Copy Before:=Workbooks("М29...").Sheets(1)
[/vba]
 
Ответить
СообщениеПриведенный Вами макрос просматривает ВСЮ папку, где лежит файл с макросом. Из ВСЕХ файлов с расширением xls он выдергивает по листку и копирует в файл с макросом. Причем, похоже для этого даже необязательно: открыты ли они.

Для Вашей цели достаточно находиться на листе, который должен быть скопирован и одной строки:
[vba]
Код
ActiveSheet.Copy After:=Workbooks("М29...").Sheets(Workbooks("М29...").Sheets.Count)
[/vba]
Вместо "М29...", конечно же, должно быть полное имя файла с расширением.
Приведенный пример вставляет новый лист в конец книги (правее всех). А вот так он будет вставлен левее всех:
[vba]
Код
ActiveSheet.Copy Before:=Workbooks("М29...").Sheets(1)
[/vba]

Автор - Perfect2You
Дата добавления - 15.03.2017 в 15:33
Yar4i Дата: Среда, 15.03.2017, 16:19 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
должно быть полное имя файла

Спасибо работает, без указания расширения тоже.
А без имён никак вообще? (или частичного указания) Должен же быть All ActiveSheets какой-нибудь.


Сообщение отредактировал Yar4i - Среда, 15.03.2017, 16:24
 
Ответить
Сообщение
должно быть полное имя файла

Спасибо работает, без указания расширения тоже.
А без имён никак вообще? (или частичного указания) Должен же быть All ActiveSheets какой-нибудь.

Автор - Yar4i
Дата добавления - 15.03.2017 в 16:19
Perfect2You Дата: Среда, 15.03.2017, 18:22 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Ну почему же никак...
[vba]
Код
Sub otl()
Dim wbn As String, wb As Object
wbn = ""
For Each wb In Application.Workbooks
    If Left(wb.Name, 3) = "М29" Then
        wbn = wb.Name
    End If
Next wb
If Len(wbn) = 0 Then
    MsgBox "Нет такой книги"
    Exit Sub
End If
ActiveSheet.Copy Before:=Workbooks(wbn).Sheets(1)
End Sub
[/vba]
хотя бы так. Найдет начинающуюся с "М29" книгу. Вот только если такая не одна, затрудняюсь сказать: какую из них.
 
Ответить
СообщениеНу почему же никак...
[vba]
Код
Sub otl()
Dim wbn As String, wb As Object
wbn = ""
For Each wb In Application.Workbooks
    If Left(wb.Name, 3) = "М29" Then
        wbn = wb.Name
    End If
Next wb
If Len(wbn) = 0 Then
    MsgBox "Нет такой книги"
    Exit Sub
End If
ActiveSheet.Copy Before:=Workbooks(wbn).Sheets(1)
End Sub
[/vba]
хотя бы так. Найдет начинающуюся с "М29" книгу. Вот только если такая не одна, затрудняюсь сказать: какую из них.

Автор - Perfect2You
Дата добавления - 15.03.2017 в 18:22
Yar4i Дата: Четверг, 16.03.2017, 09:09 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
начинающуюся с "М29" книгу

Спасибо. Великолепно работает.
В конце только изменил: [vba]
Код
ActiveSheet.Copy After:=Workbooks(wbn).Sheets(2)
[/vba] (не сказал, что в книге М29 всегда 2 листа).
 
Ответить
Сообщение
начинающуюся с "М29" книгу

Спасибо. Великолепно работает.
В конце только изменил: [vba]
Код
ActiveSheet.Copy After:=Workbooks(wbn).Sheets(2)
[/vba] (не сказал, что в книге М29 всегда 2 листа).

Автор - Yar4i
Дата добавления - 16.03.2017 в 09:09
Yar4i Дата: Четверг, 16.03.2017, 13:14 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Выскочила разовая ошибка «Не удается вставить листы в конечную книгу, так как она содержит меньшее число строк и столбцов, чем исходная книга.»
Нашёл решение: пересохранить в другом расширении файл "донор" *.xlsx или *.xls. Но суть ошибки не понял какая разница, где сколько листов, столбцов.
 
Ответить
СообщениеВыскочила разовая ошибка «Не удается вставить листы в конечную книгу, так как она содержит меньшее число строк и столбцов, чем исходная книга.»
Нашёл решение: пересохранить в другом расширении файл "донор" *.xlsx или *.xls. Но суть ошибки не понял какая разница, где сколько листов, столбцов.

Автор - Yar4i
Дата добавления - 16.03.2017 в 13:14
китин Дата: Четверг, 16.03.2017, 13:17 | Сообщение № 7
Группа: Модераторы
Ранг: Экселист
Сообщений: 7019
Репутация: 1074 ±
Замечаний: 0% ±

Excel 2007;2010;2016
в xls 64000 строк в xlsx 1000000 строк. Есть разница?


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениев xls 64000 строк в xlsx 1000000 строк. Есть разница?

Автор - китин
Дата добавления - 16.03.2017 в 13:17
Yar4i Дата: Четверг, 16.03.2017, 14:24 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
в xls 64000 строк в xlsx 1000000 строк.

Спасибо.

[vba]
Код
...ActiveSheet.Copy After:=Workbooks(wbn).Sheets(2)
ActiveSheet.Name = "КС2"
[/vba]
пытаюсь имя перенесенному листу назначить, не выходит

Вышло:)
[vba]
Код
ActiveWorkbook.ActiveSheet.Name = "КС2"
[/vba]


Сообщение отредактировал Yar4i - Четверг, 16.03.2017, 14:37
 
Ответить
Сообщение
в xls 64000 строк в xlsx 1000000 строк.

Спасибо.

[vba]
Код
...ActiveSheet.Copy After:=Workbooks(wbn).Sheets(2)
ActiveSheet.Name = "КС2"
[/vba]
пытаюсь имя перенесенному листу назначить, не выходит

Вышло:)
[vba]
Код
ActiveWorkbook.ActiveSheet.Name = "КС2"
[/vba]

Автор - Yar4i
Дата добавления - 16.03.2017 в 14:24
Perfect2You Дата: Четверг, 16.03.2017, 14:40 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
У меня без проблем.
Но только если нет уже в книге листа с таким именем. Может, в Вашей есть с таким именем лист?
 
Ответить
СообщениеУ меня без проблем.
Но только если нет уже в книге листа с таким именем. Может, в Вашей есть с таким именем лист?

Автор - Perfect2You
Дата добавления - 16.03.2017 в 14:40
Yar4i Дата: Четверг, 16.03.2017, 14:52 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
с таким именем лист

нет листа с таким именем, повторил и опять без ActiveWorkbook. никак.
 
Ответить
Сообщение
с таким именем лист

нет листа с таким именем, повторил и опять без ActiveWorkbook. никак.

Автор - Yar4i
Дата добавления - 16.03.2017 в 14:52
Perfect2You Дата: Четверг, 16.03.2017, 14:54 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Странно, но главное, проблему Вы решили. Поздравляю!
 
Ответить
СообщениеСтранно, но главное, проблему Вы решили. Поздравляю!

Автор - Perfect2You
Дата добавления - 16.03.2017 в 14:54
Yar4i Дата: Четверг, 16.03.2017, 16:20 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Поздравляю

Спасибо.
Я "донорский" файл хочу предварительно пересохранить в новом формате, чтоб не выскакивала ошибка "«Не удается вставить листы в конечную книгу, так как она содержит меньшее число строк..."
(немного не по теме, (а немного и по теме)):
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & ".xlsx", FileFormat:=xlOpenXMLWorkbook
[/vba]
сохраняет в нужном формате ".xlsx", но на рабочем столе, а хочется чтобы сохранял с подменой, т.е. вместо существующего.
 
Ответить
Сообщение
Поздравляю

Спасибо.
Я "донорский" файл хочу предварительно пересохранить в новом формате, чтоб не выскакивала ошибка "«Не удается вставить листы в конечную книгу, так как она содержит меньшее число строк..."
(немного не по теме, (а немного и по теме)):
[vba]
Код
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & ".xlsx", FileFormat:=xlOpenXMLWorkbook
[/vba]
сохраняет в нужном формате ".xlsx", но на рабочем столе, а хочется чтобы сохранял с подменой, т.е. вместо существующего.

Автор - Yar4i
Дата добавления - 16.03.2017 в 16:20
_Boroda_ Дата: Четверг, 16.03.2017, 16:24 | Сообщение № 13
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вы файл с каким именем сохраняете?
Вот так нужно
[vba]
Код
ActiveWorkbook.Path & "\ИМЯ_ФАЙЛА.xlsx"
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВы файл с каким именем сохраняете?
Вот так нужно
[vba]
Код
ActiveWorkbook.Path & "\ИМЯ_ФАЙЛА.xlsx"
[/vba]

Автор - _Boroda_
Дата добавления - 16.03.2017 в 16:24
Yar4i Дата: Четверг, 16.03.2017, 16:32 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
с каким именем

с уже существующим (прежним, т.е. без измиенений). И в то же место, папку
И чтоб не было двух одинаковых имен с разными расширениями (задвоения дабы избежать).
Открываю любой "донорский" файл, запускаю макрос, где в конце макроса прописан код пересохранения в .xlsx вне зависимости какое сейчас у него расширение.


Сообщение отредактировал Yar4i - Четверг, 16.03.2017, 16:37
 
Ответить
Сообщение
с каким именем

с уже существующим (прежним, т.е. без измиенений). И в то же место, папку
И чтоб не было двух одинаковых имен с разными расширениями (задвоения дабы избежать).
Открываю любой "донорский" файл, запускаю макрос, где в конце макроса прописан код пересохранения в .xlsx вне зависимости какое сейчас у него расширение.

Автор - Yar4i
Дата добавления - 16.03.2017 в 16:32
Manyasha Дата: Четверг, 16.03.2017, 16:46 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Yar4i, ActiveWorkbook.Path - возращает путь (без имени),
[vba]
Код
ActiveWorkbook.Path & ".xlsx"
[/vba]
эта строка не содержит имени активной книги.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеYar4i, ActiveWorkbook.Path - возращает путь (без имени),
[vba]
Код
ActiveWorkbook.Path & ".xlsx"
[/vba]
эта строка не содержит имени активной книги.

Автор - Manyasha
Дата добавления - 16.03.2017 в 16:46
Yar4i Дата: Четверг, 16.03.2017, 17:02 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Нашёл многоходовочку, но не идёт она:
[vba]
Код
On Error Resume Next: Err.Clear
    ' макрос работает только в Excel 2007 (и более новых версиях)
    If Val(Application.Version) < 12 Then Exit Sub
    ' получаем полный путь к текущему файлу Excel
   oldName$ = ActiveWorkbook.FullName
    ' выход, если файл уже в нужном формате (XLSX)
   If UCase$(oldName$) Like "*.XLSX" Then Exit Sub
    ' формируем новое имя файла (меняем расширение)
   newName$ = Left(oldName$, InStrRev(oldName$, ".")) & "xlsx"
    ' сохраняем файл под новым именем в формате XLSX
   ActiveWorkbook.SaveAs newName$, xlExcel12
    ' удаляем прежний файл (в старом формате)
   If Err = 0 Then Kill oldName$
[/vba]


Сообщение отредактировал Yar4i - Четверг, 16.03.2017, 17:02
 
Ответить
СообщениеНашёл многоходовочку, но не идёт она:
[vba]
Код
On Error Resume Next: Err.Clear
    ' макрос работает только в Excel 2007 (и более новых версиях)
    If Val(Application.Version) < 12 Then Exit Sub
    ' получаем полный путь к текущему файлу Excel
   oldName$ = ActiveWorkbook.FullName
    ' выход, если файл уже в нужном формате (XLSX)
   If UCase$(oldName$) Like "*.XLSX" Then Exit Sub
    ' формируем новое имя файла (меняем расширение)
   newName$ = Left(oldName$, InStrRev(oldName$, ".")) & "xlsx"
    ' сохраняем файл под новым именем в формате XLSX
   ActiveWorkbook.SaveAs newName$, xlExcel12
    ' удаляем прежний файл (в старом формате)
   If Err = 0 Then Kill oldName$
[/vba]

Автор - Yar4i
Дата добавления - 16.03.2017 в 17:02
_Boroda_ Дата: Четверг, 16.03.2017, 17:07 | Сообщение № 17
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Yar4i, Даже если Вы откроете файл xls и пересохраните его в xlsx, то все равно в этот файл Вы не всунете другой лист из файла xlsx - ругаться будет. Чтобы все получилось, Вам нужно пересохранить файл (это правильно Вы делаете), закрыть его и открыть заново
А по поводу
с уже существующим (прежним, т.е. без измиенений). И в то же место, папку

посмотрите в моем посте выше я привел пример кода
А вообще Вам примерно вот такой код нужен
[vba]
Код
Sub tttt()
    With ActiveWorkbook
        fn_ = .Name
        If fn_ = ThisWorkbook.Name Then Exit Sub
        If LCase(Right(fn_, 4)) = ".xls" Then
            fn1_ = Left(fn_, Len(fn_) - 4)
            fp_ = .Path & Application.PathSeparator & fn1_ & ".xlsx"
            Application.DisplayAlerts = 0
            .SaveAs Filename:=fp_, FileFormat:=xlOpenXMLWorkbook
            Application.DisplayAlerts = 1
            .Close
            Workbooks.Open (fp_)
        End If
    End With
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеYar4i, Даже если Вы откроете файл xls и пересохраните его в xlsx, то все равно в этот файл Вы не всунете другой лист из файла xlsx - ругаться будет. Чтобы все получилось, Вам нужно пересохранить файл (это правильно Вы делаете), закрыть его и открыть заново
А по поводу
с уже существующим (прежним, т.е. без измиенений). И в то же место, папку

посмотрите в моем посте выше я привел пример кода
А вообще Вам примерно вот такой код нужен
[vba]
Код
Sub tttt()
    With ActiveWorkbook
        fn_ = .Name
        If fn_ = ThisWorkbook.Name Then Exit Sub
        If LCase(Right(fn_, 4)) = ".xls" Then
            fn1_ = Left(fn_, Len(fn_) - 4)
            fp_ = .Path & Application.PathSeparator & fn1_ & ".xlsx"
            Application.DisplayAlerts = 0
            .SaveAs Filename:=fp_, FileFormat:=xlOpenXMLWorkbook
            Application.DisplayAlerts = 1
            .Close
            Workbooks.Open (fp_)
        End If
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 16.03.2017 в 17:07
Yar4i Дата: Четверг, 16.03.2017, 17:11 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
а вообще Вам примерно вот такой код нужен

Спасибо
 
Ответить
Сообщение
а вообще Вам примерно вот такой код нужен

Спасибо

Автор - Yar4i
Дата добавления - 16.03.2017 в 17:11
leonrom Дата: Понедельник, 22.01.2018, 22:18 | Сообщение № 19
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Книги должны иметь одинаковое значение параметра [workbook].FileFormat. А уж добиться этого можно по-разному...


Леон
 
Ответить
СообщениеКниги должны иметь одинаковое значение параметра [workbook].FileFormat. А уж добиться этого можно по-разному...

Автор - leonrom
Дата добавления - 22.01.2018 в 22:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » в открытую книгу вставить активный/открытый лист др. книги (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!