Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Код другого объекта / 19 сообщений из 19, страница 1 из 1
15.03.2010, 22:06
    #36522036
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Здравствуйте.
Запутался, на словах не могу объяснить.
Если нужно дополнение объясню.
...
Рейтинг: 0 / 0
15.03.2010, 22:10
    #36522039
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
segail,

Код событий ComboBox1 в студию.
...
Рейтинг: 0 / 0
15.03.2010, 22:17
    #36522049
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Shocker.Pro,
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex +  1  <= Month(Date) Or ComboBox1.ListIndex =  12  Or Range("R1") < Year(Date) Then
    Dim i As Integer, j#
    For i =  1  To  1000 
        If Cells(i,  27 ).Text = ComboBox1.Text Then 
            If ComboBox1.Text = "Èòîãî" Then ComboBox2.Text = "0" Else ComboBox2.Text = Cells(i,  23 )
            If Cells(i +  32 ,  28 ) =  0  Then j =  0  Else j = Round((Round(Cells(i +  32 ,  6 ),  0 ) / Cells(i +  32 ,  28 )) * - 100 ,  3 )
            If j <  0  Then Range("F4") = "Ïîòåðè 0 %" Else Range("F4") = "Ïîòåðè " & j & " %"
            Module2.Foo
            Range("P1") = ComboBox1.Text 
            Rows("6:455").EntireRow.Hidden = True 
            ActiveWindow.ScrollRow =  3  'Ââåðõ
            Rows(i & ":" & i +  36 ).Hidden = False 
        End If
    Next
Else
    MsgBox "Âûáðàííûé ìåñÿö îïåðåæàåò òåêóùåå ñîáûòèå.", vbInformation, "Èíôîðìàöèîííîå ñîîáùåíèå"
    ComboBox1.Text = Range("P1").Text
End If
End Sub
...
Рейтинг: 0 / 0
15.03.2010, 22:19
    #36522053
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Код: plaintext
If ComboBox1.Text = "Èòîãî" Then ComboBox2.Text = "0" Else ComboBox2.Text = Cells(i,  23 )
...
Рейтинг: 0 / 0
15.03.2010, 22:31
    #36522069
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Shocker.Pro,
Выход есть?
Не удаляя данное условие.
...
Рейтинг: 0 / 0
15.03.2010, 22:35
    #36522075
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
разумеется

Код: plaintext
1.
2.
NonUserChanging = True
If ComboBox1.Text = "Èòîãî" Then ComboBox2.Text = "0" Else ComboBox2.Text = Cells(i,  23 )
NonUserChanging = False

Код: plaintext
1.
2.
3.
Private Sub ComboBox2_Change()

If NonUserChanging Then Exit Sub
...

Соответственно - NonUserChanging переменная в видимости и того и другого обработчика
...
Рейтинг: 0 / 0
15.03.2010, 23:28
    #36522108
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Shocker.Pro,
Что-то я совсем заплутал, для данной переменной необходим модуль что ли?
Затем как у Вас прировнять к True False?
И почему в ComboBox2 она выглядит как условие?
Короче я тут наварочил, не пойму ни чего…
...
Рейтинг: 0 / 0
15.03.2010, 23:44
    #36522127
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
segailЧто-то я совсем заплутал, для данной переменной необходим модуль что ли?

Достаточно определить ее на уровне модуля, где у вас находятся обработчики вышеприведенных событий

segailЗатем как у Вас прировнять к True False?

вопрос не понят

segailИ почему в ComboBox2 она выглядит как условие?

Потому что это условие:
"если событие возникло в тот момент, когда NonUserChanging = True, то есть когда комбобокс меняет не юзер, а ваш код, то покинуть процедуру ComboBox2_Change ничего там не выполняя"
...
Рейтинг: 0 / 0
15.03.2010, 23:56
    #36522137
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Shocker.Pro[quot segail]
Достаточно определить ее на уровне модуля, где у вас находятся обработчики вышеприведенных событий
Код: plaintext
1.
2.
Public Sub NonUserChanging ()
If ComboBox1.Text = "Èòîãî" Then ComboBox2.Text = "0" Else ComboBox2.Text = Cells(i,  23 )
End Sub
Так что ли?
...
Рейтинг: 0 / 0
16.03.2010, 00:01
    #36522143
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
я же писал - NonUserChanging это ПЕРЕМЕННАЯ, а не функция

Код: plaintext
Dim NonUserChanging As Boolean
...
Рейтинг: 0 / 0
16.03.2010, 00:30
    #36522152
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Shocker.Pro,

Закинул в верх листа вроде сработало
Я ее и не посредственно в код вписывал как дополнительную переменную
Код: plaintext
Dim i, NonUserChanging As Integer

Такой вариант не идет?
...
Рейтинг: 0 / 0
16.03.2010, 00:36
    #36522153
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
segailЯ ее и не посредственно в код вписывал как дополнительную переменную

Определение переменной внутри процедуры делает невидимыми переменные более высокого уровня с тем же именем.

Поизуйчайте матчасть по поводу определения, области видимости и типов переменных.
...
Рейтинг: 0 / 0
16.03.2010, 00:41
    #36522155
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Благодарю
...
Рейтинг: 0 / 0
16.03.2010, 00:43
    #36522157
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
segail,

Да чтобы почитать, чтобы без премудростей (по проще)?
...
Рейтинг: 0 / 0
09.04.2010, 21:10
    #36571789
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Здравствуйте. Что-то у меня опять пересекаются два кода ComboBox1 и ComboBox2 (код ComboBox2 изменен)
При выборе значения месяц в ComboBox1 (прошедший месяц или год)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex +  1  <= Month(Date) Or ComboBox1.ListIndex =  12  Or Range("R1") < Year(Date) Then
        Dim i As Integer, j#
        For i =  1  To  1000 
            If Cells(i,  27 ).Text = ComboBox1.Text Then 'Поиск ячейки, по совпвдению текстов
                NonUserChanging = True
                If ComboBox1.Text = "Итого" Then ComboBox2.Text = "0" Else ComboBox2.Text = Cells(i,  23 )
                NonUserChanging = False
                If Cells(i +  32 ,  28 ) =  0  Then j =  0  Else j = Round((Round(Cells(i +  32 ,  6 ),  0 ) / Cells(i +  32 ,  28 )) * - 100 ,  3 )
                If j <  0  Then Range("F4") = "Потери 0 %" Else Range("F4") = "Потери " & j & " %"
                Module2.Foo
                Range("P1") = ComboBox1.Text 'Ввод текста в ячейку (месяц)
                Rows("6:455").EntireRow.Hidden = True 'Скрыть диапазон
                ActiveWindow.ScrollRow =  3  'Вверх
                Rows(i & ":" & i +  36 ).Hidden = False ' Открытие диапазона
            End If
        Next
    Else
        MsgBox "Выбранный месяц опережает текущее событие.", vbInformation, "Информационное сообщение"
        ComboBox1.Text = Range("P1").Text
    End If
End Sub 
Выходит сообщение ComboBox2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub ComboBox2_Change()
    Dim i As Integer
    For i =  1  To  1000 
        If Sheets("Отчет").Cells(i,  27 ).Text = UserForm4.ComboBox1.Text Then
            If ComboBox1.ListIndex +  1  < Month(Date) Or ComboBox1.ListIndex =  12  Or Range("R1") < Year(Date) Then
                If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "При вводе процента потерь, на прошедшую дату, Вы изменяете параметры последовательности учета движения ГСМ. Если за " & UserForm4.ComboBox1 & " месяце производилась инвентаризация, списание, определение процента потерь то эти данные будут полностью удалены." & vbCrLf & "Продолжить ввод данных на выбранную дату?", vbYesNo + vbExclamation, "Информационное сообщение") = vbYes Then
                    Module2.Change
                    Sheets("Отчет").Cells(i,  23 ).Value = CDbl(UserForm4.ComboBox2.Text): Module2.Foo
                End If
            Else
                Module2.Normativ_Потери
            End If
        End If
    Next
End Sub
...
Рейтинг: 0 / 0
09.04.2010, 21:14
    #36571790
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
...
Рейтинг: 0 / 0
09.04.2010, 21:20
    #36571794
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Shocker.Pro,
Да где я только не вставлял данную функцию
Код: plaintext
1.
2.
NonUserChanging = True
'...
NonUserChanging = False
Все равно коды пересекаются…
...
Рейтинг: 0 / 0
09.04.2010, 21:24
    #36571797
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
Потому что не копипастить тупо надо, а попытаться понять сначала, что вам написали. И где вы функцию взяли - это переменная и это я вам уже объяснял. Не пытаясь разобраться, вы проигнорировали часть поста и дальнейшее обсуждение и теперь почему-то удивляетесь, что не работает.
...
Рейтинг: 0 / 0
10.04.2010, 13:04
    #36572202
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код другого объекта
segailsegail,

Да чтобы почитать, чтобы без премудростей (по проще)?Московский комсомолец.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Код другого объекта / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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