Страницы: 1
RSS
Перенос листов в новую книгу, если помечен checkbox
 
Доброго времени суток всем.

Подскажите пожалуйста в вопросе.
На форме есть куча данных, каждая строка данных привязана к определенному листу. Результирующим элементом является checkbox. Если он помечен, то при сохранении данный лист должен будет переносится в новую книгу. Не могу создать условие данного переноса.
Код
If CheckBox1 = True Then
sheets("Анализ1").Copy
End If
If CheckBox2 = True Then
sheets("Анализ2").Copy
End If
If CheckBox3 = True Then
sheets("Анализ3").Copy
End If  

На любое первое условие равное true создается новая книга и туда переносится лист. А на втором уже выскакивает ошибка.
Как задать ссылку на созданный лист остальным.
Заранее спасибо за помощь.
 
Перенос - это Move!
А ошибка потому, что в активной книге нет таких листов!
 
Извиняюсь, неграмотно выразился. Именно Копирование, а не перенос.
Ну я сделал ссылку на активную рабочую книгу. Теперь каждый лист удовлетворяющий условию переносится в отдельную книгу. А условие для копирования их в одну книгу не получается.
Код
wb= ActiveWorkBook  
If CheckBox1 = True Then
wb.sheets("Анализ1").Copy
End If
If CheckBox2 = True Then
wb.sheets("Анализ2").Copy
End If
If CheckBox3 = True Then
wb.sheets("Анализ3").Copy
End If
 
Собирайте массив имён, и затем уже в финале все эти листы и копируйте.
Или так:
Код
    With CreateObject("Scripting.Dictionary"): .comparemode = 1

        If CheckBox1 = True Then
            .Item("Анализ1") = 0&
        End If
        If CheckBox2 = True Then
            .Item("Анализ2") = 0&
        End If
        If CheckBox3 = True Then
            .Item("Анализ3") = 0&
        End If

        Sheets(.keys).Copy
    End With
 
Изменено: Hugo - 19.05.2014 14:47:45
 
Ого. Hugo Спасибо огромнейшее.
Я пробовал реализовать подобное, так как массивы пока незнаю, через проверку условия и присвоения значения.
А в конце делал sheets(array(x,y,z......).copy. Где x,y,z...... это были имена листов, но выскакивала ошибка. И Даже сейчас пробовал делать проверку несколько условий( наличие true и наличие новой книги). А здесь просто и быстро.
У меня к вам просьба, не могли бы вы пояснить:
Код
CreateObject("Scripting.Dictionary"): .comparemode = 1
Это что, что то типа виртуальной библиотеки для временного хранения, верно?
И что означает ...=0&
Заранее спасибо.
 
Это словарь.
Туда заносится ключ (это будет имя листа - строка) и каждому ключу обязательно нужен Item - пусть будет 0 типа long, говорят это быстро обрабатывается. Но можно и просто "" поставить, не суть.
В итоге имеем словарь с именами нужных листов, что и используем.

P.S. забыл - .comparemode = 1 это сравнение значений в словаре без учёта регистра, в данном случае не нужно, просто у меня шаблон такой... Но и не помешает.

P.P.S. Вариант с коллекцией и массивом:

Код
    Dim col As New Collection, el, i&

    If CheckBox1 = True Then
        col.Add "Анализ1"
    End If
    If CheckBox2 = True Then
        col.Add "Анализ2"
    End If
    If CheckBox3 = True Then
        col.Add "Анализ3"
    End If

    ReDim arr(1 To col.Count)
    For Each el In col
        i = i + 1
        arr(i) = el
    Next
    Sheets(arr).Copy
 
Изменено: Hugo - 19.05.2014 14:11:28
 
Спасибо за подробное разьяснение.
А вот с массивом никак не пойму
Код
 ReDim arr(1 To col.Count)
    For Each el In col
     i = i + 1
     arr(i) = el
    Next
    Sheets(arr).Copy 
Откуда берем значение el.
Изменено: DSH - 19.05.2014 14:56:05
 
Не подскажите а как можно использовать полученный массив имен в качестве названия охраняемого файла.
Код
xp=activeworkbook.path 
'массив перебора имен
Set wb = ActiveWorkbook
wb.SaveAs Filename:=xp & "\" & "Отчеты" & "\" & " список листов " & ".xlsb"
Заранее спасибо
 
"Откуда берем значение el." - "Для каждого элемента коллекции"
Код
        Dim список_листов As String
    '....

    For Each el In col
        список_листов = список_листов & ", " & el
    Next
    список_листов = Mid(список_листов, 3)

    xp = ActiveWorkbook.Path
    'массив перебора имен
    Set wb = ActiveWorkbook
    wb.SaveAs Filename:=xp & "\" & "Отчеты" & "\" & " список_листов " & ".xlsb"

 
Hugo- спасибо большое за помощь
 
упс, кавычки у Вас не исправил, так нужно:

Код
wb.SaveAs Filename:=xp & "\Отчеты\" & список_листов & ".xlsb" 
Но ещё добавьте указание формата файла - из записанного рекордером возьмите.
Изменено: Hugo - 21.05.2014 13:08:01
 
Да, это я заметил когда вносил, немного сглупил с кавычками.
Спасибо за наставление.
Страницы: 1
Наверх