Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Переместить лист в другую книгу


Автор: Aline 16.3.2007, 11:19
Всем привет!

Первый раз пишу макрос для Excel. Суть в том что по нажатию кнопки у меня добавляется лист, на нем формируется таблица, а в конце хотелось бы результат этой работы перенести в другую книгу, на новый лист.
В редакторе написала:
    Sheets(inZ).Select
    Sheets(inZ).Move
    Application.WindowState = xlMinimized

Всё замечательно работает, лист перемещается в новую книгу, название которой формирует автоматически Excel (напр, Книга2.xls)

Проблема в том, что хотелось бы всё-таки давать пользоватлю выбор, куда этот лист перемещать, пусть бы появлялось окно сохранения, в котором можно было бы выбрать книгу в которую добавить лист, но вот как это сделать?

Добавлено @ 11:27 
Устроил бы даже такой диалог, как пояляется после выбора команды "Переместить/скопировать лист..." из меню Правка smile

Автор: Kirill89 16.3.2007, 18:58
Я могу только предположить, так-как неособо знаком с vba, возможно у move указать параметр, или moveto

Автор: Naghual 16.3.2007, 19:29
Стандартных методов для этого нет. Нужно мутит самим.

Автор: Akina 16.3.2007, 19:46
[code=vb]
Sub КопированиеЛистаВНужнуюКнигу()
    Sheets("ИмяКопируемогоЛистаЛиста").Copy After:=Workbooks("ИмяКнигиВКоторуюКопировать.xls").Sheets("ЛистПослеКоторогоВставить")
End Sub

Автор: Aline 19.3.2007, 10:03
Я попробовала сделать так:

Код

OpenFileName = Application.GetOpenFilename(FileFilter:="Рабочие книги  (*.xls),*.xls")
    
Workbooks.Open Filename:=OpenFileName
        
Sheets(inZ).Move After:=Workbooks(OpenFileName).Sheets(1)



но на строке
Код

Sheets(inZ).Move After:=Workbooks(OpenFileName).Sheets(1)


появляется ошибка : Subscript out of range

Автор: Akina 19.3.2007, 10:50
Цитата(Aline @  19.3.2007,  11:03 Найти цитируемый пост)
появляется ошибка : Subscript out of range 

На что ругается - на коллекцию книг или на массив листов?

Автор: Aline 19.3.2007, 10:51
похоже, на массив листов

Добавлено @ 10:53 
хотя и на это тоже Workbooks(OpenFileName):  в окне Watches напротив этого значения написано Subscript out of range 

Автор: Akina 19.3.2007, 11:26
А книга, в которую копируется лист, открыта??? 

Автор: Aline 19.3.2007, 11:30
Книга открыта, но не активна. Когда пытаюсь сделать её активной, тоже ругается

Автор: Akina 19.3.2007, 11:36
Цитата(Aline @  19.3.2007,  12:30 Найти цитируемый пост)
Когда пытаюсь сделать её активной, тоже ругается 

Вот эту проблему и лечите. Ноги растут именно оттуда.

Автор: Aline 19.3.2007, 12:06
если бы ещё знать как лечить, потому как с макросами и Visual Basic'ом я впервые столкнулась на прошлой неделе smile

Автор: Naghual 19.3.2007, 12:28
Привожу код модуля книги, в которой формируется Лист:
Код

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


Автор: Aline 19.3.2007, 12:40
Naghual, спасибо, сейчас попробую

Автор: Aline 19.3.2007, 14:32
Naghual, всё замечательно работает, спасибо огромное smile

Автор: Naghual 19.3.2007, 14:43
Всегда пожалуйста.
Можно еще извернутся и нарисовать диалог выбора Листа, после которого вставлять. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)