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

Вход

Регистрация

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

 

= Мир MS Excel/Можно ли создать новый лист с модулем - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Можно ли создать новый лист с модулем
superpsih Дата: Среда, 30.09.2015, 12:47 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день.
Можно ли создать новый лист так, чтобы его модуль был не пустой, а уже с определённым кодом?
 
Ответить
СообщениеДобрый день.
Можно ли создать новый лист так, чтобы его модуль был не пустой, а уже с определённым кодом?

Автор - superpsih
Дата добавления - 30.09.2015 в 12:47
miver Дата: Среда, 30.09.2015, 13:20 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
superpsih, Возможно. Смотри пример
К сообщению приложен файл: ShAdd.xlsm (14.4 Kb)
 
Ответить
Сообщениеsuperpsih, Возможно. Смотри пример

Автор - miver
Дата добавления - 30.09.2015 в 13:20
superpsih Дата: Среда, 30.09.2015, 13:28 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо! Работает!
 
Ответить
СообщениеСпасибо! Работает!

Автор - superpsih
Дата добавления - 30.09.2015 в 13:28
miver Дата: Среда, 30.09.2015, 14:27 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Для истории. Нашёл способ немного сократить код добавления
[vba]
Код
Sub SheetAdd()
     Sheets.Add After:=Sheets(Sheets.Count)
     Set CodeMod = ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
     S = _
     "Sub ABC()" & vbNewLine & _
     "    MsgBox ""Hello World"",vbOkOnly" & vbNewLine & _
     "End Sub" & vbNewLine
     CodeMod.AddFromString S
End Sub
[/vba]
 
Ответить
СообщениеДля истории. Нашёл способ немного сократить код добавления
[vba]
Код
Sub SheetAdd()
     Sheets.Add After:=Sheets(Sheets.Count)
     Set CodeMod = ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
     S = _
     "Sub ABC()" & vbNewLine & _
     "    MsgBox ""Hello World"",vbOkOnly" & vbNewLine & _
     "End Sub" & vbNewLine
     CodeMod.AddFromString S
End Sub
[/vba]

Автор - miver
Дата добавления - 30.09.2015 в 14:27
superpsih Дата: Среда, 30.09.2015, 16:43 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
А как удалить у активного листа содержимое его модуля? Написал макрос, который создаёт лист (если его нет) и заносит в его модуль определённый код. При повторном прогоне макроса, надо, чтобы если лист уже есть, этот модуль в него заносился в конце выполнения макроса, т.е. в начале модуль надо очистить. Не подскажете как?
 
Ответить
СообщениеА как удалить у активного листа содержимое его модуля? Написал макрос, который создаёт лист (если его нет) и заносит в его модуль определённый код. При повторном прогоне макроса, надо, чтобы если лист уже есть, этот модуль в него заносился в конце выполнения макроса, т.е. в начале модуль надо очистить. Не подскажете как?

Автор - superpsih
Дата добавления - 30.09.2015 в 16:43
KSV Дата: Четверг, 01.10.2015, 00:30 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код
Sub ClearCodeModule()
     Set CodeMod = ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
     CodeMod.DeleteLines 1, CodeMod.CountOfLines
End Sub
[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение[vba]
Код
Sub ClearCodeModule()
     Set CodeMod = ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
     CodeMod.DeleteLines 1, CodeMod.CountOfLines
End Sub
[/vba]

Автор - KSV
Дата добавления - 01.10.2015 в 00:30
superpsih Дата: Пятница, 02.10.2015, 15:53 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Написал макрос, который создаёт лист [vba]
Код
Sheets.Add After:=Sheets(Sheets.Count)
[/vba]
Потом с первого листа копирует на второй информацию в определённом порядке, преобразовывая её.
Потом, после того как второй лист заполнен (и он активирован), вставляю модуль в лист (делать это надо в самом конце кода, т.к. этот модуль отслеживает сделанные изменения) с помощью кода:
[vba]
Код
Sheets("Ëèñò2").Select
                 Set CodeMod = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
     s = _
     "Option Explicit" & vbNewLine & _
"Dim vValue" & vbNewLine & _
"Private Sub Worksheet_Change(ByVal Target As Range)" & vbNewLine & _
     "If Target.count > 1 Then Exit Sub" & vbNewLine & _
     "If Target <> vValue Then Target.Interior.Color = -4142" & vbNewLine & _
"End Sub" & vbNewLine & _
"Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbNewLine & _
     "If Target.count = 1 Then vValue = Target" & vbNewLine & _
"End Sub" & vbNewLine

     With CodeMod
         .InsertLines .CountOfLines + 1, s
     End With
[/vba]
Макрос при запуске выдаёт ошибку №9, останавливаясь на строке [vba]
Код
Set CodeMod = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
[/vba]
При этом, если после остановки макроса, удалить второй лист и запустить его заново, то он отрабатывает без ошибок. В чём может быть проблема? (макрос находится в другой книге, отличной от той, в которой добавляется лист с модулем).
 
Ответить
СообщениеНаписал макрос, который создаёт лист [vba]
Код
Sheets.Add After:=Sheets(Sheets.Count)
[/vba]
Потом с первого листа копирует на второй информацию в определённом порядке, преобразовывая её.
Потом, после того как второй лист заполнен (и он активирован), вставляю модуль в лист (делать это надо в самом конце кода, т.к. этот модуль отслеживает сделанные изменения) с помощью кода:
[vba]
Код
Sheets("Ëèñò2").Select
                 Set CodeMod = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
     s = _
     "Option Explicit" & vbNewLine & _
"Dim vValue" & vbNewLine & _
"Private Sub Worksheet_Change(ByVal Target As Range)" & vbNewLine & _
     "If Target.count > 1 Then Exit Sub" & vbNewLine & _
     "If Target <> vValue Then Target.Interior.Color = -4142" & vbNewLine & _
"End Sub" & vbNewLine & _
"Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbNewLine & _
     "If Target.count = 1 Then vValue = Target" & vbNewLine & _
"End Sub" & vbNewLine

     With CodeMod
         .InsertLines .CountOfLines + 1, s
     End With
[/vba]
Макрос при запуске выдаёт ошибку №9, останавливаясь на строке [vba]
Код
Set CodeMod = ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
[/vba]
При этом, если после остановки макроса, удалить второй лист и запустить его заново, то он отрабатывает без ошибок. В чём может быть проблема? (макрос находится в другой книге, отличной от той, в которой добавляется лист с модулем).

Автор - superpsih
Дата добавления - 02.10.2015 в 15:53
RAN Дата: Пятница, 02.10.2015, 17:33 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub copy_sh()
     Dim sh As Worksheet
     Application.EnableEvents = False
     ActiveSheet.Copy After:=Sheets(Sheets.Count)
     Set sh = ActiveSheet
     sh.Cells.Delete
     sh.Range("A1").Formula = "=2*2"
     MsgBox sh.Range("A1").Formula
     Application.EnableEvents = True
End Sub
[/vba]
и никаких
[vba]
Код
ThisWorkbook.VBProject.VBComponents
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub copy_sh()
     Dim sh As Worksheet
     Application.EnableEvents = False
     ActiveSheet.Copy After:=Sheets(Sheets.Count)
     Set sh = ActiveSheet
     sh.Cells.Delete
     sh.Range("A1").Formula = "=2*2"
     MsgBox sh.Range("A1").Formula
     Application.EnableEvents = True
End Sub
[/vba]
и никаких
[vba]
Код
ThisWorkbook.VBProject.VBComponents
[/vba]

Автор - RAN
Дата добавления - 02.10.2015 в 17:33
superpsih Дата: Пятница, 02.10.2015, 22:34 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
RAN, не совсем понял ваш код. Он вставляет формулу на новом листе, а мне нужно вставить модуль в новом листе.
 
Ответить
СообщениеRAN, не совсем понял ваш код. Он вставляет формулу на новом листе, а мне нужно вставить модуль в новом листе.

Автор - superpsih
Дата добавления - 02.10.2015 в 22:34
RAN Дата: Суббота, 03.10.2015, 09:37 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Может я и не прав, но, почему-то, мне кажется, что весь ваш код - попытка снять штаны через голову.
[vba]
Код
Sub copy_sh()
     Dim sh As Worksheet
     Application.EnableEvents = False ' отключаем обработку события
     ActiveSheet.Copy After:=Sheets(Sheets.Count) ' копируем лист вместе с кодом
     Set sh = ActiveSheet
     sh.Cells.Delete ' делаем лист девственно чистым
     sh.Range("A1").Formula = "=2*2" ' "Потом с первого листа копирует на второй информацию в определённом порядке, преобразовывая её."
     MsgBox sh.Range("A1").Formula ' "Потом с первого листа копирует на второй информацию в определённом порядке, преобразовывая её."
     Application.EnableEvents = True  ' включаем обработку события
End Sub
[/vba]
А если лист существует, все тоже самое, но без копирования листа.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМожет я и не прав, но, почему-то, мне кажется, что весь ваш код - попытка снять штаны через голову.
[vba]
Код
Sub copy_sh()
     Dim sh As Worksheet
     Application.EnableEvents = False ' отключаем обработку события
     ActiveSheet.Copy After:=Sheets(Sheets.Count) ' копируем лист вместе с кодом
     Set sh = ActiveSheet
     sh.Cells.Delete ' делаем лист девственно чистым
     sh.Range("A1").Formula = "=2*2" ' "Потом с первого листа копирует на второй информацию в определённом порядке, преобразовывая её."
     MsgBox sh.Range("A1").Formula ' "Потом с первого листа копирует на второй информацию в определённом порядке, преобразовывая её."
     Application.EnableEvents = True  ' включаем обработку события
End Sub
[/vba]
А если лист существует, все тоже самое, но без копирования листа.

Автор - RAN
Дата добавления - 03.10.2015 в 09:37
superpsih Дата: Суббота, 03.10.2015, 10:16 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо. Теперь идею я понял. Но не совсем подходит в моём случае, поскольку макрос в модуле листа должен появиться в нём после того, как лист заполнен - иначе, он тоже будет включаться во время заполнения листа, что не хорошо.
 
Ответить
СообщениеСпасибо. Теперь идею я понял. Но не совсем подходит в моём случае, поскольку макрос в модуле листа должен появиться в нём после того, как лист заполнен - иначе, он тоже будет включаться во время заполнения листа, что не хорошо.

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

2010
Для тех, кто в танке! Не будет!
[vba]
Код
Application.EnableEvents = False ' отключаем обработку события
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДля тех, кто в танке! Не будет!
[vba]
Код
Application.EnableEvents = False ' отключаем обработку события
[/vba]

Автор - RAN
Дата добавления - 03.10.2015 в 11:22
superpsih Дата: Суббота, 03.10.2015, 11:52 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо за терпеливое объяснение! Буду пробовать!
 
Ответить
СообщениеСпасибо за терпеливое объяснение! Буду пробовать!

Автор - superpsih
Дата добавления - 03.10.2015 в 11:52
superpsih Дата: Суббота, 03.10.2015, 12:37 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Начал делать. Поскольку макрос находится в отдельной книге, лист с модулем надо копировать в книгу, над которой производятся манипуляции.
Выдаёт ошибку на строке: [vba]
Код
Workbooks("new_macros.xlsm").Sheets("Лист2").Copy After:=Workbooks("temp.xlsm").Sheets(Sheets.count)
[/vba]
Причина - несоответствие числа строк и столбцов в книге с макросом и в книге temp (в книге с макросом строк 1048576, а в книге temp (она формируется сторонней программой) их 65536). Можно ли как-то изменить число строк и столбцов, чтобы размер листов был одинаковым?


Сообщение отредактировал superpsih - Суббота, 03.10.2015, 12:38
 
Ответить
СообщениеНачал делать. Поскольку макрос находится в отдельной книге, лист с модулем надо копировать в книгу, над которой производятся манипуляции.
Выдаёт ошибку на строке: [vba]
Код
Workbooks("new_macros.xlsm").Sheets("Лист2").Copy After:=Workbooks("temp.xlsm").Sheets(Sheets.count)
[/vba]
Причина - несоответствие числа строк и столбцов в книге с макросом и в книге temp (в книге с макросом строк 1048576, а в книге temp (она формируется сторонней программой) их 65536). Можно ли как-то изменить число строк и столбцов, чтобы размер листов был одинаковым?

Автор - superpsih
Дата добавления - 03.10.2015 в 12:37
Pelena Дата: Суббота, 03.10.2015, 12:54 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 19603
Репутация: 4660 ±
Замечаний: ±

Excel 365 & Mac Excel
Сохраните файл new_macros в формате .xls


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеСохраните файл new_macros в формате .xls

Автор - Pelena
Дата добавления - 03.10.2015 в 12:54
RAN Дата: Суббота, 03.10.2015, 13:47 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Workbooks("new_macros.xlsm")

Workbooks("temp.xlsm")

Причина - несоответствие числа строк и столбцов в книге с макросом и в книге temp

Интересно девки пляшут! :D


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Workbooks("new_macros.xlsm")

Workbooks("temp.xlsm")

Причина - несоответствие числа строк и столбцов в книге с макросом и в книге temp

Интересно девки пляшут! :D

Автор - RAN
Дата добавления - 03.10.2015 в 13:47
superpsih Дата: Понедельник, 05.10.2015, 09:47 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем огромное спасибо! Всё заработало!
 
Ответить
СообщениеВсем огромное спасибо! Всё заработало!

Автор - superpsih
Дата добавления - 05.10.2015 в 09:47
  • Страница 1 из 1
  • 1
Поиск:

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