d = Sheets(3).Cells(26, 8).Text If d <> 0 Then If d Mod 2 = 0 Then If Sheets(3).Cells(26, 8).Text = d Then Randomize r = Rnd * 10 Sheets(3).Cells(2, 15).Formula = r Application.EnableEvents = False End If End If End If
Application.EnableEvents = True
[/vba]
в перемененной d храниться некоторое значение, которое меняется, начальное его значение - 0 нужно сделать так, что бы как только значение переменной становилось четным - в другой ячейке появлялось рандомно значение от 1 до 10
а у меня получается бесконечный цикл - в нужной ячейке бесконечно перебираются рандомно числа. Что не так я делаю? Помогите пожалуйста! [moder]Оформляйте коды тегами (кнопка #)[/moder]
Здравствуйте! помогите пожалуйста. Есть код:
[vba]
Код
d = Sheets(3).Cells(26, 8).Text If d <> 0 Then If d Mod 2 = 0 Then If Sheets(3).Cells(26, 8).Text = d Then Randomize r = Rnd * 10 Sheets(3).Cells(2, 15).Formula = r Application.EnableEvents = False End If End If End If
Application.EnableEvents = True
[/vba]
в перемененной d храниться некоторое значение, которое меняется, начальное его значение - 0 нужно сделать так, что бы как только значение переменной становилось четным - в другой ячейке появлялось рандомно значение от 1 до 10
а у меня получается бесконечный цикл - в нужной ячейке бесконечно перебираются рандомно числа. Что не так я делаю? Помогите пожалуйста! [moder]Оформляйте коды тегами (кнопка #)[/moder]Nik12
Сообщение отредактировал Pelena - Вторник, 26.05.2015, 20:50
Manyasha, сделала все как написано когда этот отрывок стоял в конце кода - работало, но не совсем правильно программа работала переставила в начало - все равно перебирает случайные цифры код примерно так выглядит: [vba]
Код
d = Sheets(3).Cells(26, 8).Value If d <> 0 Then If d Mod 2 = 0 Then Randomize r = Int(Rnd * 10) + 1 Application.EnableEvents = False Sheets(3).Cells(2, 15).Formula = r Application.EnableEvents = True End If End If
a = Sheets(3).Cells(2, 15).Text
Select Case a Case 1 Sheets(3).Cells(2, 18).Formula = "Â õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ. - 50 èç áþäæåòà." Application.EnableEvents = False
[/vba]
Manyasha, сделала все как написано когда этот отрывок стоял в конце кода - работало, но не совсем правильно программа работала переставила в начало - все равно перебирает случайные цифры код примерно так выглядит: [vba]
Код
d = Sheets(3).Cells(26, 8).Value If d <> 0 Then If d Mod 2 = 0 Then Randomize r = Int(Rnd * 10) + 1 Application.EnableEvents = False Sheets(3).Cells(2, 15).Formula = r Application.EnableEvents = True End If End If
a = Sheets(3).Cells(2, 15).Text
Select Case a Case 1 Sheets(3).Cells(2, 18).Formula = "Â õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ. - 50 èç áþäæåòà." Application.EnableEvents = False
Manyasha, в продолжении кода ничего больше нет, просто еще несколько значений case с такой же конструкцией - и все. Мне нужно что бы каждый раз, когда d получает четное значение в ячейке появлялось случайное число. Сохранять его не надо.
Manyasha, в продолжении кода ничего больше нет, просто еще несколько значений case с такой же конструкцией - и все. Мне нужно что бы каждый раз, когда d получает четное значение в ячейке появлялось случайное число. Сохранять его не надо.Nik12
Sub Nik12() For d = 1 To 10 If d Mod 2 = 0 Then Randomize r = Int(Rnd * 10) + 1 MsgBox ("Случайное число " & r) ' Cells(1, 1) = r Else MsgBox ("d не чётное!") End If Next End Sub
[/vba]
[vba]
Код
Sub Nik12() For d = 1 To 10 If d Mod 2 = 0 Then Randomize r = Int(Rnd * 10) + 1 MsgBox ("Случайное число " & r) ' Cells(1, 1) = r Else MsgBox ("d не чётное!") End If Next End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [h26]) Is Nothing Then d = Cells(26, 8) If d <> 0 And (d And 1) = 0 Then Randomize r = Int(Rnd * 10) + 1 Cells(2, 15).Formula = r End If End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [h26]) Is Nothing Then d = Cells(26, 8) If d <> 0 And (d And 1) = 0 Then Randomize r = Int(Rnd * 10) + 1 Cells(2, 15).Formula = r End If End If End Sub
Manyasha, не срабатывает этот метод в ячейку O2 должно записываться случайное число, когда значение h26 четное код написан в коде страницы то что там написано Sheet 3 - это потому что из другого документа скопировано
Manyasha, не срабатывает этот метод в ячейку O2 должно записываться случайное число, когда значение h26 четное код написан в коде страницы то что там написано Sheet 3 - это потому что из другого документа скопированоNik12
метод срабатывает, если я руками записываю цифру в ячейку H26 и то не совсем так как надо, ну это ерунда и так нормально будет но проблема в том, что в ячейке H26 у меня формула записана - и если значение в ячейке меняется по формуле, то ничего не работает
метод срабатывает, если я руками записываю цифру в ячейку H26 и то не совсем так как надо, ну это ерунда и так нормально будет но проблема в том, что в ячейке H26 у меня формула записана - и если значение в ячейке меняется по формуле, то ничего не работаетNik12
Dim d As Long Private Sub Worksheet_Change(ByVal Target As Range) If Cells(26, 8) <> d Then If Cells(26, 8) <> 0 And (Cells(26, 8) And 1) = 0 Then Randomize r = Int(Rnd * 10) + 1 With Application .EnableEvents = False: Cells(2, 15) = r: .EnableEvents = True End With d = Cells(26, 8) End If End If End Sub
[/vba]
Если значение H26 не меняется (было 2, что-то сделали, стало 2), сл. число не обновится.
Nik12, тогда так:
[vba]
Код
Dim d As Long Private Sub Worksheet_Change(ByVal Target As Range) If Cells(26, 8) <> d Then If Cells(26, 8) <> 0 And (Cells(26, 8) And 1) = 0 Then Randomize r = Int(Rnd * 10) + 1 With Application .EnableEvents = False: Cells(2, 15) = r: .EnableEvents = True End With d = Cells(26, 8) End If End If End Sub
[/vba]
Если значение H26 не меняется (было 2, что-то сделали, стало 2), сл. число не обновится.Manyasha
Manyasha, он перебирает все 10 цифр и останавливается это плохо, потому что в зависимости от полученной случайной цифры, происходит одно из десяти действий а тут получается, что каждый раз как число четным становиться, все события происходят
но хорошо, что уже срабатывает каждый раз когда четное число записывается в ячейку
Manyasha, он перебирает все 10 цифр и останавливается это плохо, потому что в зависимости от полученной случайной цифры, происходит одно из десяти действий а тут получается, что каждый раз как число четным становиться, все события происходят
но хорошо, что уже срабатывает каждый раз когда четное число записывается в ячейкуNik12
перебирает все 10 цифр и останавливается Неправда, код проверила раз 30, ничего не останавливается.
я видимо не правильно выразилась извиняюсь
как только меняется значение в h26 он в ячейке o2 перебирает кучу цифры и в итоге записывает все таки одну. Под событиями подразумевается значения, записанные в case: [vba]
Код
Select Case a Case 1 Sheets(3).Cells(2, 18).Formula = " õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ. - 50 èç áþäæåòà." Application.EnableEvents = False Case 2 Sheets(3).Cells(3, 18).Formula = "Ñèñòåìíûé àäìèíèñòðàòîð ïîëó÷èë ãîä áåñëàòíîãî àíòèâèðóñà Êàñïåðñêèé" Application.EnableEvents = False Sheets(3).Cells(14, 6).Formula = "äà" Case 3 Sheets(3).Cells(4, 18).Formula = "Íà÷àëüíèê íå ïîâûñèë çàðïëàòó ñèñòåìíîìó àäìèíèñòðàòîðó. Óâîëåííûé àäìèí îñòàâèë ïðîãðàììó - 'ïîäàðîê', êîòîðàÿ êîïèðóåò âèðòóëàëüíóþ ìàøèíó ñ áàçîé äàííûõ" Application.EnableEvents = False Sheets(4).Cells(11, 4).Formula = "äà" Case 4 Sheets(3).Cells(5, 18).Formula = "Õàêåð ïîäêóïàåò çíàêîìîãî, ðàáîòàþùåãî â Âàøåé ôèðìå, è òîò çàõîäèò íà ðàñøàðåííûå ðåñóðñû è êîïèðóåò áàçó äàííûõ" Application.EnableEvents = False Sheets(4).Cells(9, 4).Formula = "äà" Case 5 Sheets(3).Cells(6, 18).Formula = "Êîìïàíèÿ-ïðîèçâîäèòåëü DioNIS îáúÿâèëà î ðàçîðåíèè è äåëàåò ñêèäêó 30% íà ñâîþ ïðîäóêöèþ" Application.EnableEvents = False Case 6 Sheets(3).Cells(7, 18).Formula = "Õàêåðñêèå àòàêè ïîääåðæàëà êîìïàíèÿ-êîíêóðåíò. +120 íà ñ÷åò íàïàäåíèÿ." Application.EnableEvents = False Case 7 Sheets(3).Cells(8, 18).Formula = "Íà Âàøè êîìïüþòåðû íåèçâåñòíûì îáðàçîì ïîïàäàåò íîâûé âèðóñ, êîòîðûé ìåíÿåò ñóììû â ïëàòåæêàõ. Îò íîâîãî âèðóñà íåò ñïàñåíèÿ. Âñÿ çàùèòà, óñòàíîâëåííàÿ âî èçáåæàíèè äàííûõ ïðîáëåì, îêàçûâàåòñÿ áåñïîëåçíîé." Application.EnableEvents = False x = Range("G20").Value y = Range("H20").Value Sheets(3).Cells(20, 6).Formula = "íåò" Range("G20").Value = x Range("H20").Value = y Case 8 Sheets(3).Cells(9, 18).Formula = " îôèñ ÈÒ-îòäåëà ïî îøèáêå êóðüåðñêîé ïî÷òîé äîñòàâëÿþò öåëûé ÿùèê ïðîäóêöèè eToken. Êóðüåð íàñòàèâàåò ïðèíÿòü ïîñûëêó, ïîýòîìó âûáîðà íåò" Application.EnableEvents = False Sheets(3).Cells(7, 6).Formula = "äà" Case 9 Sheets(3).Cells(10, 18).Formula = "Æåëàÿ ñýêîíîìèòü íà ðàñõîäàõ íà÷àëüíèê íàíèìàåò îõðàíó ïî îáúÿâëåíèþ, êîòîðàÿ òùàòåëüíî 'îõðàíÿåò' òîëüêî òåëåâèçîð â ïîäñîáêå. Îáúÿâëÿåòñÿ íåäåëÿ áåíàêàçàííîãî ãðàáåæà, âñå âîðû è çëîóìûøëåííèêè ïîëó÷àþò +10 ê âåçåíèþ." Application.EnableEvents = False y = Range("H21").Value Sheets(3).Cells(21, 6).Formula = "íåò" x = Range("D21").Value Range("G21").Value = x Range("H21").Value = y Case 10 Sheets(3).Cells(11, 18).Formula = " êîìïàíèþ íà ïðàêòèêó ïðèõîäèò ìîëîäîé ñïåöèàëèñò ïî àíàëèçó ÈÁ. Çà ÷èñòî ñèìâîëè÷åñêîå âîçíàãðàæäåíèå îí ãîòîâ ïîìî÷ü âûñòðîèòü ãðàììîòíóþ ñèñòåìó ÈÁ." Application.EnableEvents = False If Range("F25").Value = "íåò" Then Sheets(3).Cells(25, 6).Formula = "äà" Sheets(3).Cells(25, 8).Formula = 0 Sheets(3).Cells(25, 4).Formula = 90 End If End Select
[/vba]
получается что он в ячейке о2 перебрал все 10 цифр, а на каждую цифру у меня срабатывает какое то действие
а должно быть только одно событие на одно четное значение в ячейке h26
перебирает все 10 цифр и останавливается Неправда, код проверила раз 30, ничего не останавливается.
я видимо не правильно выразилась извиняюсь
как только меняется значение в h26 он в ячейке o2 перебирает кучу цифры и в итоге записывает все таки одну. Под событиями подразумевается значения, записанные в case: [vba]
Код
Select Case a Case 1 Sheets(3).Cells(2, 18).Formula = " õîäå ïîæàðà, âèíîâíèêà êîòîðîãî òàê è íå íàøëè, ïîëíîñòüþ ñãîðàåò âñÿ ñåðâåðíàÿ. - 50 èç áþäæåòà." Application.EnableEvents = False Case 2 Sheets(3).Cells(3, 18).Formula = "Ñèñòåìíûé àäìèíèñòðàòîð ïîëó÷èë ãîä áåñëàòíîãî àíòèâèðóñà Êàñïåðñêèé" Application.EnableEvents = False Sheets(3).Cells(14, 6).Formula = "äà" Case 3 Sheets(3).Cells(4, 18).Formula = "Íà÷àëüíèê íå ïîâûñèë çàðïëàòó ñèñòåìíîìó àäìèíèñòðàòîðó. Óâîëåííûé àäìèí îñòàâèë ïðîãðàììó - 'ïîäàðîê', êîòîðàÿ êîïèðóåò âèðòóëàëüíóþ ìàøèíó ñ áàçîé äàííûõ" Application.EnableEvents = False Sheets(4).Cells(11, 4).Formula = "äà" Case 4 Sheets(3).Cells(5, 18).Formula = "Õàêåð ïîäêóïàåò çíàêîìîãî, ðàáîòàþùåãî â Âàøåé ôèðìå, è òîò çàõîäèò íà ðàñøàðåííûå ðåñóðñû è êîïèðóåò áàçó äàííûõ" Application.EnableEvents = False Sheets(4).Cells(9, 4).Formula = "äà" Case 5 Sheets(3).Cells(6, 18).Formula = "Êîìïàíèÿ-ïðîèçâîäèòåëü DioNIS îáúÿâèëà î ðàçîðåíèè è äåëàåò ñêèäêó 30% íà ñâîþ ïðîäóêöèþ" Application.EnableEvents = False Case 6 Sheets(3).Cells(7, 18).Formula = "Õàêåðñêèå àòàêè ïîääåðæàëà êîìïàíèÿ-êîíêóðåíò. +120 íà ñ÷åò íàïàäåíèÿ." Application.EnableEvents = False Case 7 Sheets(3).Cells(8, 18).Formula = "Íà Âàøè êîìïüþòåðû íåèçâåñòíûì îáðàçîì ïîïàäàåò íîâûé âèðóñ, êîòîðûé ìåíÿåò ñóììû â ïëàòåæêàõ. Îò íîâîãî âèðóñà íåò ñïàñåíèÿ. Âñÿ çàùèòà, óñòàíîâëåííàÿ âî èçáåæàíèè äàííûõ ïðîáëåì, îêàçûâàåòñÿ áåñïîëåçíîé." Application.EnableEvents = False x = Range("G20").Value y = Range("H20").Value Sheets(3).Cells(20, 6).Formula = "íåò" Range("G20").Value = x Range("H20").Value = y Case 8 Sheets(3).Cells(9, 18).Formula = " îôèñ ÈÒ-îòäåëà ïî îøèáêå êóðüåðñêîé ïî÷òîé äîñòàâëÿþò öåëûé ÿùèê ïðîäóêöèè eToken. Êóðüåð íàñòàèâàåò ïðèíÿòü ïîñûëêó, ïîýòîìó âûáîðà íåò" Application.EnableEvents = False Sheets(3).Cells(7, 6).Formula = "äà" Case 9 Sheets(3).Cells(10, 18).Formula = "Æåëàÿ ñýêîíîìèòü íà ðàñõîäàõ íà÷àëüíèê íàíèìàåò îõðàíó ïî îáúÿâëåíèþ, êîòîðàÿ òùàòåëüíî 'îõðàíÿåò' òîëüêî òåëåâèçîð â ïîäñîáêå. Îáúÿâëÿåòñÿ íåäåëÿ áåíàêàçàííîãî ãðàáåæà, âñå âîðû è çëîóìûøëåííèêè ïîëó÷àþò +10 ê âåçåíèþ." Application.EnableEvents = False y = Range("H21").Value Sheets(3).Cells(21, 6).Formula = "íåò" x = Range("D21").Value Range("G21").Value = x Range("H21").Value = y Case 10 Sheets(3).Cells(11, 18).Formula = " êîìïàíèþ íà ïðàêòèêó ïðèõîäèò ìîëîäîé ñïåöèàëèñò ïî àíàëèçó ÈÁ. Çà ÷èñòî ñèìâîëè÷åñêîå âîçíàãðàæäåíèå îí ãîòîâ ïîìî÷ü âûñòðîèòü ãðàììîòíóþ ñèñòåìó ÈÁ." Application.EnableEvents = False If Range("F25").Value = "íåò" Then Sheets(3).Cells(25, 6).Formula = "äà" Sheets(3).Cells(25, 8).Formula = 0 Sheets(3).Cells(25, 4).Formula = 90 End If End Select
[/vba]
получается что он в ячейке о2 перебрал все 10 цифр, а на каждую цифру у меня срабатывает какое то действие
а должно быть только одно событие на одно четное значение в ячейке h26Nik12
Nik12, я в последнем сообщении показала Вам на примере функции dop_macro(не очень удачное название, ну не суть) куда правильно пихать код, который должен будет работать с полученным рандомным r. Не важно, вызовите Вы свой макрос по аналогии или запихнете все его содержимое в место вызова функции. Вместо строчки dop_macro r в моем коде вставьте свой код.
Если не понятно Цитата Manyasha, 26.05.2015 в 22:30, в сообщении № 6 Покажите полный текст макроса в файле
Если Вы все сделали правильно, но блок с селектами все равно работает не правильно, создавайте новую тему и спрашивайте уже конкретно про оператор Select...Case. [p.s.]Чтобы код копировался нормально, без "сломанной" кодировки, перед копированием переведите раскладку на ПК на русскую.[/p.s.]
Nik12, я в последнем сообщении показала Вам на примере функции dop_macro(не очень удачное название, ну не суть) куда правильно пихать код, который должен будет работать с полученным рандомным r. Не важно, вызовите Вы свой макрос по аналогии или запихнете все его содержимое в место вызова функции. Вместо строчки dop_macro r в моем коде вставьте свой код.
Если не понятно Цитата Manyasha, 26.05.2015 в 22:30, в сообщении № 6 Покажите полный текст макроса в файле
Если Вы все сделали правильно, но блок с селектами все равно работает не правильно, создавайте новую тему и спрашивайте уже конкретно про оператор Select...Case. [p.s.]Чтобы код копировался нормально, без "сломанной" кодировки, перед копированием переведите раскладку на ПК на русскую.[/p.s.]Manyasha
В ячейке H26 - "левая" формула (замените на свою) просто, чтобы воспроизвести вашу ситуацию... Меняйте числа в диапазоне H2:H25, и как только значение H26 станет четным - в ячейку O2 запишется случайное число и будет выполнено одно из 10 ваших "событий" (результаты действий "событий" запишутся на листы 3 и 4.) [p.s.]"кракозябры" - скопировал из вашего поста[/p.s.]
[p.s.]просто, ваши путаные объяснения оч. сложно понять, и как результат - куча предложенных вам ПРАВИЛЬНЫХ вариантов, ни один из которых вас не устраивает... если не устроит и этот, то напишите прямо по шагам: делаю "так" - хочу получить "это", делаю "эдак" - хочу получить "вот это". а то может просто случится так, что терпение у помогающих вам закончится быстрее, чем будет предложен устраивающий вас вариант [/p.s.]
В ячейке H26 - "левая" формула (замените на свою) просто, чтобы воспроизвести вашу ситуацию... Меняйте числа в диапазоне H2:H25, и как только значение H26 станет четным - в ячейку O2 запишется случайное число и будет выполнено одно из 10 ваших "событий" (результаты действий "событий" запишутся на листы 3 и 4.) [p.s.]"кракозябры" - скопировал из вашего поста[/p.s.]
[p.s.]просто, ваши путаные объяснения оч. сложно понять, и как результат - куча предложенных вам ПРАВИЛЬНЫХ вариантов, ни один из которых вас не устраивает... если не устроит и этот, то напишите прямо по шагам: делаю "так" - хочу получить "это", делаю "эдак" - хочу получить "вот это". а то может просто случится так, что терпение у помогающих вам закончится быстрее, чем будет предложен устраивающий вас вариант [/p.s.]KSV