Здравствуйте.. пользовался ранее удобным макросом по заливке ячейке цветом по двойному клику.. Сейчас хотел себе другой процесс облегчить.. чтобы при двойном клике на ячейке определенного столбца менялось значение ее с пусто на ДА, потом на НЕТ, потом опять на ПУСТО. Т.е. допустим в первом столбце надо так. А во втором есть три значения для перебора.. т.е надо ПУСТО-ХОРОШО-СРЕДНЕ-ПЛОХО.. знаний, чтобы такое сделать нема.. а что то аналогичного, чтобы приспособить не нашел..
Здравствуйте.. пользовался ранее удобным макросом по заливке ячейке цветом по двойному клику.. Сейчас хотел себе другой процесс облегчить.. чтобы при двойном клике на ячейке определенного столбца менялось значение ее с пусто на ДА, потом на НЕТ, потом опять на ПУСТО. Т.е. допустим в первом столбце надо так. А во втором есть три значения для перебора.. т.е надо ПУСТО-ХОРОШО-СРЕДНЕ-ПЛОХО.. знаний, чтобы такое сделать нема.. а что то аналогичного, чтобы приспособить не нашел..ovechkin1973
ovechkin1973, ПУСТО-ХОРОШО-СРЕДНЕ-ПЛОХО как правило удобнее через выпадающий список, и проверку данных. Да, нет, пусто, тоже . Или всеж принципиально и макрос и даблклик?
ovechkin1973, ПУСТО-ХОРОШО-СРЕДНЕ-ПЛОХО как правило удобнее через выпадающий список, и проверку данных. Да, нет, пусто, тоже . Или всеж принципиально и макрос и даблклик?bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select End With End Sub
[/vba]
ну и второй аналогично
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End With End Sub
[/vba]
результирующий:
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case Left(.Address, 2) Case Is = "$A" Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select Case Is = "$B" Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End Select End With End Sub
[/vba]
Для ДА-НЕТ:
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select End With End Sub
[/vba]
ну и второй аналогично
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End With End Sub
[/vba]
результирующий:
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case Left(.Address, 2) Case Is = "$A" Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select Case Is = "$B" Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End Select End With End Sub
Уважаемый buchlotnik, моих знаний привязать макрос к конкретному столбцу не хватает.. В приложенном варианте макроса на любой ячейке любого столбца срабатывает.. как ограничить диапазон по столбцу и строкам?
Уважаемый buchlotnik, моих знаний привязать макрос к конкретному столбцу не хватает.. В приложенном варианте макроса на любой ячейке любого столбца срабатывает.. как ограничить диапазон по столбцу и строкам?ovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case Left(.Address, 2) Case Is = "$A" Call ChangeCellValue(Target, Array("", "да", "нет")) Case Is = "$B" Call ChangeCellValue(Target, Array("", "ХОРОШО", "СРЕДНЕ", "ПЛОХО")) End Select End With End Sub
Sub ChangeCellValue(ByVal Target As Range, ByVal arrValues) Dim i, values As Integer values = UBound(arrValues) With Target For i = 0 To values If IsEmpty(.Value) Or arrValues(i) = .Value Then If i = values Then .Value = arrValues(0) Else .Value = arrValues(i + 1) End If Exit For End If Next i End With End Sub
[/vba]
Вариант от тезки buchlotnik , но переработанный чуток.
Вдруг потребуется некоторая универсальность
[vba]
Код
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case Left(.Address, 2) Case Is = "$A" Call ChangeCellValue(Target, Array("", "да", "нет")) Case Is = "$B" Call ChangeCellValue(Target, Array("", "ХОРОШО", "СРЕДНЕ", "ПЛОХО")) End Select End With End Sub
Sub ChangeCellValue(ByVal Target As Range, ByVal arrValues) Dim i, values As Integer values = UBound(arrValues) With Target For i = 0 To values If IsEmpty(.Value) Or arrValues(i) = .Value Then If i = values Then .Value = arrValues(0) Else .Value = arrValues(i + 1) End If Exit For End If Next i End With End Sub
[/vba]
Вариант от тезки buchlotnik , но переработанный чуток.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Вторник, 05.12.2017, 21:27
Уважаемый buchlotnik, все работает так, как просил для конкретно примера.. но уже все перепробовал с заменами в коде, чтобы другой диапазон назначить.. допустим другие столбце и не со второй строки, а допустим с 10-ой..
Код
Case Is = "$A"
Думал, если $A сменю на $D, то и макрос будет работать на столбце D Надо "перекурить".. а то вывих мозга от такого напряга получу
Уважаемый buchlotnik, все работает так, как просил для конкретно примера.. но уже все перепробовал с заменами в коде, чтобы другой диапазон назначить.. допустим другие столбце и не со второй строки, а допустим с 10-ой..
Код
Case Is = "$A"
Думал, если $A сменю на $D, то и макрос будет работать на столбце D Надо "перекурить".. а то вывих мозга от такого напряга получуovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
если $A сменю на $D, то и макрос будет работать на столбце D
так и должно быть, показывайте в файле как что меняли
Цитата
все перепробовал
не верю
Цитата
а допустим с 10-ой
для столбца D как вариант
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case Left(.Address, 2) Case Is = "$D" If .Row > 9 Then Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select End If Case Is = "$B" Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End Select End With End Sub
[/vba]
Цитата
если $A сменю на $D, то и макрос будет работать на столбце D
так и должно быть, показывайте в файле как что меняли
Цитата
все перепробовал
не верю
Цитата
а допустим с 10-ой
для столбца D как вариант
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target Select Case Left(.Address, 2) Case Is = "$D" If .Row > 9 Then Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select End If Case Is = "$B" Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End Select End With End Sub
это уже похоже клиника полуночника.. Попробовал еще раз.. я оказывается хочу слишком в правом столбце AC заставить работать макрос.. а оказывается он дальше столбца Z не хочет работать У меня в рабочем файле надо это макрос заставить работать в столбцах, которые именованы двумя буквами..
Код
If .Row > 9 Then
это я понял ограничение, чтобы макрос работал ниже 9ой строки. А в самом первом варианте (опять же не умом, а практическими экспериментами) выявил, что в столбцах A и B со второй строки меняются значения, а если назначить допустим на столбец C, на котором нет заголовка в первой строке, то даже в С1 ставятся значения.. Или если заголовок в столбце будет в двух строках, то изменения от макроса будут только с 3-й строки работать.
И прошу прощения.. ответы буду завтра читать.. силы VBA все вымотал.. да и на работу через несколько часов вставать уже.
это уже похоже клиника полуночника.. Попробовал еще раз.. я оказывается хочу слишком в правом столбце AC заставить работать макрос.. а оказывается он дальше столбца Z не хочет работать У меня в рабочем файле надо это макрос заставить работать в столбцах, которые именованы двумя буквами..
Код
If .Row > 9 Then
это я понял ограничение, чтобы макрос работал ниже 9ой строки. А в самом первом варианте (опять же не умом, а практическими экспериментами) выявил, что в столбцах A и B со второй строки меняются значения, а если назначить допустим на столбец C, на котором нет заголовка в первой строке, то даже в С1 ставятся значения.. Или если заголовок в столбце будет в двух строках, то изменения от макроса будут только с 3-й строки работать.
И прошу прощения.. ответы буду завтра читать.. силы VBA все вымотал.. да и на работу через несколько часов вставать уже.ovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
чтобы другой диапазон назначить.. допустим другие столбце и не со второй строки, а допустим с 10-ой..
Так попробуйте. [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target If Not Application.Intersect(Range("A2:A10"), Target) Is Nothing Then Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select End If If Not Application.Intersect(Range("AC10:AC20"), Target) Is Nothing Then Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End If End With End Sub
чтобы другой диапазон назначить.. допустим другие столбце и не со второй строки, а допустим с 10-ой..
Так попробуйте. [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target If Not Application.Intersect(Range("A2:A10"), Target) Is Nothing Then Select Case .Value Case Is = "": .Value = "ДА" Case Is = "ДА": .Value = "НЕТ" Case Is = "НЕТ": .Value = "" End Select End If If Not Application.Intersect(Range("AC10:AC20"), Target) Is Nothing Then Select Case .Value Case Is = "": .Value = "ХОРОШО" Case Is = "ХОРОШО": .Value = "СРЕДНЕ" Case Is = "СРЕДНЕ": .Value = "ПЛОХО" Case Is = "ПЛОХО": .Value = "" End Select End If End With End Sub
Уважаемые Wasilich, , _Boroda_, , buchlotnik - огромное человеческое спасибо за науку.. ваша помощь помогла. Извиняюсь, что не ответил сразу.... Все три варианта проверил на свежую голову - все работают!
Уважаемые Wasilich, , _Boroda_, , buchlotnik - огромное человеческое спасибо за науку.. ваша помощь помогла. Извиняюсь, что не ответил сразу.... Все три варианта проверил на свежую голову - все работают!ovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
Сообщение отредактировал ovechkin1973 - Четверг, 07.12.2017, 20:32
Полученные ранее знания мне на пользу не пошли. То, что раньше получилось - в другом файле у меня не получается реализовать. Хотел вставлять данные начиная с 10-ой строки в столбцах 9-29 по двойному клику. Но больше, чем в 9 и 10-ых столбцах не получается. В столбцах бывает нужно выбирать между значением и пустотой, а иногда значений может и до пяти значений. Это в 9 и 10 столбце я попробовал сделать. Но с 11 по 29 не получается. Пробовал просто код добавлять [vba]
Код
Case Is = "$K" Select Case .Value Case Is = "": .Value = "Вова" Case Is = "Вова": .Value = "Саша" Case Is = "Саша": .Value = "" End Select End Select
[/vba] не работает в столбце K
Еще - если в ячейке уже были записаны какие то данные до работы макроса - в них нет возможности изменить данные .
Полученные ранее знания мне на пользу не пошли. То, что раньше получилось - в другом файле у меня не получается реализовать. Хотел вставлять данные начиная с 10-ой строки в столбцах 9-29 по двойному клику. Но больше, чем в 9 и 10-ых столбцах не получается. В столбцах бывает нужно выбирать между значением и пустотой, а иногда значений может и до пяти значений. Это в 9 и 10 столбце я попробовал сделать. Но с 11 по 29 не получается. Пробовал просто код добавлять [vba]
Код
Case Is = "$K" Select Case .Value Case Is = "": .Value = "Вова" Case Is = "Вова": .Value = "Саша" Case Is = "Саша": .Value = "" End Select End Select
[/vba] не работает в столбце K
Еще - если в ячейке уже были записаны какие то данные до работы макроса - в них нет возможности изменить данные .ovechkin1973
[/vba] . Код дописал, чтобы работал с 9 по 13 столбцы.. остальные заполню по аналогии, но не уверен, что оптимально решение, хотя если комп "виснуть" не будет, то мои потребности он решит.
[/vba] . Код дописал, чтобы работал с 9 по 13 столбцы.. остальные заполню по аналогии, но не уверен, что оптимально решение, хотя если комп "виснуть" не будет, то мои потребности он решит.