Обнуление переменнной

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
skleppi
Сообщения: 3
Зарегистрирован: 23 сен 2010, 09:59

Добрый день!

У меня возникла необычная проблема с 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


Самое странное, что я не могу определить, в чем проблема, потому что в режиме отладки значение переменной сохраняется. Но вот если запустить весь код целиком, возникает эта ошибка.
С чем это может быть связано?
Аватара пользователя
mc-black
Сообщения: 250
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

1. Кажется все дело в организации условий таким образом, чтобы не возникало необработанного условия.
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
Например, если Cells(4, c_m) равно нулю, то не выполнится ни одно из двух условий в коде, а следовательно, если на каждом шаге цикла mm_column перед условиями обнуляем (что было бы правильно и логично), то выходит то, что выходит..
На заказ: VBA, Excel mc-black@yandex.ru
skleppi
Сообщения: 3
Зарегистрирован: 23 сен 2010, 09:59

спасибо =)
Ответить