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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2011, 12:16   #1
LinkorA
 
Регистрация: 17.10.2011
Сообщений: 5
Печаль Немогу исправить шибку в Макросе

Я не слишком шарю в макросах но создал такое чудо:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim w As Object
'On Error Resume Next
Sheets("Лист2").Select
If Range("P2").Value = 1 Then
Sheets("Лист2").Select
Range("L2:M2").Select
Selection.Copy
End If
Dim EmptyCell As Range
Sheets("Лист3").Select
Const StartCell = "B1"
If Len(Range(StartCell)) = 0 Then
Set EmptyCell = Range(StartCell)
Else
Set EmptyCell = Range(StartCell).End(xlDown).Offset (1)
End If
EmptyCell.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Лист2").Select
Range("P4").Select
ActiveCell.FormulaR1C1 = "Выполнен!"

End Sub

Я выделил ошибку которую он находит...
Я хочу чтобы макрос запускался когда значение в Р2 было 1. А макрос выполнял копирование 2-х ячеек на другой лист в первую свободную ячейку из столбца В2 на листе 3. И немогу понять как исправить ошибку....

Последний раз редактировалось LinkorA; 17.10.2011 в 12:34.
LinkorA вне форума Ответить с цитированием
Старый 17.10.2011, 13:43   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Ошибка возникает потому, что активен Лист3, а диапазон EmptyCell находится на том листе, в модуле которого расположен макрос:
Код:
If Len(Range(StartCell)) = 0 Then
Set EmptyCell = Range(StartCell)
Else
Set EmptyCell = Range(StartCell).End(xlDown).Offset (1)
End If
Запомните: в модуле листа свойства Range, Cells, Shapes, Names, Hyperlinks и т.д. без явного указания листа относятся не к активному листу, а к листу, в модуле которого расположен код!
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.10.2011, 14:04   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Наверно, надо, чтобы макрос срабатывал только при ИЗМЕНЕНИИ Р2 на 1?
Иначе он будет срабатывать при любом изменении на листе, если Р2 содержит 1.
Попробуйте:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim EmptyCell As Range

If Intersect(Target, Range("P2")) Is Nothing Then Exit Sub
If Range("P2") <> 1 Then Exit Sub
Set EmptyCell = Sheets("Лист3").Cells(Rows.Count, "B").End(xlUp)
If EmptyCell <> "" Then Set EmptyCell = EmptyCell.Offset(1)
Range("L2:M2").Copy EmptyCell
Application.EnableEvents = False
Range("P4") = "Выполнен!"
Application.EnableEvents = True

End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.10.2011, 14:39   #4
LinkorA
 
Регистрация: 17.10.2011
Сообщений: 5
По умолчанию

Супер!!! Спасибо тебе Казанский =))
Еще один вопросик, терь он копирует у меня формулы... из листа 2, а мне нада токо значения... как это зделать?
LinkorA вне форума Ответить с цитированием
Старый 17.10.2011, 15:01   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пардон. Замени
Код:
Range("L2:M2").Copy EmptyCell
на
Код:
EmptyCell.Resize(, 2).Value = Range("L2:M2").Value
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.10.2011, 17:32   #6
LinkorA
 
Регистрация: 17.10.2011
Сообщений: 5
Радость

Ураа работает =)) большое спасибо тебе.
Тема больше не актуальна...
LinkorA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немогу исправить ошибку Bighead Помощь студентам 0 15.01.2011 15:40
Немогу исправить. С++ PAREN_DEFO Общие вопросы C/C++ 3 30.12.2010 00:26
как исправить шибку Repac123456 Помощь студентам 2 28.12.2010 04:30
Сортировка в макросе Илья Николаевич Microsoft Office Excel 2 05.07.2010 15:34
Немогу исправить ошибки с++ Айдар Помощь студентам 1 16.05.2010 23:26