powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Самопроизвольное обнуление переменной
18 сообщений из 18, страница 1 из 1
Самопроизвольное обнуление переменной
    #37083386
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!

Столкнулась с очень странной проблемой при создании vba-кода:

Есть переменная (mm_column as Integer), которая должна получить значение в ходе выполнения конструкции If... Then... И при выполнении условия переменная получает значение, но после End If самопроизвольно обнуляется. А мне нужно использовать её дальше.

Фрагмент кода:

В этих двух циклах переменная mm_column и получает значение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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


Но при попытке использовать её дальше:

Код: plaintext
1.
2.
3.
4.
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

выдается ошибка, из-за того, что теперь переменная = 0

Проблема странная потому, что в режиме отладки значение переменной сохраняется. Но вот если запустить весь код целиком, возникает эта ошибка.

С чем это может быть связано?
Заранее спасибо!!!
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083400
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему у вас не срабатывает ни одно из условий
Код: plaintext
1.
If Cells( 4 , c_m).Value <>  0  And Cells( 4 , n_m).Value = ""
If Cells( 4 , c_m) <>  0  And Cells( 4 , n_m) <>  0  Then

И вас некорректно прописаны условия
Где то с Value, где-то с проверка на "", потом на 0.
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083420
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-duke,

если несколько подпрограмм-- причина может быть в месте объявления переменной или не объявления
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083431
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

Когда смотрю в режиме отладки, условия срабатывают. Просто в моей ситуации всегда одно из условий должно сработать.
Но может Вы правы, и надо корректнее описать условия.

ПЕНСИОНЕРКА,

подпрограмм нет, а переменные объявляю в самом начале.
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083438
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppi,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
If Cells( 4 , c_m).Value <>  0  And Cells( 4 , n_m).Value = "" Then
......
mm_column = c_m
End If


If Cells( 4 , c_m) <>  0  And Cells( 4 , n_m) <>  0  Then
.....
mm_column = n_m
End If
if mm_column= 0  then
debug.print  Cells( 4 , c_m).Value , Cells( 4 , n_m).Value,.......


mm_column= 1    '''остановка для debug
endif
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083614
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,

так и сделала,

значения c_m, n_m отобразились правильно,
с Cells(4, c_m).Value и Cells(4, n_m).Value возникли проблемы, Cells(4, n_m).Value приняло значение пусто о_О
mm_column снова 0,
потом 1, после команды mm_column = 1
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083630
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppi,

где у вас определены c_m, n_m.
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083635
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppi,

и их пределы изменения ( до 32000б, до 65000, больше)
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083654
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppi,

давайте-ка весь код.
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083655
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,

переменные c_m, n_m определила в начале кода как Integer
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083673
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skleppi,

Весь код огромен. То, что имеет с отношение к mm_column:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
Sub Report()

Dim aproducts_stroka, bproducts_stroka, cproducts_stroka, i, stroka_total, stolbec_data1, stolbec_data2, stolbec_data3, stroka_indirect, stroka_KA As Long
Dim otkr_file, scorecard, otkr_order, Flash_report As String
Dim iLastRow, sum, start, z, g, obana As Integer
Dim total_russia_file, scorecard_file, Flash_report_file, Flash_report_KA, Flash_report_Channel As Object
Dim data1_scorecard, data2_scorecard, data3_scorecard, data1_total_russia, data2_total_russia, data3_total_russia As Date
Dim Total_actimel_stroka, Total_Activia_stroka, Total_Rastishka_stroka, Total_Danissimo_stroka, Total_Danakor_stroka, Total_Kinder_stroka, Total_Danone_stroka As Integer
Dim today As Date
Dim c_m, n_m, mm_column As Integer


'========= WTD & MTD & YTD

total_russia_file.Activate

today = Date
Select Case Month(today)

Case Is =  1 
mm = "Jan"
next_mm = "Feb"
Case Is =  2 
mm = "Feb"
next_mm = "Mar"
Case Is =  3 
mm = "Mar"
next_mm = "Apr"
Case Is =  4 
mm = "Apr"
next_mm = "May"
Case Is =  5 
mm = "May"
next_mm = "June"
Case Is =  6 
mm = "June"
next_mm = "July"
Case Is =  7 
mm = "July"
next_mm = "Aug"
Case Is =  8 
mm = "Aug"
next_mm = "Sep"
Case Is =  9 
mm = "Sep"
next_mm = "Oct"
Case Is =  10 
mm = "Oct"
next_mm = "Nov"
Case Is =  11 
mm = "Nov"
next_mm = "Dec"
Case Is =  12 
mm = "Dec"
next_mm = "Jan"
End Select


scorecard = Application.ActiveWorkbook.Name
        otkr_file = Application.GetOpenFilename(Title:="Open Report")
        If otkr_file = "False" Then Exit Sub
        Workbooks.Open Filename:=otkr_file
        total_russia = Application.ActiveWorkbook.Name
ActiveWorkbook.Sheets("Sheet_2").Select

Application.ScreenUpdating = False

Set total_russia_file = Workbooks(total_russia).Worksheets("Sheet_1")
Set scorecard_file = Workbooks(scorecard).Worksheets("Scorecard")

Application.ScreenUpdating = False
scorecard_file.Activate

'====== UNMERGE CELLS
Range("F4:G4").Select
Selection.UnMerge
Range("F5:G5").Select
Selection.UnMerge
Range("F6:G6").Select
Selection.UnMerge
Range("F7:G7").Select
Selection.UnMerge
             
'===================== Paste YTD =================
total_russia_file.Cells( 4 ,  68 ).Copy    '<------ YTD Value
    scorecard_file.Activate

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    scorecard_file.Cells( 7 ,  6 ).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
Set total_russia_file = Workbooks(total_russia).Worksheets("Sheet_1")
Set scorecard_file = Workbooks(scorecard).Worksheets("Scorecard")


'===================== Paste MTD =================
For c_m =  1  To  80 
If total_russia_file.Cells( 1 , c_m).Value = mm Then
current_month = c_m '<---- where the current month value is
Exit For
End If
Next

For n_m =  1  To  80 
If total_russia_file.Cells( 1 , n_m).Value = next_mm Then
next_month = n_m '<---- where the next month value is
Exit For
End If
Next


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
        


 '===================== Paste WTD =================
   
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

'====== MERGE CELLS
Range("F4:G4").Select
Selection.Merge
Range("F5:G5").Select
Selection.Merge
Range("F6:G6").Select
Selection.Merge
Range("F7:G7").Select
Selection.Merge
             
'=====================
  
      Application.DisplayAlerts = False
      Workbooks(total_russia).Activate
      ActiveWorkbook.Close SaveChanges:=False
      Windows(scorecard).Activate
      
Application.ScreenUpdating = True

End Sub
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083683
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как отредактировать своё сообщение?
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37083825
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppi,

никак
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37084170
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

спасибо всем за помощь!
воспользовалась советом big-duke и исправила условия циклов, чтобы они были более определенными.
Теперь проблема исчезла.

Thanks!
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37084304
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppiПЕНСИОНЕРКА,

переменные c_m, n_m определила в начале кода как Integer

Integer это 32000, а сколько у вас строк в таблице
Код: plaintext
 Cells( 4 , n_m)
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37084558
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,

это для столбцов, их только 256 =)
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37084563
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skleppi,

на будущее - лучше использовать Long.
...
Рейтинг: 0 / 0
Самопроизвольное обнуление переменной
    #37135128
skleppi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

спасибо =)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Самопроизвольное обнуление переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]