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

Вход

Регистрация

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

 

= Мир MS Excel/как очищать события листа - Мир MS Excel

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

Excel 2010
К примеру есть обработчик[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Call ttt
End Sub
[/vba]
мне нужно очистить его макросом для определенного листа или для всех.
чтобы для этого события ничего не срабатывало.


Сообщение отредактировал skais - Понедельник, 19.06.2017, 14:05
 
Ответить
СообщениеК примеру есть обработчик[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Call ttt
End Sub
[/vba]
мне нужно очистить его макросом для определенного листа или для всех.
чтобы для этого события ничего не срабатывало.

Автор - skais
Дата добавления - 19.06.2017 в 14:04
Manyasha Дата: Понедельник, 19.06.2017, 14:05 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
skais, а просто отключение событий не подойдет?
[vba]
Код
Application.enableEvents = false
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеskais, а просто отключение событий не подойдет?
[vba]
Код
Application.enableEvents = false
[/vba]

Автор - Manyasha
Дата добавления - 19.06.2017 в 14:05
skais Дата: Понедельник, 19.06.2017, 14:08 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
Знаю про этот вариант, но в идеале очистить, потому как листы копируются из других книг а макросы нет и получается конфуз. Потому я копирую и потом удаляю все ненужное и нерабочее.
 
Ответить
СообщениеЗнаю про этот вариант, но в идеале очистить, потому как листы копируются из других книг а макросы нет и получается конфуз. Потому я копирую и потом удаляю все ненужное и нерабочее.

Автор - skais
Дата добавления - 19.06.2017 в 14:08
Pelena Дата: Понедельник, 19.06.2017, 14:32 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19184
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Не уверена, что правильно поняла вопрос, но посмотрите здесь


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНе уверена, что правильно поняла вопрос, но посмотрите здесь

Автор - Pelena
Дата добавления - 19.06.2017 в 14:32
skais Дата: Понедельник, 19.06.2017, 15:01 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
Pelena, Все верно, получилось [vba]
Код
Dim oVBComponent As Object, lCountLines As Long
        Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Sheet3")
        With oVBComponent
            lCountLines = .CodeModule.CountOfLines
            .CodeModule.DeleteLines 1, lCountLines
        End With
        Set oVBComponent = Nothing
[/vba]
Однако, теперь не знаю как предусмотреть правильный ввод "Sheet3" или "Лист3" взависимости от локали?
 
Ответить
СообщениеPelena, Все верно, получилось [vba]
Код
Dim oVBComponent As Object, lCountLines As Long
        Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Sheet3")
        With oVBComponent
            lCountLines = .CodeModule.CountOfLines
            .CodeModule.DeleteLines 1, lCountLines
        End With
        Set oVBComponent = Nothing
[/vba]
Однако, теперь не знаю как предусмотреть правильный ввод "Sheet3" или "Лист3" взависимости от локали?

Автор - skais
Дата добавления - 19.06.2017 в 15:01
Manyasha Дата: Понедельник, 19.06.2017, 15:22 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Попробуйте так:
Макрос удаляет событие Worksheet_Change со всех листов активной книги
[vba]
Код
Sub sheetsCodeModuleClear()
    Dim oVBComponent As Object, flag As Boolean, startL&, endL&
    flag = False
    'Проверяем, защищен проект или нет
    If ActiveWorkbook.VBProject.Protection = 1 Then
        MsgBox "VBProject выбранной книги защищён." & vbCrLf & _
             "     Компоненты не будут удалены.", vbExclamation, "Отмена выполнения"
        Exit Sub
    End If
    
    On Error Resume Next
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            If .Type = 100 Then
                startL = 0: endL = 0
                flag = False
                For i = 1 To .CodeModule.CountOfLines
                    If .CodeModule.Lines(i, 1) Like "*Worksheet_Change*" Then
                        startL = i
                        flag = True
                    End If
                    If flag And .CodeModule.Lines(i, 1) = "End Sub" Then
                        endL = i
                        Exit For
                    End If
                Next i
                .CodeModule.DeleteLines startL, endL - startL + 1
            End If
        End With
    Next oVBComponent
    Set oVBComponent = Nothing
End Sub
[/vba]

Или даже так:
[vba]
Код
Function sheetCodeModuleClear(shName As String, eventName As String)
    Dim oVBComponent As Object, flag As Boolean, startL&, endL&
    flag = False
    'Проверяем, защищен проект или нет
    If ActiveWorkbook.VBProject.Protection = 1 Then
        MsgBox "VBProject выбранной книги защищён." & vbCrLf & _
             "     Компоненты не будут удалены.", vbExclamation, "Отмена выполнения"
        Exit Function
    End If
    
    On Error Resume Next
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            If .Type = 100 Then
                If .Name = ActiveWorkbook.Sheets(shName).CodeName Then
                    startL = 0: endL = 0
                    flag = False
                    For i = 1 To .CodeModule.CountOfLines
                        If .CodeModule.Lines(i, 1) Like "*" & eventName & "*" Then
                            startL = i
                            flag = True
                        End If
                        If flag And .CodeModule.Lines(i, 1) = "End Sub" Then
                            endL = i
                            Exit For
                        End If
                    Next i
                    .CodeModule.DeleteLines startL, endL - startL + 1
                    Exit Function
                End If
            End If
        End With
    Next oVBComponent
    Set oVBComponent = Nothing
End Function
[/vba][vba]
Код
Sub test()
sheetCodeModuleClear "Лист1", "Worksheet_Change"
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеПопробуйте так:
Макрос удаляет событие Worksheet_Change со всех листов активной книги
[vba]
Код
Sub sheetsCodeModuleClear()
    Dim oVBComponent As Object, flag As Boolean, startL&, endL&
    flag = False
    'Проверяем, защищен проект или нет
    If ActiveWorkbook.VBProject.Protection = 1 Then
        MsgBox "VBProject выбранной книги защищён." & vbCrLf & _
             "     Компоненты не будут удалены.", vbExclamation, "Отмена выполнения"
        Exit Sub
    End If
    
    On Error Resume Next
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            If .Type = 100 Then
                startL = 0: endL = 0
                flag = False
                For i = 1 To .CodeModule.CountOfLines
                    If .CodeModule.Lines(i, 1) Like "*Worksheet_Change*" Then
                        startL = i
                        flag = True
                    End If
                    If flag And .CodeModule.Lines(i, 1) = "End Sub" Then
                        endL = i
                        Exit For
                    End If
                Next i
                .CodeModule.DeleteLines startL, endL - startL + 1
            End If
        End With
    Next oVBComponent
    Set oVBComponent = Nothing
End Sub
[/vba]

Или даже так:
[vba]
Код
Function sheetCodeModuleClear(shName As String, eventName As String)
    Dim oVBComponent As Object, flag As Boolean, startL&, endL&
    flag = False
    'Проверяем, защищен проект или нет
    If ActiveWorkbook.VBProject.Protection = 1 Then
        MsgBox "VBProject выбранной книги защищён." & vbCrLf & _
             "     Компоненты не будут удалены.", vbExclamation, "Отмена выполнения"
        Exit Function
    End If
    
    On Error Resume Next
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            If .Type = 100 Then
                If .Name = ActiveWorkbook.Sheets(shName).CodeName Then
                    startL = 0: endL = 0
                    flag = False
                    For i = 1 To .CodeModule.CountOfLines
                        If .CodeModule.Lines(i, 1) Like "*" & eventName & "*" Then
                            startL = i
                            flag = True
                        End If
                        If flag And .CodeModule.Lines(i, 1) = "End Sub" Then
                            endL = i
                            Exit For
                        End If
                    Next i
                    .CodeModule.DeleteLines startL, endL - startL + 1
                    Exit Function
                End If
            End If
        End With
    Next oVBComponent
    Set oVBComponent = Nothing
End Function
[/vba][vba]
Код
Sub test()
sheetCodeModuleClear "Лист1", "Worksheet_Change"
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 19.06.2017 в 15:22
skais Дата: Понедельник, 19.06.2017, 15:43 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
Manyasha, Спасибо и Вам, меня как бы устраивает вариант из #5. Вы перебираете все компоненты (все листы), а как удалить с определенного листа
Цитата
Однако, теперь не знаю как предусмотреть правильный ввод "Sheet3" или "Лист3" взависимости от локали?
 
Ответить
СообщениеManyasha, Спасибо и Вам, меня как бы устраивает вариант из #5. Вы перебираете все компоненты (все листы), а как удалить с определенного листа
Цитата
Однако, теперь не знаю как предусмотреть правильный ввод "Sheet3" или "Лист3" взависимости от локали?

Автор - skais
Дата добавления - 19.06.2017 в 15:43
Manyasha Дата: Понедельник, 19.06.2017, 15:52 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
skais, 2-й вариант смотрели?
[vba]
Код
Function sheetCodeModuleClear(shName As String, eventName As String)
[/vba]
shName - Имя листа (НЕ кодовое, т.е. то, которое Вы ведите на ярлычке листа в книге)

как предусмотреть правильный ввод "Sheet3" или "Лист3" взависимости от локали?

А Вы уверены, что это будет всегда лист с 3-й на конце?
[vba]
Код
Sub ttt()
    Dim oVBComponent As Object, lCountLines As Long
    On Error Resume Next
    Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Sheet3")
    If Err <> 0 Then
        Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Лист3")
    End If
    On Error GoTo 0
    
    With oVBComponent
        lCountLines = .CodeModule.CountOfLines
        .CodeModule.DeleteLines 1, lCountLines
    End With
    Set oVBComponent = Nothing
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеskais, 2-й вариант смотрели?
[vba]
Код
Function sheetCodeModuleClear(shName As String, eventName As String)
[/vba]
shName - Имя листа (НЕ кодовое, т.е. то, которое Вы ведите на ярлычке листа в книге)

как предусмотреть правильный ввод "Sheet3" или "Лист3" взависимости от локали?

А Вы уверены, что это будет всегда лист с 3-й на конце?
[vba]
Код
Sub ttt()
    Dim oVBComponent As Object, lCountLines As Long
    On Error Resume Next
    Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Sheet3")
    If Err <> 0 Then
        Set oVBComponent = ActiveWorkbook.VBProject.VBComponents("Лист3")
    End If
    On Error GoTo 0
    
    With oVBComponent
        lCountLines = .CodeModule.CountOfLines
        .CodeModule.DeleteLines 1, lCountLines
    End With
    Set oVBComponent = Nothing
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 19.06.2017 в 15:52
Udik Дата: Понедельник, 19.06.2017, 15:57 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Ну получите кодовое имя своего листа, определите что там - Лист или Sheet и т.д
[vba]
Код

str1=worksheets(3).codename
if str1 like "Sheet*" then
     '' имя с Sheet
else
     '' имя без Sheet
end if
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНу получите кодовое имя своего листа, определите что там - Лист или Sheet и т.д
[vba]
Код

str1=worksheets(3).codename
if str1 like "Sheet*" then
     '' имя с Sheet
else
     '' имя без Sheet
end if
[/vba]

Автор - Udik
Дата добавления - 19.06.2017 в 15:57
AndreTM Дата: Понедельник, 19.06.2017, 16:18 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Можно попроще. Вставляем в код функции, в начало после Dim:
[vba]
Код
    On Error Resume Next
    Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(shSheets)
    If Err <> 0 Then
        Exit Function
    End If
    On Error GoTo 0
[/vba]
И затем просто вызываем варианты:
[vba]
Код
Sub test()
    sheetCodeModuleClear "Лист3", "Worksheet_Change"
    sheetCodeModuleClear "Sheets3", "Worksheet_Change"
    ' для всех листов в книге
    For Each sh In ActiveWorkbook.Sheets
        sheetCodeModuleClear sh.Name, "Worksheet_Change"
    Next
End Sub
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеМожно попроще. Вставляем в код функции, в начало после Dim:
[vba]
Код
    On Error Resume Next
    Set oVBComponent = ActiveWorkbook.VBProject.VBComponents(shSheets)
    If Err <> 0 Then
        Exit Function
    End If
    On Error GoTo 0
[/vba]
И затем просто вызываем варианты:
[vba]
Код
Sub test()
    sheetCodeModuleClear "Лист3", "Worksheet_Change"
    sheetCodeModuleClear "Sheets3", "Worksheet_Change"
    ' для всех листов в книге
    For Each sh In ActiveWorkbook.Sheets
        sheetCodeModuleClear sh.Name, "Worksheet_Change"
    Next
End Sub
[/vba]

Автор - AndreTM
Дата добавления - 19.06.2017 в 16:18
RAN Дата: Понедельник, 19.06.2017, 18:46 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Никак не пойму, зачем код удалять?
мне нужно очистить его макросом для определенного листа или для всех.
чтобы для этого события ничего не срабатывало.

Для этого существует процедура
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНикак не пойму, зачем код удалять?
мне нужно очистить его макросом для определенного листа или для всех.
чтобы для этого события ничего не срабатывало.

Для этого существует процедура
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub
[/vba]

Автор - RAN
Дата добавления - 19.06.2017 в 18:46
skais Дата: Вторник, 20.06.2017, 08:32 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
RAN я уже объяснял в сообщении #3. Дело в том, что нужно скопировать информацию без всякого функционала в другую книгу и только определенный лист. А то вызов макроса срабатывает а мароса то нет? да и не нужен.
 
Ответить
СообщениеRAN я уже объяснял в сообщении #3. Дело в том, что нужно скопировать информацию без всякого функционала в другую книгу и только определенный лист. А то вызов макроса срабатывает а мароса то нет? да и не нужен.

Автор - skais
Дата добавления - 20.06.2017 в 08:32
AndreTM Дата: Вторник, 20.06.2017, 10:33 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А все это проистекает из желания "скопировать лист одной строчкой" :)
Вы же через ActiveSheet.SaveAs получаете "другую книгу"?

А если просто создать чистую книгу (или открыть нужную,куда вставляем), скопировать в нее только данные с листа (если надо, предварительно создав чистый лист), и потом сохранить ту книгу (под нужным именем, если надо)? Вот тогда точно не будет в этой другой книге никаких лишних данных и кода, и зачищать ничего не придется...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Вторник, 20.06.2017, 10:34
 
Ответить
СообщениеА все это проистекает из желания "скопировать лист одной строчкой" :)
Вы же через ActiveSheet.SaveAs получаете "другую книгу"?

А если просто создать чистую книгу (или открыть нужную,куда вставляем), скопировать в нее только данные с листа (если надо, предварительно создав чистый лист), и потом сохранить ту книгу (под нужным именем, если надо)? Вот тогда точно не будет в этой другой книге никаких лишних данных и кода, и зачищать ничего не придется...

Автор - AndreTM
Дата добавления - 20.06.2017 в 10:33
skais Дата: Вторник, 20.06.2017, 14:06 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
AndreTM мне нужно сохранить значения, формат, цвета и размеры ячеек и не нужно сохранять макросы, выпадающие списки и прочие элементы, условное форматирование, чтобы не было потом ссылок на первоисточник (чтобы потом не глючило все из-за отсутствия файлов для обновления, отсутствия макросов да и УФ не будет работать так как завязано на другие листы, которые я не копирую).
Если научите как это делать, буду премного благодарен!
 
Ответить
СообщениеAndreTM мне нужно сохранить значения, формат, цвета и размеры ячеек и не нужно сохранять макросы, выпадающие списки и прочие элементы, условное форматирование, чтобы не было потом ссылок на первоисточник (чтобы потом не глючило все из-за отсутствия файлов для обновления, отсутствия макросов да и УФ не будет работать так как завязано на другие листы, которые я не копирую).
Если научите как это делать, буду премного благодарен!

Автор - skais
Дата добавления - 20.06.2017 в 14:06
AndreTM Дата: Вторник, 20.06.2017, 16:12 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Так я же примерно написал:
- создаем новую книгу, записываем ссылку на чистый лист в ней в объектную переменную
- в старой книге выделяем нужный диапазон с данными, исполняем .Copy в буфер
- в новой книге, на листе (используя переменную - ссылку на него) указываем ячейку, куда вставлять (а лучше весь диапазон нужный), и делаем .PasteSpecial(xlPasteValues) и тут же сразу же .PasteSpecial(xlPasteFormats)
- сохраняем и закрываем новую книгу
- сбрасываем выделение (оставшееся от .Copy) в рабочем листе, откуда данные брали


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеТак я же примерно написал:
- создаем новую книгу, записываем ссылку на чистый лист в ней в объектную переменную
- в старой книге выделяем нужный диапазон с данными, исполняем .Copy в буфер
- в новой книге, на листе (используя переменную - ссылку на него) указываем ячейку, куда вставлять (а лучше весь диапазон нужный), и делаем .PasteSpecial(xlPasteValues) и тут же сразу же .PasteSpecial(xlPasteFormats)
- сохраняем и закрываем новую книгу
- сбрасываем выделение (оставшееся от .Copy) в рабочем листе, откуда данные брали

Автор - AndreTM
Дата добавления - 20.06.2017 в 16:12
skais Дата: Вторник, 20.06.2017, 17:54 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
AndreTM, Ваш вариант неплох.
AndreTM мне нужно сохранить значения, формат, цвета и размеры ячеек и не нужно сохранять макросы, выпадающие списки и прочие элементы, условное форматирование, чтобы не было потом ссылок на первоисточник

Однако происходит копирование УФ и ссылок. Шило на мыло. Количество операций в обоих вариантах сравнимо, все равно приходится перекрашивать макросом ячейки, удалять УФ, у меня еще макрос удалить в событии, а у Вас вместо копирования листа в новую книгу, создавать новый лист, копировать со старого и вставлять в новый. Но все равно спасибо за вариант.


Сообщение отредактировал skais - Вторник, 20.06.2017, 18:01
 
Ответить
СообщениеAndreTM, Ваш вариант неплох.
AndreTM мне нужно сохранить значения, формат, цвета и размеры ячеек и не нужно сохранять макросы, выпадающие списки и прочие элементы, условное форматирование, чтобы не было потом ссылок на первоисточник

Однако происходит копирование УФ и ссылок. Шило на мыло. Количество операций в обоих вариантах сравнимо, все равно приходится перекрашивать макросом ячейки, удалять УФ, у меня еще макрос удалить в событии, а у Вас вместо копирования листа в новую книгу, создавать новый лист, копировать со старого и вставлять в новый. Но все равно спасибо за вариант.

Автор - skais
Дата добавления - 20.06.2017 в 17:54
AndreTM Дата: Вторник, 20.06.2017, 22:30 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
происходит копирование УФ и ссылок.
Да не может быть :) xlPasteValues копирует вам ссылки и УФ??
Впрочем, без примера ВАШЕГО кода копирования - сложно сказать.

у Вас вместо копирования листа в новую книгу, создавать новый лист, копировать со старого и вставлять в новый.
На самом деле, всё очень даже не так. В вашем варианте (ActiveSheet.Copy) - это неявное и создание новой книги, и копирование листа, и копирование ивентов листа, и копирование форматов и Уф и прочего... В моём же (создать новую/открыть существующую книгу - выбрать/создать пустой лист - скопировать ТОЛЬКО значения, причем ТОЛЬКО необходимого диапазона... а можно и вообще обойтись без копипаста через буфер, но это же тема отдельного разговора :)

На форуме поискать по словам "сохранение листа в другую/отдельную книгу" не пробовали?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
происходит копирование УФ и ссылок.
Да не может быть :) xlPasteValues копирует вам ссылки и УФ??
Впрочем, без примера ВАШЕГО кода копирования - сложно сказать.

у Вас вместо копирования листа в новую книгу, создавать новый лист, копировать со старого и вставлять в новый.
На самом деле, всё очень даже не так. В вашем варианте (ActiveSheet.Copy) - это неявное и создание новой книги, и копирование листа, и копирование ивентов листа, и копирование форматов и Уф и прочего... В моём же (создать новую/открыть существующую книгу - выбрать/создать пустой лист - скопировать ТОЛЬКО значения, причем ТОЛЬКО необходимого диапазона... а можно и вообще обойтись без копипаста через буфер, но это же тема отдельного разговора :)

На форуме поискать по словам "сохранение листа в другую/отдельную книгу" не пробовали?

Автор - AndreTM
Дата добавления - 20.06.2017 в 22:30
skais Дата: Вторник, 20.06.2017, 22:40 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
AndreTM Вот вам пример.
Ваши слова:
Цитата
и делаем .PasteSpecial(xlPasteValues) и тут же сразу же .PasteSpecial(xlPasteFormats)

УФ копируется при .PasteSpecial(xlPasteFormats)
К сообщению приложен файл: 6521821.xlsm (13.7 Kb)


Сообщение отредактировал skais - Вторник, 20.06.2017, 22:43
 
Ответить
СообщениеAndreTM Вот вам пример.
Ваши слова:
Цитата
и делаем .PasteSpecial(xlPasteValues) и тут же сразу же .PasteSpecial(xlPasteFormats)

УФ копируется при .PasteSpecial(xlPasteFormats)

Автор - skais
Дата добавления - 20.06.2017 в 22:40
AndreTM Дата: Среда, 21.06.2017, 00:18 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Но ведь можно же поэкпериментировать?
Дело в том,что если есть УФ, и некоторые форматы наложены именно с помощью УФ - то как быть? С одной стороны
мне нужно сохранить значения, формат, цвета и размеры ячеек
с другой
не нужно сохранять макросы, выпадающие списки и прочие элементы, условное форматирование
??
Впрочем, можно после копирования, опять же, удалить именно УФ с этого нового листа... всего одна лишняя строка кода...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНо ведь можно же поэкпериментировать?
Дело в том,что если есть УФ, и некоторые форматы наложены именно с помощью УФ - то как быть? С одной стороны
мне нужно сохранить значения, формат, цвета и размеры ячеек
с другой
не нужно сохранять макросы, выпадающие списки и прочие элементы, условное форматирование
??
Впрочем, можно после копирования, опять же, удалить именно УФ с этого нового листа... всего одна лишняя строка кода...

Автор - AndreTM
Дата добавления - 21.06.2017 в 00:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » как очищать события листа (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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