Private Sub CommandButton1_Click() Dim iTimer As Single iTimer = Timer Dim n_1_1 Dim в_1, Водовод1, лямда_1, k, x, м_1 As Double ' наработка для каждого элемента n n_1_1 = 0 ' берем значения интенсивности отказов лямда_1 = Лист1.Cells(3, 4) лямда_2 = Лист1.Cells(6, 4) ' берем значения интенсивности восстановления м_1 = Лист1.Cells(3, 5) For T = 1 To 87600 Worksheets("ИсхДан").Cells(9 + T, 6).Value = T 'вывод значения времени в ячейку Next T в_1 = Лист1.Cells(9, 3) Randomize For T = 1 To 87600 в_1 = Лист1.Cells(9, 3) Водовод1 = Rnd(1) Worksheets("ИсхДан").Cells(9 + T, 12).Value = Водовод1 'вывод значения рандомного числа в ячейку ' отказ водовода 1-1 If Водовод1 < лямда_1 * n_1_1 Then в_1 = 1 / м_1 'считаем значение интенсивности восстановления элемента k = Лист1.Cells(9 + T, 6) For x = k To (k + в_1) Worksheets("ИсхДан").Cells(9 + x, 7).Value = 0: Cells(9 + x, 7).Interior.Color = RGB(255, 137, 137) 'вывод значения наработки элемента системы n_1_1 в конкретное время Next x GoTo 100 End If n_1_1 = n_1_1 + 1 Worksheets("ИсхДан").Cells(9 + T + в_1, 7).Value = n_1_1 'вывод значения наработки элемента системы n_1_1 в конкретное время 100 Next T MsgBox "Время выполнения макроса " & Format((Timer - iTimer) / 86400, "Long Time"), vbExclamation, "" End Sub
[/vba]
так при срабатывания условия If Водовод1 < лямда_1 * n_1_1 Then то первый раз значения нормальные, то при последующем срабатывании условия значение в_1 не обнуляется, хотя в ячейке в_1 = Лист1.Cells(9, 3) значение берется равное 0.
Огромное спасибо за внимание.
Уважаемые форумчане, создал такой код
[vba]
Код
Private Sub CommandButton1_Click() Dim iTimer As Single iTimer = Timer Dim n_1_1 Dim в_1, Водовод1, лямда_1, k, x, м_1 As Double ' наработка для каждого элемента n n_1_1 = 0 ' берем значения интенсивности отказов лямда_1 = Лист1.Cells(3, 4) лямда_2 = Лист1.Cells(6, 4) ' берем значения интенсивности восстановления м_1 = Лист1.Cells(3, 5) For T = 1 To 87600 Worksheets("ИсхДан").Cells(9 + T, 6).Value = T 'вывод значения времени в ячейку Next T в_1 = Лист1.Cells(9, 3) Randomize For T = 1 To 87600 в_1 = Лист1.Cells(9, 3) Водовод1 = Rnd(1) Worksheets("ИсхДан").Cells(9 + T, 12).Value = Водовод1 'вывод значения рандомного числа в ячейку ' отказ водовода 1-1 If Водовод1 < лямда_1 * n_1_1 Then в_1 = 1 / м_1 'считаем значение интенсивности восстановления элемента k = Лист1.Cells(9 + T, 6) For x = k To (k + в_1) Worksheets("ИсхДан").Cells(9 + x, 7).Value = 0: Cells(9 + x, 7).Interior.Color = RGB(255, 137, 137) 'вывод значения наработки элемента системы n_1_1 в конкретное время Next x GoTo 100 End If n_1_1 = n_1_1 + 1 Worksheets("ИсхДан").Cells(9 + T + в_1, 7).Value = n_1_1 'вывод значения наработки элемента системы n_1_1 в конкретное время 100 Next T MsgBox "Время выполнения макроса " & Format((Timer - iTimer) / 86400, "Long Time"), vbExclamation, "" End Sub
[/vba]
так при срабатывания условия If Водовод1 < лямда_1 * n_1_1 Then то первый раз значения нормальные, то при последующем срабатывании условия значение в_1 не обнуляется, хотя в ячейке в_1 = Лист1.Cells(9, 3) значение берется равное 0.
pernatij4, - Прочитайте Правила форума - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума - Оформите код тегами а не прячьте под спойлер (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)
pernatij4, - Прочитайте Правила форума - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума - Оформите код тегами а не прячьте под спойлер (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
хотя в ячейке в_1 = Лист1.Cells(9, 3) значение берется равное 0.
когда вы пишете [vba]
Код
в_1 = 1 / м_1
[/vba], вы должны понимать, что в_1 при любых m_1 <> 0... Рекомендую вам через клавишу F10 пошагово по макросу пройтись и в View->включить Locals Window. По окошку Locals вы сможете увидеть значения всех переменных на текущем шаге исполнения программы.
тогда становится не ясным эта часть вашего сообщения
хотя в ячейке в_1 = Лист1.Cells(9, 3) значение берется равное 0.
когда вы пишете [vba]
Код
в_1 = 1 / м_1
[/vba], вы должны понимать, что в_1 при любых m_1 <> 0... Рекомендую вам через клавишу F10 пошагово по макросу пройтись и в View->включить Locals Window. По окошку Locals вы сможете увидеть значения всех переменных на текущем шаге исполнения программы.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Среда, 02.10.2019, 15:49