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

Вход

Регистрация

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

 

= Мир MS Excel/переменная в цикле не обнуляется - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » переменная в цикле не обнуляется (Макросы/Sub)
переменная в цикле не обнуляется
pernatij4 Дата: Среда, 02.10.2019, 13:22 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Уважаемые форумчане, создал такой код

[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 - Среда, 02.10.2019, 13:44
 
Ответить
СообщениеУважаемые форумчане, создал такой код

[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
Дата добавления - 02.10.2019 в 13:22
китин Дата: Среда, 02.10.2019, 13:40 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 5882
Репутация: 914 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
pernatij4, - Прочитайте Правила форума
- Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума
- Оформите код тегами а не прячьте под спойлер (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщениеpernatij4, - Прочитайте Правила форума
- Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума
- Оформите код тегами а не прячьте под спойлер (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - китин
Дата добавления - 02.10.2019 в 13:40
pernatij4 Дата: Среда, 02.10.2019, 13:46 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
китин, извиняюсь, только у Вас осваиваюсь
 
Ответить
Сообщениекитин, извиняюсь, только у Вас осваиваюсь

Автор - pernatij4
Дата добавления - 02.10.2019 в 13:46
Roman777 Дата: Среда, 02.10.2019, 14:41 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 971
Репутация: 125 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
pernatij4,
А как строка [vba]
Код
в_1 = 1 / м_1 'считаем значение интенсивности восстановления элемента
[/vba]
связана с [vba]
Код
Лист1.Cells(9, 3)
[/vba]?


Много чего не знаю!!!!
 
Ответить
Сообщениеpernatij4,
А как строка [vba]
Код
в_1 = 1 / м_1 'считаем значение интенсивности восстановления элемента
[/vba]
связана с [vba]
Код
Лист1.Cells(9, 3)
[/vba]?

Автор - Roman777
Дата добавления - 02.10.2019 в 14:41
pernatij4 Дата: Среда, 02.10.2019, 14:53 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Roman777, это пытался после того как значение будет использовано превратилось в ноль, как влезла в условие то считается по этой формуле
[vba]
Код
в_1 = 1 / м_1 'считаем значение интенсивности восстановления элемента
[/vba]
 
Ответить
СообщениеRoman777, это пытался после того как значение будет использовано превратилось в ноль, как влезла в условие то считается по этой формуле
[vba]
Код
в_1 = 1 / м_1 'считаем значение интенсивности восстановления элемента
[/vba]

Автор - pernatij4
Дата добавления - 02.10.2019 в 14:53
Roman777 Дата: Среда, 02.10.2019, 15:49 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 971
Репутация: 125 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
тогда становится не ясным эта часть вашего сообщения
хотя в ячейке в_1 = Лист1.Cells(9, 3) значение берется равное 0.

когда вы пишете [vba]
Код
в_1 = 1 / м_1
[/vba], вы должны понимать, что в_1 при любых m_1 <> 0...
Рекомендую вам через клавишу F10 пошагово по макросу пройтись и в View->включить Locals Window. По окошку Locals вы сможете увидеть значения всех переменных на текущем шаге исполнения программы.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Среда, 02.10.2019, 15:49
 
Ответить
Сообщениетогда становится не ясным эта часть вашего сообщения
хотя в ячейке в_1 = Лист1.Cells(9, 3) значение берется равное 0.

когда вы пишете [vba]
Код
в_1 = 1 / м_1
[/vba], вы должны понимать, что в_1 при любых m_1 <> 0...
Рекомендую вам через клавишу F10 пошагово по макросу пройтись и в View->включить Locals Window. По окошку Locals вы сможете увидеть значения всех переменных на текущем шаге исполнения программы.

Автор - Roman777
Дата добавления - 02.10.2019 в 15:49
pernatij4 Дата: Среда, 02.10.2019, 19:53 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Roman777, спасибо, буду дальше продумывать логику и заниматься отладкой
 
Ответить
СообщениеRoman777, спасибо, буду дальше продумывать логику и заниматься отладкой

Автор - pernatij4
Дата добавления - 02.10.2019 в 19:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » переменная в цикле не обнуляется (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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