Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Выполнение макроса по условию.
 
Спасибо. я в курсе, это было образное выражение )
без помощи здесь я бы еще долго искал куда же мне условие вставить.
Цитата
Дорожный написал:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)If [C1]=1 then  тело макросаend ifend sub
странно, этот вариант я испробовал одним из первых, но не сработало. Видимо где то не то писал. Спасибо всем за помощь а Игорю отдельно за попытки направить на самостоятельный поиск решения. Я это ценю, но не всегда есть время глубоко вникать в проблему.  
Изменено: Anatoliy_Pro - 04.02.2019 12:51:48
Выполнение макроса по условию.
 
Если С1 = 1 макрос не работает.
Если С1 = 0 макрос снова работает
На этом же листе рабочей книги можно. Лист1!С1
Выполнение макроса по условию.
 
Здравствуйте всем. Прошу сильно не пинать, но в виду моего незнания 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 это приводит только к прекращению работы макроса насовсем. Видимо я что то не так делаю. Прошу помощи у знающих людей.

обращаю внимание что макрос работает только в модуле книги, в модуле листа он не работает.

Изменено: Anatoliy_Pro - 04.02.2019 12:27:09
Ограничение пересчета формулы в книге одним листом.
 
Спасибо! То, что надо) макрос, который проставляет маркер там где нужно. Простое и очевидное решение. Дело в том, что я только формулами пока умею.. но макрос заберу в копилку гениальных идей, стыренных с интернета для моих таблиц)
Еще раз благодарю.
Ограничение пересчета формулы в книге одним листом.
 
Здравствуйте. В продолжение моей темы здесь, хочу все же решить проблему ограничения работы формулы одним листом. Дело в том, что формула вида =ЕСЛИ(ЯЧЕЙКА("строка")=СТРОКА(L2);"х";"") в связке с макросом, который пересчитывает лист при каждом изменении ячейки  срабатывает также и при изменении ячеек на других листах, что крайне нежелательно. Моя задача - сделать так, чтобы на листе 1 строка с заливкой оставалась на своем месте независимо от изменений на других листах книги.
Вариант отключения автоматического пересчета в книге не рассматриваю. Автопересчет на других листах должен остаться.

Файл прилагается.  
Изменено: Anatoliy_Pro - 24.01.2019 16:27:28
Ограничение работы макроса одним листом
 
Понял. Спасибо.
Ограничение работы макроса одним листом
 
Цитата
Ігор Гончаренко написал:
а перйдите на лист1, отметка в соотв. строке появилась???
Да, появилась. Во именно этот эффект мне и надо побороть. Я хочу чтобы отметка оставалась на своем месте (где я ее поставил на листе 1) независимо от изменений на других листах. Это возможно сделать? То, что дело не в макросе я уже понял.
Ограничение работы макроса одним листом
 
В том то и дело что макрос выполняется везде в книге, хотя находится в модуле конкретного листа. И что такое "точка останова"? Я же не спец в макросах. Я их копирую пока из интернета, а не пишу самостоятельно.

В общем, в примере я использовал один из методов, выложенных на этом сайте.  На листе 1 должен выполнятся макрос только при изменениях на этом листе. Сейчас он выполняется при изменениях на всех листах. Если кто поможет - спасибо заранее.
Ограничение работы макроса одним листом
 
Возможно в этом дело.
Цитата
Ігор Гончаренко написал: а покажите такой файл, где этот макрос
Файл большой, но сейчас попытаюсь сделать мини-пример с таким же сценарием.
Ограничение работы макроса одним листом
 
Макрос находится в модуле нужного листа. Это первое что пришло мне в голову. Но почему то он срабатывает и при изменениях на других листах.
Ограничение работы макроса одним листом
 
Здравствуйте.
Подскажите такое. Есть простейший макрос вида:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Calculate
  
  End Sub

 

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

Изменено: Anatoliy_Pro - 18.01.2019 16:27:01
Макрос, который копирует значения в соседнюю ячейку
 
Anchoret спасибо. Не сразу разобрался как это работает. Потом дошло что нужно не допускать более одного нежелательного изменения просто. Как это сделать формулой я уже, кажется, знаю.
Цитата
Ігор Гончаренко написал:
и как это
Я не программист. Потому и спрашивал как это сделать у Вас.
Цитата
Ігор Гончаренко написал:
а мы их не фиксируем
Я собирался не фиксировать нежелательные, а отслеживать отличия по строке между "С" и "F" при изменении в "С". Условным форматированием или формулой.
Сама затея была в том чтобы скопировать введенные данные из "С" в "F" и зафиксировать их там. А при изменении в "С" формула, которая будет "смотреть разницу" в доп. столбце выдаст "ЛОЖЬ" и подсветит пользователю где ошибка, а во всех следующих формулах привязать их работу зависимости от ЛОЖЬ или ИСТИНА в доп. столбце.
Я не учел что макрос будет каждый раз перезаписывать столбец "F".
Изменено: Anatoliy_Pro - 27.12.2018 10:32:45
Макрос, который копирует значения в соседнюю ячейку
 
Я понял о чем говорит Игорь. Что макрос работает для всего столбца при изменении листа. И просто затрет мою "резервную копию столбца". Я об этом не подумал.  Тогда и вариант Игоря работает так же. При удалении даты из "С" он удалит значение и из резервного столбца. А можно ли как то сделать работу макроса одноразовой? Запретить изменять значение в столбце "F" после записи. Наверное это должно быть правило, что если текущая ячейка столбца F уже больше нуля - макрос для нее не срабатывает.
Правильно ли я думаю и как это реализовать?  
Изменено: Anatoliy_Pro - 26.12.2018 19:42:52
Макрос, который копирует значения в соседнюю ячейку
 
Пытливый, логика понятна, но как это записать в синтаксисе? Это оператор If я так понимаю? Повторюсь -  я профан в VBA. Умею лишь записывать макросы пока, но с редактированием пока траблы. Если можно, то покажите как это в коде будет выглядеть. Спасибо.
Изменено: Anatoliy_Pro - 26.12.2018 19:42:10
Макрос, который копирует значения в соседнюю ячейку
 
Цитата
Ігор Гончаренко написал
Спасибо. Работает. Но пришлось вывести на отдельную кнопку.  
Изменено: Anatoliy_Pro - 26.12.2018 14:18:54
Макрос, который копирует значения в соседнюю ячейку
 
Ячейки в столбце С могут быть удалены случайно пользователем. Это потянет изменения в других, зависимых столбцах (их нет в примере). Копия столбца С поможет отследить и восстановить эти нежелательные изменения. Хотелось бы, конечно, чтобы макрос срабатывал по изменению ячейки, а не по нажатию кнопки т.к. ячеек может быть несколько сотен.  
Изменено: Anatoliy_Pro - 26.12.2018 19:42:28
Макрос, который копирует значения в соседнюю ячейку
 
Здравствуйте. Сам  с 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
Макрос срабатывает но в конце выдает ошибку. Я так понимаю, что я что то (вернее все) делаю не так. Хочу понять что именно я не так делаю и как надо. Буду благодарен, если подскажете с пояснениями к коду, что там к чему и зачем.
Заранее спасибо.

файл для примера прилагается.
Изменено: Anatoliy_Pro - 26.12.2018 12:41:22
Страницы: 1
Наверх