Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Worksheet_Change - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Worksheet_Change
Dмитрий Дата: Воскресенье, 22.09.2013, 02:08 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
Доброго времени суток!
Совсем недавно начал изучать 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-го класса).
К сожалению я не знаю как. Прошу понять, откликнуться и помочь!!!


Сообщение отредактировал Serge_007 - Воскресенье, 22.09.2013, 08:23
 
Ответить
СообщениеДоброго времени суток!
Совсем недавно начал изучать 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митрий
Дата добавления - 22.09.2013 в 02:08
Michael_S Дата: Воскресенье, 22.09.2013, 02:51 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
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]


Сообщение отредактировал Michael_S - Воскресенье, 22.09.2013, 03:01
 
Ответить
Сообщение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]

Автор - Michael_S
Дата добавления - 22.09.2013 в 02:51
Dмитрий Дата: Воскресенье, 22.09.2013, 13:04 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
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), а это принципиально.
К сообщению приложен файл: 8216849.xlsb (22.0 Kb)
 
Ответить
Сообщение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митрий
Дата добавления - 22.09.2013 в 13:04
SkyPro Дата: Воскресенье, 22.09.2013, 13:45 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[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, то макрос сработает. В любых других случаях не сработает.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Воскресенье, 22.09.2013, 13:51
 
Ответить
Сообщение[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
Дата добавления - 22.09.2013 в 13:45
Michael_S Дата: Воскресенье, 22.09.2013, 14:01 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Dмитрий, как понимаю, вам нужно, что б работало не только в Е23, но и по всему диапазону Е23:Е35 (а может и больше). Посмотрите пример, там в коде комментарии.

Зы. А вообще приято сообщать, что вопрос задан не только здесь. По крайней мере я видел его и на планете: http://www.planetaexcel.ru/forum....D=51346
К сообщению приложен файл: Dmitri.xlsb (32.6 Kb)


Сообщение отредактировал Michael_S - Воскресенье, 22.09.2013, 14:06
 
Ответить
СообщениеDмитрий, как понимаю, вам нужно, что б работало не только в Е23, но и по всему диапазону Е23:Е35 (а может и больше). Посмотрите пример, там в коде комментарии.

Зы. А вообще приято сообщать, что вопрос задан не только здесь. По крайней мере я видел его и на планете: http://www.planetaexcel.ru/forum....D=51346

Автор - Michael_S
Дата добавления - 22.09.2013 в 14:01
Dмитрий Дата: Воскресенье, 22.09.2013, 14:40 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
Michael_S
Огромное спасибо! Я даже и не думал что кто-то откликнется, тем более с дельными советами.
Цитата
Зы. А вообще приято сообщать, что вопрос задан не только здесь. По крайней мере я видел его и на планете: http://www.planetaexcel.ru/forum....D=51346

Извините, я новичок
Цитата
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
Огромное спасибо! Я даже и не думал что кто-то откликнется, тем более с дельными советами.
Цитата
Зы. А вообще приято сообщать, что вопрос задан не только здесь. По крайней мере я видел его и на планете: http://www.planetaexcel.ru/forum....D=51346

Извините, я новичок
Цитата
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]

Автор - Dмитрий
Дата добавления - 22.09.2013 в 14:40
SergeyKorotun Дата: Воскресенье, 22.09.2013, 15:34 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
[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 - Воскресенье, 22.09.2013, 15:41
 
Ответить
Сообщение[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
Дата добавления - 22.09.2013 в 15:34
Michael_S Дата: Воскресенье, 22.09.2013, 16:13 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
У вас трехфазный ток, и может быть либо 3, либо 4, либо 5 жил? или возможны варианты?
 
Ответить
СообщениеУ вас трехфазный ток, и может быть либо 3, либо 4, либо 5 жил? или возможны варианты?

Автор - Michael_S
Дата добавления - 22.09.2013 в 16:13
Michael_S Дата: Воскресенье, 22.09.2013, 16:20 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
 If Cells(23, 5) Like "3х?*" Or Cells(23, 5) Like "3x?*"

можно заменить If Cells(23, 5) Like "3[Х,X,x,х]*"... х разные
 
Ответить
Сообщение
 If Cells(23, 5) Like "3х?*" Or Cells(23, 5) Like "3x?*"

можно заменить If Cells(23, 5) Like "3[Х,X,x,х]*"... х разные

Автор - Michael_S
Дата добавления - 22.09.2013 в 16:20
Dмитрий Дата: Воскресенье, 22.09.2013, 17:42 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
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х16

Автор - Dмитрий
Дата добавления - 22.09.2013 в 17:42
Dмитрий Дата: Воскресенье, 22.09.2013, 17:48 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 9 ±
Замечаний: 40% ±

Excel 2010
Michael_S,
Цитата
If Cells(23, 5) Like "3х?*" Or Cells(23, 5) Like "3x?*"

попробовал, теперь все превосходно работает, я даже и не ожидал. Огромное спасибо!
 
Ответить
СообщениеMichael_S,
Цитата
If Cells(23, 5) Like "3х?*" Or Cells(23, 5) Like "3x?*"

попробовал, теперь все превосходно работает, я даже и не ожидал. Огромное спасибо!

Автор - Dмитрий
Дата добавления - 22.09.2013 в 17:48
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!