Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 13:08   #1
tgm
Пользователь
 
Регистрация: 15.11.2009
Сообщений: 65
По умолчанию Запуск макроса из формы

Добрый день. Есть такой макрос:

Sub Макрос1()
Application.ScreenUpdating = False
r = Cells(Rows.Count, 2).End(xlUp).Row
For i = 4 To r
Sheets("Данные").Cells(i, 1).Value = "x"
Sheets("Бланк").Copy After:=Sheets("Бланк")
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Name = Sheets("Данные").Cells(i, 2)
Sheets("Данные").Cells(i, 1).Value = "х"
Next i
Sheets("Данные").Select
Application.ScreenUpdating = True
End Sub

Макрос формирует бланки,беря данные из таблицы на листе"Данные".
На данный момент он запускается из листа "Данные",хотелось бы запускать его из формы,но при работе макроса он выдает ошибку "1004" и выделяет строку
ActiveSheet.Name = Sheets("Данные").Cells(i, 2)
При запуске из других листов тоже не срабатывает...
Помогите пожалуйста довести до ума.
tgm вне форума Ответить с цитированием
Старый 09.06.2011, 13:27   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

У меня и из формы один раз отработал.
На второй раз ругнулся на эту строку, ибо такое имя уже есть.
Если запускать из формы, нужно указать, чьи это cells:
Код:
r = Cells(Rows.Count, 2).End(xlUp).Row
Ну и ещё есть что исправить, например
Код:
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
можно заменить на
Код:
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Вроде так в итоге получается:

Код:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
With Sheets("Данные")
r = .Cells(.Rows.Count, 2).End(xlUp).Row
For i = 4 To r
.Cells(i, 1).Value = "x"
Sheets("Бланк").Copy After:=Sheets("Бланк")
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
ActiveSheet.Name = .Cells(i, 2)
.Cells(i, 1).Value = "х"
Next i
.Select
End With
Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.06.2011 в 13:37.
Hugo121 вне форума Ответить с цитированием
Старый 09.06.2011, 13:47   #3
tgm
Пользователь
 
Регистрация: 15.11.2009
Сообщений: 65
По умолчанию

А ведь заработало.. Спасибо большое!
tgm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск макроса kaa1977 Microsoft Office Excel 5 12.04.2011 10:44
Запуск макроса Gvaridos Microsoft Office Excel 4 22.11.2010 11:35
Запуск макроса serafim09 Microsoft Office Excel 9 03.09.2009 16:55
Запуск макроса по событию tim13 Microsoft Office Excel 5 17.08.2009 13:33
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43