Спасибо. я в курсе, это было образное выражение ) без помощи здесь я бы еще долго искал куда же мне условие вставить.
Цитата
Дорожный написал: Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)If [C1]=1 then тело макросаend ifend sub
странно, этот вариант я испробовал одним из первых, но не сработало. Видимо где то не то писал. Спасибо всем за помощь а Игорю отдельно за попытки направить на самостоятельный поиск решения. Я это ценю, но не всегда есть время глубоко вникать в проблему.
Здравствуйте всем. Прошу сильно не пинать, но в виду моего незнания VBA имею проблему как разрешить или запретить работать макросу вида:
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim new_value
Dim r As Range
Select Case Sh.Name
Case "Лист1"
Set r = Application.Intersect(Target, Range("Лист1!$A1:$A100"))
Case Else
Set r = Nothing
End Select
If r Is Nothing Then Exit Sub
If Target.Rows.Count * Target.Columns.Count > 1 Then
Application.Undo
Exit Sub
End If
new_value = Target.Value
Application.EnableEvents = False
Application.Undo
If Len(Target.Value) = 0 Then
Target.Value = new_value
End If
Application.EnableEvents = True
End Sub
Макрос честно стырен из интернета и делает то что мне нужно, а именно не позволяет изменять пользователю уже записанные данные в столбце А.
Я хочу прописать условие, чтобы макрос можно было отключать, например по значению в ячейке С1. Но что бы я ни делал с операторами If и Then это приводит только к прекращению работы макроса насовсем. Видимо я что то не так делаю. Прошу помощи у знающих людей.
обращаю внимание что макрос работает только в модуле книги, в модуле листа он не работает.
Спасибо! То, что надо) макрос, который проставляет маркер там где нужно. Простое и очевидное решение. Дело в том, что я только формулами пока умею.. но макрос заберу в копилку гениальных идей, стыренных с интернета для моих таблиц) Еще раз благодарю.
Здравствуйте. В продолжение моей темы здесь, хочу все же решить проблему ограничения работы формулы одним листом. Дело в том, что формула вида =ЕСЛИ(ЯЧЕЙКА("строка")=СТРОКА(L2);"х";"") в связке с макросом, который пересчитывает лист при каждом изменении ячейки срабатывает также и при изменении ячеек на других листах, что крайне нежелательно. Моя задача - сделать так, чтобы на листе 1 строка с заливкой оставалась на своем месте независимо от изменений на других листах книги. Вариант отключения автоматического пересчета в книге не рассматриваю. Автопересчет на других листах должен остаться.
Ігор Гончаренко написал: а перйдите на лист1, отметка в соотв. строке появилась???
Да, появилась. Во именно этот эффект мне и надо побороть. Я хочу чтобы отметка оставалась на своем месте (где я ее поставил на листе 1) независимо от изменений на других листах. Это возможно сделать? То, что дело не в макросе я уже понял.
В том то и дело что макрос выполняется везде в книге, хотя находится в модуле конкретного листа. И что такое "точка останова"? Я же не спец в макросах. Я их копирую пока из интернета, а не пишу самостоятельно.
В общем, в примере я использовал один из методов, выложенных на этом сайте. На листе 1 должен выполнятся макрос только при изменениях на этом листе. Сейчас он выполняется при изменениях на всех листах. Если кто поможет - спасибо заранее.
Здравствуйте. Подскажите такое. Есть простейший макрос вида:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Calculate
End Sub
Что нужно дописать, чтобы ограничить его работу только одним листом? В этом виде он срабатывает при изменениях на других листах в книге, что нежелательно.
Anchoret спасибо. Не сразу разобрался как это работает. Потом дошло что нужно не допускать более одного нежелательного изменения просто. Как это сделать формулой я уже, кажется, знаю.
Я собирался не фиксировать нежелательные, а отслеживать отличия по строке между "С" и "F" при изменении в "С". Условным форматированием или формулой. Сама затея была в том чтобы скопировать введенные данные из "С" в "F" и зафиксировать их там. А при изменении в "С" формула, которая будет "смотреть разницу" в доп. столбце выдаст "ЛОЖЬ" и подсветит пользователю где ошибка, а во всех следующих формулах привязать их работу зависимости от ЛОЖЬ или ИСТИНА в доп. столбце. Я не учел что макрос будет каждый раз перезаписывать столбец "F".
Я понял о чем говорит Игорь. Что макрос работает для всего столбца при изменении листа. И просто затрет мою "резервную копию столбца". Я об этом не подумал. Тогда и вариант Игоря работает так же. При удалении даты из "С" он удалит значение и из резервного столбца. А можно ли как то сделать работу макроса одноразовой? Запретить изменять значение в столбце "F" после записи. Наверное это должно быть правило, что если текущая ячейка столбца F уже больше нуля - макрос для нее не срабатывает. Правильно ли я думаю и как это реализовать?
Пытливый, логика понятна, но как это записать в синтаксисе? Это оператор If я так понимаю? Повторюсь - я профан в VBA. Умею лишь записывать макросы пока, но с редактированием пока траблы. Если можно, то покажите как это в коде будет выглядеть. Спасибо.
Ячейки в столбце С могут быть удалены случайно пользователем. Это потянет изменения в других, зависимых столбцах (их нет в примере). Копия столбца С поможет отследить и восстановить эти нежелательные изменения. Хотелось бы, конечно, чтобы макрос срабатывал по изменению ячейки, а не по нажатию кнопки т.к. ячеек может быть несколько сотен.
Здравствуйте. Сам с VBA не подружился еще, потому прошу помощи у знатоков. Вижу здесь людям помогают в этом. Хотел для себя записать простенький макрос, который бы копировал результат вычисления формулы из одного столбца в соседний в заданном диапазоне. Макрос выглядит вот так :
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Range("C4:C21").Copy
Range("F4:F21").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Макрос срабатывает но в конце выдает ошибку. Я так понимаю, что я что то (вернее все) делаю не так. Хочу понять что именно я не так делаю и как надо. Буду благодарен, если подскажете с пояснениями к коду, что там к чему и зачем. Заранее спасибо.