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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование листа в другую книгу при помощи кнопки - Мир MS Excel

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

Здравствуйте, всем! Уважаемые знатоки XL и макросов, подскажите, в чем ошибка: при попытке скопировать лист в другую книгу (макросом и при помощи кнопки) в коде возникает ошибка. Вот кусок кода

[vba]
Код
Sub Таблица()
'
Dim MySheet As String

MySheet = Format(Now, "yyyy/mm/dd hh-mm")

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = MySheet

'
Sheets(MySheet).Select
'
' мой код
'
' создание кнопки макрорекордером
'
'
Windows.Arrange ArrangeStyle:=xlTiled
Windows("МЕНЮ.xlsm").Activate
Sheets(MySheet).Select

' заменяю уникальные имена листов на имя переменной
' на эту строку жалуется
Sheets(MySheet).Move Before:=Workbooks("АРХИВ_МЕНЮ.xlsm").Sheets(2 _
)
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
[/vba]
 
Ответить
СообщениеЗдравствуйте, всем! Уважаемые знатоки XL и макросов, подскажите, в чем ошибка: при попытке скопировать лист в другую книгу (макросом и при помощи кнопки) в коде возникает ошибка. Вот кусок кода

[vba]
Код
Sub Таблица()
'
Dim MySheet As String

MySheet = Format(Now, "yyyy/mm/dd hh-mm")

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = MySheet

'
Sheets(MySheet).Select
'
' мой код
'
' создание кнопки макрорекордером
'
'
Windows.Arrange ArrangeStyle:=xlTiled
Windows("МЕНЮ.xlsm").Activate
Sheets(MySheet).Select

' заменяю уникальные имена листов на имя переменной
' на эту строку жалуется
Sheets(MySheet).Move Before:=Workbooks("АРХИВ_МЕНЮ.xlsm").Sheets(2 _
)
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
[/vba]

Автор - olegglebovich
Дата добавления - 19.01.2021 в 18:05
olegglebovich Дата: Вторник, 19.01.2021, 18:06 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Сорри, не знаю как на сайте выложить код...
[admin]в режиме редактирования поста надо выделить код и нажать кнопку # на панели инструментов. Исправила[/admin]


Сообщение отредактировал Pelena - Вторник, 19.01.2021, 22:40
 
Ответить
СообщениеСорри, не знаю как на сайте выложить код...
[admin]в режиме редактирования поста надо выделить код и нажать кнопку # на панели инструментов. Исправила[/admin]

Автор - olegglebovich
Дата добавления - 19.01.2021 в 18:06
Pelena Дата: Вторник, 19.01.2021, 22:39 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19162
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Книга АРХИВ_МЕНЮ.xlsm открыта?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеКнига АРХИВ_МЕНЮ.xlsm открыта?

Автор - Pelena
Дата добавления - 19.01.2021 в 22:39
olegglebovich Дата: Среда, 20.01.2021, 00:08 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Нет, книга закрыта. Но при создании макроса я её открываю, делаю копию и закрываю. Книги расположены в разных местах
 
Ответить
СообщениеНет, книга закрыта. Но при создании макроса я её открываю, делаю копию и закрываю. Книги расположены в разных местах

Автор - olegglebovich
Дата добавления - 20.01.2021 в 00:08
Pelena Дата: Среда, 20.01.2021, 09:31 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19162
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Книга, куда Вы вставляете лист должна быть открыта. В коде не видно строк, где открывается эта книга.

Вы не копируете лист, а перемещаете (.Move), поэтому если он единственный в книге МЕНЮ.xlsm, то он не может быть перемещён.
Для копирования нужно не .Move, а .Copy


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеКнига, куда Вы вставляете лист должна быть открыта. В коде не видно строк, где открывается эта книга.

Вы не копируете лист, а перемещаете (.Move), поэтому если он единственный в книге МЕНЮ.xlsm, то он не может быть перемещён.
Для копирования нужно не .Move, а .Copy

Автор - Pelena
Дата добавления - 20.01.2021 в 09:31
olegglebovich Дата: Четверг, 21.01.2021, 08:17 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Моя ошибка. Надо не копировать, а переместить. В книге еще останутся листы
 
Ответить
СообщениеМоя ошибка. Надо не копировать, а переместить. В книге еще останутся листы

Автор - olegglebovich
Дата добавления - 21.01.2021 в 08:17
olegglebovich Дата: Четверг, 21.01.2021, 08:53 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

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

[vba]
Код
Public Wb As Workbook
Sub Макрос1()
    Workbooks.Open Filename:="C:\Users\Oleg\АРХИВ_МЕНЮ.xlsm"
    Set Wb = ActiveWorkbook
    MsgBox Wb.Name
       
    Dim MySheet As String
    Sheets.Add After:=Sheets(Sheets.Count)
    
        Windows.Arrange ArrangeStyle:=xlTiled
    Windows("МЕНЮ.xlsm").Activate
    Sheets(MySheet).Select
    Sheets(MySheet).Move Before:=Workbooks("АРХИВ_МЕНЮ.xlsm").Sheets(4 _
        )
    Range("L38").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    Sheets("Январь").Select
End Sub
[/vba]
 
Ответить
СообщениеВот, что получилось. А как это заставить работать с любыми именами листов я не знаю. Подскажите, плиз!

[vba]
Код
Public Wb As Workbook
Sub Макрос1()
    Workbooks.Open Filename:="C:\Users\Oleg\АРХИВ_МЕНЮ.xlsm"
    Set Wb = ActiveWorkbook
    MsgBox Wb.Name
       
    Dim MySheet As String
    Sheets.Add After:=Sheets(Sheets.Count)
    
        Windows.Arrange ArrangeStyle:=xlTiled
    Windows("МЕНЮ.xlsm").Activate
    Sheets(MySheet).Select
    Sheets(MySheet).Move Before:=Workbooks("АРХИВ_МЕНЮ.xlsm").Sheets(4 _
        )
    Range("L38").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    Sheets("Январь").Select
End Sub
[/vba]

Автор - olegglebovich
Дата добавления - 21.01.2021 в 08:53
olegglebovich Дата: Четверг, 21.01.2021, 18:42 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Всем доброго времени суток! Нашел более менее подходящий для себя код, но в нем есть две беды- сохраняет каждый лист в отдельную книгу (а надо,чтоб в одну АРХИВ_МЕНЮ.xlsm) и дает ошибку. Подскажите, как это исправить.
[vba]
Код

Public Wb As Workbook
    Sub SaveSheetInFolderToFile()

    Workbooks.Open Filename:="C:\Users\Oleg\АРХИВ_МЕНЮ.xlsm"
    Set Wb = ActiveWorkbook
    MsgBox Wb.Name
    
    Dim bookconst As Workbook
    Set bookconst = Workbooks(ActiveWorkbook.Name)

    Application.ScreenUpdating = False

    ActiveSheet.Move 'дает ошибку: в книге должен быть хотя бы один видимый лист

    Dim sName, fAdres As Variant
    sName = ActiveSheet.Name
    fAdres = bookconst.Path  

    If Len(Dir(fAdres & "\" & bookconst, vbDirectory)) = 0 Then  
    MkDir fAdres & "\" & bookconst  

    End If  

    ActiveWorkbook.SaveAs Filename:=fAdres & "\" & bookconst & "\" & Format(Now, "yyyy/mm/dd hh-mm") & ".xlsx"
    Application.ScreenUpdating = True
    ActiveWorkbook.Close

    End Sub
[/vba]
 
Ответить
СообщениеВсем доброго времени суток! Нашел более менее подходящий для себя код, но в нем есть две беды- сохраняет каждый лист в отдельную книгу (а надо,чтоб в одну АРХИВ_МЕНЮ.xlsm) и дает ошибку. Подскажите, как это исправить.
[vba]
Код

Public Wb As Workbook
    Sub SaveSheetInFolderToFile()

    Workbooks.Open Filename:="C:\Users\Oleg\АРХИВ_МЕНЮ.xlsm"
    Set Wb = ActiveWorkbook
    MsgBox Wb.Name
    
    Dim bookconst As Workbook
    Set bookconst = Workbooks(ActiveWorkbook.Name)

    Application.ScreenUpdating = False

    ActiveSheet.Move 'дает ошибку: в книге должен быть хотя бы один видимый лист

    Dim sName, fAdres As Variant
    sName = ActiveSheet.Name
    fAdres = bookconst.Path  

    If Len(Dir(fAdres & "\" & bookconst, vbDirectory)) = 0 Then  
    MkDir fAdres & "\" & bookconst  

    End If  

    ActiveWorkbook.SaveAs Filename:=fAdres & "\" & bookconst & "\" & Format(Now, "yyyy/mm/dd hh-mm") & ".xlsx"
    Application.ScreenUpdating = True
    ActiveWorkbook.Close

    End Sub
[/vba]

Автор - olegglebovich
Дата добавления - 21.01.2021 в 18:42
olegglebovich Дата: Суббота, 23.01.2021, 23:54 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте. Нашел решение, код рабочий. Подскажите, как его изменить, что бы перемещенный лист сохранялся в заданной книге без запроса на выбор?
[vba]
Код

Option Explicit
Dim DestinationBook As Workbook
Public Sub КопированиеЛистаВНужнуюКнигу()
    Dim SourceSheet As Worksheet
    
    Set SourceSheet = ThisWorkbook.ActiveSheet
    If ВыбратьКнигуПолучатель = True Then
        SourceSheet.Copy After:=DestinationBook.Sheets("Лист1")
    End If
End Sub
Function ВыбратьКнигуПолучатель() As Boolean
    Dim OpenFileName As String
    
    On Error Resume Next
    OpenFileName = Application.GetOpenFilename(FileFilter:="Рабочие книги  (*.xls),*.xls")
    Set DestinationBook = Workbooks.Open(OpenFileName)
    If Err.Number > 0 Then
        ВыбратьКнигуПолучатель = False
    Else
        ВыбратьКнигуПолучатель = True
    End If
End Function
[/vba]
 
Ответить
СообщениеЗдравствуйте. Нашел решение, код рабочий. Подскажите, как его изменить, что бы перемещенный лист сохранялся в заданной книге без запроса на выбор?
[vba]
Код

Option Explicit
Dim DestinationBook As Workbook
Public Sub КопированиеЛистаВНужнуюКнигу()
    Dim SourceSheet As Worksheet
    
    Set SourceSheet = ThisWorkbook.ActiveSheet
    If ВыбратьКнигуПолучатель = True Then
        SourceSheet.Copy After:=DestinationBook.Sheets("Лист1")
    End If
End Sub
Function ВыбратьКнигуПолучатель() As Boolean
    Dim OpenFileName As String
    
    On Error Resume Next
    OpenFileName = Application.GetOpenFilename(FileFilter:="Рабочие книги  (*.xls),*.xls")
    Set DestinationBook = Workbooks.Open(OpenFileName)
    If Err.Number > 0 Then
        ВыбратьКнигуПолучатель = False
    Else
        ВыбратьКнигуПолучатель = True
    End If
End Function
[/vba]

Автор - olegglebovich
Дата добавления - 23.01.2021 в 23:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование листа в другую книгу при помощи кнопки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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