Добрый день!
У меня возникла необычная проблема с VBA.
Есть переменная mm_column as Integer, которая самопроизвольно обнуляется после завершения цикла. То есть в цикле она получает значение, а потом обнуляется. А мне нужно использовать её дальше.
Фрагмент кода:
В этих двух циклах я определяю номер столбца, где находится значение текущего месяца (и походу вставляю значение в другой файл), мне нужен номер столбца - mm_column:
If Cells(4, c_m).Value <> 0 And Cells(4, n_m).Value = "" Then
total_russia_file.Cells(4, c_m).Copy '<------ MTD Value
scorecard_file.Activate
scorecard_file.Cells(6, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
mm_column = c_m
End If
If Cells(4, c_m) <> 0 And Cells(4, n_m) <> 0 Then
total_russia_file.Cells(4, n_m).Copy '<------ MTD Value
scorecard_file.Activate
scorecard_file.Cells(6, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
mm_column = n_m
End If
А теперь использую номер столбца, где находится значение для текущего месяца, что найти значение для последней заполненной недели, но mm_column уже равен 0 =((
total_russia_file.Activate
If total_russia_file.Cells(4, mm_column - 1).Value <> 0 And total_russia_file.Cells(4, mm_column - 2).Value <> 0 Then
total_russia_file.Cells(4, mm_column - 1).Copy '<-------- WTD Value
scorecard_file.Activate
scorecard_file.Cells(5, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
For c = 4 To mm_column - 1
If total_russia_file.Cells(4, c).Value = 0 And total_russia_file.Cells(4, c - 1).Value <> 0 Then
total_russia_file.Cells(4, c - 1).Copy '<-------- WTD Value
scorecard_file.Activate
scorecard_file.Cells(5, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Exit For
End If
Next c
End If
Самое странное, что я не могу определить, в чем проблема, потому что в режиме отладки значение переменной сохраняется. Но вот если запустить весь код целиком, возникает эта ошибка.
С чем это может быть связано?
Обнуление переменнной
Модератор: Naeel Maqsudov
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
1. Кажется все дело в организации условий таким образом, чтобы не возникало необработанного условия.
2. Обратите внимание на Cells(4, c_m).Value - явным образом не указан лист, с которым работаем, то есть подразумевается активный, а это во втором условии будет либо total_russia_file, либо scorecard_file, либо еще какой-то - в зависимости от первого условия.
3. Точно не знаю задачи, но я бы написал примерно вот так:
Например, если Cells(4, c_m) равно нулю, то не выполнится ни одно из двух условий в коде, а следовательно, если на каждом шаге цикла mm_column перед условиями обнуляем (что было бы правильно и логично), то выходит то, что выходит..
2. Обратите внимание на Cells(4, c_m).Value - явным образом не указан лист, с которым работаем, то есть подразумевается активный, а это во втором условии будет либо total_russia_file, либо scorecard_file, либо еще какой-то - в зависимости от первого условия.
3. Точно не знаю задачи, но я бы написал примерно вот так:
Код: Выделить всё
If total_russia_file.Cells(4, c_m).Value <> 0 And total_russia_file.Cells(4, n_m).Value = "" Then
total_russia_file.Cells(4, c_m).Copy '<------ MTD Value
scorecard_file.Cells(6, 6).PasteSpecial xlPasteValues
mm_column = c_m
Else If total_russia_file.Cells(4, c_m) <> 0 And total_russia_file.Cells(4, n_m) <> 0 Then
total_russia_file.Cells(4, n_m).Copy '<------ MTD Value
scorecard_file.Cells(6, 6).PasteSpecial xlPasteValues
mm_column = n_m
Else ' Здесь действия по необработанной ситуации, которая приводит к ошибке
Debug.Print "Ошибка! Не присваивается mm_column", c_m, n_m
Stop
Exit Sub
End If
На заказ: VBA, Excel mc-black@yandex.ru