Доброго времени суток! Совсем недавно начал изучать VBA. Столкнулся с такой проблемой:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False Dim w As Object If Range("E23") = "5х1,5" Then Range("K23:M23") = "-" Range("H23:J23,N23:T23") = ""
End If
Application.EnableEvents = True End Sub
[/vba]Важно, что бы макрос запускался автоматически после ввода определенного значения (он указывает в какие ячейки в дальнейшем нужно ввести значения)
В этом случае нет возможности что-то поменять в ячейках K23:M23 и (H23:J23,N23:T23), а это принципиально.
Возможность убрать (= "") не проходит, т.к. в дальнейшем например:[vba]
Код
If Range("E23") = "5х1,5" Then Range("N23:T23") = "-" Range("H23:M23") = ""
[/vba]Может быть есть какая-то возможность остановить либо завершить процедуру Worksheet_Change, после ввода "5х1,5",тем самым оставляя возможность вручную подкорректировать ячейки не удаляя значение Range("E23"), а затем начать процедуру Worksheet_Change снова, но уже в другой ячейке.
Может быть существует какое-то другое решение этой проблемы?
Например с кнопкой это работает так:[vba]
Код
Private Sub Кнопка1_Click()
If Cells(23, 5) = "" Then Range("H23:T23").Interior.ColorIndex = x6None Cells(23, 5).Interior.ColorIndex = 3 MsgBox ("Введите значение!") Range("H23:T23") = "-" End If
If Cells(23, 5) = "5х1,5" Then Range("K23:M23") = "-" Range("H23:J23,N23:T23") = "" Range("H23:T23").Interior.ColorIndex = x6None Range("H23:J23,N23:T23").Interior.ColorIndex = 6 Range("E23:E23").Interior.ColorIndex = x3None End If
If Cells(23, 5) = "4х1,5" Then Range("N23:T23") = "-" Range("H23:M23") = "" Range("H23:T23").Interior.ColorIndex = x6None Range("H23:M23").Interior.ColorIndex = 6 Range("E23:E23").Interior.ColorIndex = x3None End If
If Cells(23, 5) = "3х1,5" Then Dim A As Variant A = InputBox("Введите номер: 1,2 или 3", "Ввод данных") Select Case A Case 1 Range("H23:M23,O23:P23,R23:S23") = "-" Range("N23:N23,Q23:Q23,T23:T23") = "" Range("E23:E23").Interior.ColorIndex = x3None Range("N23:N23,Q23:Q23,T23:T23").Interior.ColorIndex = 6 Range("H23:M23").Interior.ColorIndex = x6None Range("O23:O23,R23:R23,P23:P23,S23:S23").Interior.ColorIndex = x6None Case 2 Range("H23:N23,P23:Q23,S23:S23") = "-" Range("O23:O23,R23:R23,T23:T23") = "" Range("E23:E23").Interior.ColorIndex = x3None Range("O23:O23,R23:R23,T23:T23").Interior.ColorIndex = 6 Range("H23:M23").Interior.ColorIndex = x6None Range("N23:N23,Q23:Q23,P23:P23,S23:S23").Interior.ColorIndex = x6None Case 3 Range("H23:O23,Q23:R23") = "-" Range("P23:P23,S23:S23,T23:T23") = "" Range("E23:E23").Interior.ColorIndex = x3None Range("P23:P23,S23:S23,T23:T23").Interior.ColorIndex = 6 Range("H23:M23").Interior.ColorIndex = x6None Range("N23:N23,Q23:Q23,O23:O23,R23:R23").Interior.ColorIndex = x6None End Select End If
End Sub
[/vba]__________________________________________________________________________________________ Как же сделать то же но без кнопки (автоматически). Необходимость в[vba]
Код
If Cells(23, 5) = "" Then Range("H23:T23").Interior.ColorIndex = x6None Cells(23, 5).Interior.ColorIndex = 3 MsgBox ("Введите значение!") Range("H23:T23") = "-" End If
[/vba]соответственно отпадет.
Заранее приношу извинения. Я уверен, что код нелепый и банальный. Скорее всего можно сделать что-то такое, но гораздо умнее (не на уровне 1-го класса). К сожалению я не знаю как. Прошу понять, откликнуться и помочь!!!
Доброго времени суток! Совсем недавно начал изучать VBA. Столкнулся с такой проблемой:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False Dim w As Object If Range("E23") = "5х1,5" Then Range("K23:M23") = "-" Range("H23:J23,N23:T23") = ""
End If
Application.EnableEvents = True End Sub
[/vba]Важно, что бы макрос запускался автоматически после ввода определенного значения (он указывает в какие ячейки в дальнейшем нужно ввести значения)
В этом случае нет возможности что-то поменять в ячейках K23:M23 и (H23:J23,N23:T23), а это принципиально.
Возможность убрать (= "") не проходит, т.к. в дальнейшем например:[vba]
Код
If Range("E23") = "5х1,5" Then Range("N23:T23") = "-" Range("H23:M23") = ""
[/vba]Может быть есть какая-то возможность остановить либо завершить процедуру Worksheet_Change, после ввода "5х1,5",тем самым оставляя возможность вручную подкорректировать ячейки не удаляя значение Range("E23"), а затем начать процедуру Worksheet_Change снова, но уже в другой ячейке.
Может быть существует какое-то другое решение этой проблемы?
Например с кнопкой это работает так:[vba]
Код
Private Sub Кнопка1_Click()
If Cells(23, 5) = "" Then Range("H23:T23").Interior.ColorIndex = x6None Cells(23, 5).Interior.ColorIndex = 3 MsgBox ("Введите значение!") Range("H23:T23") = "-" End If
If Cells(23, 5) = "5х1,5" Then Range("K23:M23") = "-" Range("H23:J23,N23:T23") = "" Range("H23:T23").Interior.ColorIndex = x6None Range("H23:J23,N23:T23").Interior.ColorIndex = 6 Range("E23:E23").Interior.ColorIndex = x3None End If
If Cells(23, 5) = "4х1,5" Then Range("N23:T23") = "-" Range("H23:M23") = "" Range("H23:T23").Interior.ColorIndex = x6None Range("H23:M23").Interior.ColorIndex = 6 Range("E23:E23").Interior.ColorIndex = x3None End If
If Cells(23, 5) = "3х1,5" Then Dim A As Variant A = InputBox("Введите номер: 1,2 или 3", "Ввод данных") Select Case A Case 1 Range("H23:M23,O23:P23,R23:S23") = "-" Range("N23:N23,Q23:Q23,T23:T23") = "" Range("E23:E23").Interior.ColorIndex = x3None Range("N23:N23,Q23:Q23,T23:T23").Interior.ColorIndex = 6 Range("H23:M23").Interior.ColorIndex = x6None Range("O23:O23,R23:R23,P23:P23,S23:S23").Interior.ColorIndex = x6None Case 2 Range("H23:N23,P23:Q23,S23:S23") = "-" Range("O23:O23,R23:R23,T23:T23") = "" Range("E23:E23").Interior.ColorIndex = x3None Range("O23:O23,R23:R23,T23:T23").Interior.ColorIndex = 6 Range("H23:M23").Interior.ColorIndex = x6None Range("N23:N23,Q23:Q23,P23:P23,S23:S23").Interior.ColorIndex = x6None Case 3 Range("H23:O23,Q23:R23") = "-" Range("P23:P23,S23:S23,T23:T23") = "" Range("E23:E23").Interior.ColorIndex = x3None Range("P23:P23,S23:S23,T23:T23").Interior.ColorIndex = 6 Range("H23:M23").Interior.ColorIndex = x6None Range("N23:N23,Q23:Q23,O23:O23,R23:R23").Interior.ColorIndex = x6None End Select End If
End Sub
[/vba]__________________________________________________________________________________________ Как же сделать то же но без кнопки (автоматически). Необходимость в[vba]
Код
If Cells(23, 5) = "" Then Range("H23:T23").Interior.ColorIndex = x6None Cells(23, 5).Interior.ColorIndex = 3 MsgBox ("Введите значение!") Range("H23:T23") = "-" End If
[/vba]соответственно отпадет.
Заранее приношу извинения. Я уверен, что код нелепый и банальный. Скорее всего можно сделать что-то такое, но гораздо умнее (не на уровне 1-го класса). К сожалению я не знаю как. Прошу понять, откликнуться и помочь!!!Dмитрий
Сообщение отредактировал Serge_007 - Воскресенье, 22.09.2013, 08:23
Dмитрий, Есть такая # кнопочка, называется "код VBA" - она ставит соответствующие теги. Так вот, оформите коды тегами. И поясните кратко на словах - что вам нужно. А то не понятно, что вы делаете.
зы. и что такое x6None и x3None у меня редактор на них ругается...
зы.зы. Не совсем понял, что вам нужно, но может это? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim w As Object If Target.Address = "$A$23" Then If Target = "5х1,5" Then ' здесь х - кирилица Range("K23:M23") = "-" Range("H23:J23,N23:T23") = "" End If End If Application.EnableEvents = True End Sub
[/vba]
Dмитрий, Есть такая # кнопочка, называется "код VBA" - она ставит соответствующие теги. Так вот, оформите коды тегами. И поясните кратко на словах - что вам нужно. А то не понятно, что вы делаете.
зы. и что такое x6None и x3None у меня редактор на них ругается...
зы.зы. Не совсем понял, что вам нужно, но может это? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim w As Object If Target.Address = "$A$23" Then If Target = "5х1,5" Then ' здесь х - кирилица Range("K23:M23") = "-" Range("H23:J23,N23:T23") = "" End If End If Application.EnableEvents = True End Sub
Суть в следующем: При вводе в ячейку "Е23" значения 5х1,5 (кирилица) макрос автоматически запускается и ставит прочерки в ячейки, которые должны оставаться незаполненными, а остальные должны иметь возможность ручного ввода значений, не изменяя при этом "Е23". Таких ячеек будет множество. Значения в "Е23" будут вводится различные.
Примерно о работе кода можно судить в прикрепленном файле. Беда лишь в том, что макрос работает от кнопки. Должна же быть возможность автоматически запустить макрос. Я попробовал при помощи Worksheet_Change
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim w As Object If Range("E23") = "5х1,5" Then Range("K23:M23") = "-" Range("H23:J23,N23:T23") = "" End If Application.EnableEvents = True End Sub
[/vba] но столкнулся с проблемой Нет возможности что-то поменять в ячейках K23:M23 и (H23:J23,N23:T23), а это принципиально.
Michael_S,
Суть в следующем: При вводе в ячейку "Е23" значения 5х1,5 (кирилица) макрос автоматически запускается и ставит прочерки в ячейки, которые должны оставаться незаполненными, а остальные должны иметь возможность ручного ввода значений, не изменяя при этом "Е23". Таких ячеек будет множество. Значения в "Е23" будут вводится различные.
Примерно о работе кода можно судить в прикрепленном файле. Беда лишь в том, что макрос работает от кнопки. Должна же быть возможность автоматически запустить макрос. Я попробовал при помощи Worksheet_Change
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim w As Object If Range("E23") = "5х1,5" Then Range("K23:M23") = "-" Range("H23:J23,N23:T23") = "" End If Application.EnableEvents = True End Sub
[/vba] но столкнулся с проблемой Нет возможности что-то поменять в ячейках K23:M23 и (H23:J23,N23:T23), а это принципиально.Dмитрий
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$E$23" Then Exit Sub If Target.Address = "$E$23" And Target.Value <> "5х1,5" Then Exit Sub
'Ваша процедура MsgBox "в ячейку Е23 введено 5х1,5"
End Sub
[/vba] Выход из процедуры, если изменяется не ячейка Е23 или если в ячейку Е23 вводится что-либо кроме 5х1,5. Точнее, если в ячейку Е23 ввести 5х1,5, то макрос сработает. В любых других случаях не сработает.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$E$23" Then Exit Sub If Target.Address = "$E$23" And Target.Value <> "5х1,5" Then Exit Sub
'Ваша процедура MsgBox "в ячейку Е23 введено 5х1,5"
End Sub
[/vba] Выход из процедуры, если изменяется не ячейка Е23 или если в ячейку Е23 вводится что-либо кроме 5х1,5. Точнее, если в ячейку Е23 ввести 5х1,5, то макрос сработает. В любых других случаях не сработает.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Воскресенье, 22.09.2013, 13:51
Dмитрий, как понимаю, вам нужно, что б работало не только в Е23, но и по всему диапазону Е23:Е35 (а может и больше). Посмотрите пример, там в коде комментарии.
Dмитрий, как понимаю, вам нужно, что б работало не только в Е23, но и по всему диапазону Е23:Е35 (а может и больше). Посмотрите пример, там в коде комментарии.
Dмитрий, как понимаю, вам нужно, что б работало не только в Е23, но и по всему диапазону Е23:Е35 (а может и больше).
Совершенно верно! Диапозон может быть большим (порядка 100-200 строк) либо 5-10 строк . Каждый случай уникальный. Неизменно лишь то, что в диапазоне Е23 - ...... значения будут повторяться. Например в ячейке Е23- ..... может быть значение 5х1,5 или 4х1,5 или 3х1,5
Есть ли такая возможность проигнорировать "1,5" в "5х1,5" или "4х1,5". К чему это: Значения могут содержать не только 4х1,5 но и 4х2,5; 4х4; 4х6 То же и с 3х.... и 5х...... Хотелось чтоб макрос опирался только на значения 3,4,5 и исходя из этого вводил прочерки, либо оставлял ячейки пустыми. Не вводить же значения через И [vba]
Код
If Cells(23, 5) = "3х1,5" Or "3х2.5" Or "3х4" Or "3х6" Or "3х10" Or "3х16" Or "3х25"Then ' и так далее
[/vba]
Michael_S Огромное спасибо! Я даже и не думал что кто-то откликнется, тем более с дельными советами.
Dмитрий, как понимаю, вам нужно, что б работало не только в Е23, но и по всему диапазону Е23:Е35 (а может и больше).
Совершенно верно! Диапозон может быть большим (порядка 100-200 строк) либо 5-10 строк . Каждый случай уникальный. Неизменно лишь то, что в диапазоне Е23 - ...... значения будут повторяться. Например в ячейке Е23- ..... может быть значение 5х1,5 или 4х1,5 или 3х1,5
Есть ли такая возможность проигнорировать "1,5" в "5х1,5" или "4х1,5". К чему это: Значения могут содержать не только 4х1,5 но и 4х2,5; 4х4; 4х6 То же и с 3х.... и 5х...... Хотелось чтоб макрос опирался только на значения 3,4,5 и исходя из этого вводил прочерки, либо оставлял ячейки пустыми. Не вводить же значения через И [vba]
Код
If Cells(23, 5) = "3х1,5" Or "3х2.5" Or "3х4" Or "3х6" Or "3х10" Or "3х16" Or "3х25"Then ' и так далее
Sub qwerty() If Cells(23, 5) Like "3х?*" Or Cells(23, 5) Like "3x?*" Or _ Cells(23, 5) Like "4х?*" Or Cells(23, 5) Like "4x?*" Or _ Cells(23, 5) Like "5х?*" Or Cells(23, 5) Like "5x?*" Then MsgBox Cells(23, 5) End If End Sub
[/vba]"3х?*" различаются "х". В одном латиница, в другом кирилица
[vba]
Код
Sub qwerty() If Cells(23, 5) Like "3х?*" Or Cells(23, 5) Like "3x?*" Or _ Cells(23, 5) Like "4х?*" Or Cells(23, 5) Like "4x?*" Or _ Cells(23, 5) Like "5х?*" Or Cells(23, 5) Like "5x?*" Then MsgBox Cells(23, 5) End If End Sub
[/vba]"3х?*" различаются "х". В одном латиница, в другом кирилицаSergeyKorotun
Сообщение отредактировал SergeyKorotun - Воскресенье, 22.09.2013, 15:41
Michael_S, Совершенно верно. Количество жил может быть только 3, либо 4, либо 5 Сечение же может принимать любое значение, так в ячейке может быть записано 3х1,5 или 3х6 4х120 или 4х2,5 5х240 или 5х16
Michael_S, Совершенно верно. Количество жил может быть только 3, либо 4, либо 5 Сечение же может принимать любое значение, так в ячейке может быть записано 3х1,5 или 3х6 4х120 или 4х2,5 5х240 или 5х16Dмитрий