powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / при сдвиге месяца, выполнить нужный код.
44 сообщений из 44, показаны все 2 страниц
при сдвиге месяца, выполнить нужный код.
    #36721190
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel 2007 VBA
Здравствуйте.
При определение месяца в условии, выполняется код, начиная с точки отчета a1 (выполняется 12 кодов на каждый месяц), но если выбран февраль, то начиная с точки отчета, выполняются 11 месяцев (позиция 2) происходит сдвиг и а12 выполняется в пустую. Как сделать или создать условие, чтобы выполнялись те позиции которые выпадают на месяца.
Код: 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.
'Позиция 1
If a=1Then 'в условие январь месяц
    a1= 1  'январь
    a2= 2  'февраль
    a3= 3  'март
    a4= 4  'апрель
    a5= 5  'май
    a6= 6  'июнь
    a7= 7  'июль
    a8= 8  'август
    a9= 9  'сентябрь
    a10= 10  'октябрь
    a11= 11  'ноябрь
    a12= 12  'декабрь 
End If
'Позиция 2
If a=2Then 'в условие февраль месяц
    a1= 2  'февраль
    a2= 3  'март
    a3= 4  'апрель
    a4= 5  'май
    a5= 6  'июнь
    a6= 7  'июль
    a7= 8  'август
    a8= 9  'сентябрь
    a9= 10  'октябрь
    a10= 11  'ноябрь
    a11= 12  'декабрь
    a12= 13  'код не выполняется
End If
'Позиция 3
If a=3Then 'в условие март месяц
    a1= 3  'март
    a2= 4  'апрель
    a3= 5  'май
    a4= 6  'июнь
    a5= 7  'июль
    a6= 8  'август
    a7= 9  'сентябрь
    a8= 10  'октябрь
    a9= 11  'ноябрь
    a10= 12  'декабрь
    a11= 13  'код не выполняется
    a12= 14  'код не выполняется
End If
'...
'Позиция 12
If a= 12  Then 'в условие декабрь месяц
    a1= 12  'декабрь
    a2= 13  'код не выполняется
    a3= 14  'код не выполняется
    a4= 15  'код не выполняется
    a5= 16  'код не выполняется
    a6= 17  'код не выполняется
    a7= 18  'код не выполняется
    a8= 19  'код не выполняется
    a9= 20  'код не выполняется
    a10= 21  'код не выполняется
    a11= 22  'код не выполняется
    a12= 23  'код не выполняется
End If
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721254
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segail,

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

В общем, обрисуйте задачу чуть подробнее, возможно удастся сделать проще, чем вы предполагаете...
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721263
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, подождём ответа автора, хотел спросить почти в тему, имеем:
а="сс"
If ..... Then GoTo a
......
......
......
сс:


'насколько я знаю, такой конструкцией нельзя пользоваться, не скажете почему?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721269
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю 'насколько я знаю, такой конструкцией нельзя пользоваться, не скажете почему?
А почему вместо "Ципихович" нельзя написать "Цепехович"?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721274
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segail,

В принципе, если есть 12 абсолютно разных процедур, никак не похожих друг на друга можно поступить примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Switcher (Cnt As Integer)

Select Case Cnt
  Case  1 : Cat
  Case  2 : Dog
  Case  3 : Table
  Case  4 : Chair
  Case  5 : Water
  Case  6 : Book
  Case  7 : Tea
  Case  8 : Printer
  Case  9 : Cassete
  Case  10 : Lamp
  Case  11 : Glass
  Case  12 : Door
End Select

End Sub
Далее, в зависимости от потребностей, устраиваете цикл вызова:
Код: plaintext
1.
2.
For i= 1  to  6 
  Switcher i
Next
соответственно, выполняется часть процедур в определенной последовательности
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721278
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если очень хочется то можно, опять же с условием:

f=.....
w=....
If f=w Then "Цепехович"="Ципихович"
А если серьёзно, то я понял, что ответа который мне будет понятен я не получу.
Спросим по другому, Ваше мнение конструкция вида:
а="сс"
If ..... Then GoTo a
......
......
......
сс:
Имеет право на существование?
Может иметь практическое для программиста?
Я считаю что да
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721282
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в этом столбике:
Cat
Dog
Table
Chair
Water
Book
Tea
Printer
Cassete
Lamp
Glass
Door
Это для примера?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721283
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думал на форуме нет не кого, временно отключался..
Вот код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Sub Test()
    Dim i As Integer
    For i =  1  To  450 
        With Sheets("Отчет")
            If Form_SelectDate.ComboBox_Month = CStr(.Cells(i,  27 ).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i,  27 ).Text) Then 'a*    Form_SelectDate.ComboBox_Month = месяц  или  UserForm4.ComboBox1 = месяц
                ' Удаление данных на выбранный месяц, и ниже следующих м-ц
                .Cells(i +  35 ,  21 ).Value =  0 : .Cells(i,  26 ).Resize( 31 ) = "": .Cells(i,  31 ).Resize( 31 ) = "" 'a*
                .Cells(i +  72 ,  21 ).Value =  0 : .Cells(i +  37 ,  26 ).Resize( 31 ) = "": .Cells(i +  37 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  109 ,  21 ).Value =  0 : .Cells(i +  74 ,  26 ).Resize( 31 ) = "": .Cells(i +  74 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  146 ,  21 ).Value =  0 : .Cells(i +  111 ,  26 ).Resize( 31 ) = "": .Cells(i +  111 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  183 ,  21 ).Value =  0 : .Cells(i +  148 ,  26 ).Resize( 31 ) = "": .Cells(i +  148 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  220 ,  21 ).Value =  0 : .Cells(i +  185 ,  26 ).Resize( 31 ) = "": .Cells(i +  185 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  257 ,  21 ).Value =  0 : .Cells(i +  222 ,  26 ).Resize( 31 ) = "": .Cells(i +  222 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  294 ,  21 ).Value =  0 : .Cells(i +  259 ,  26 ).Resize( 31 ) = "": .Cells(i +  259 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  331 ,  21 ).Value =  0 : .Cells(i +  296 ,  26 ).Resize( 31 ) = "": .Cells(i +  296 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  368 ,  21 ).Value =  0 : .Cells(i +  333 ,  26 ).Resize( 31 ) = "": .Cells(i +  333 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  405 ,  21 ).Value =  0 : .Cells(i +  370 ,  26 ).Resize( 31 ) = "": .Cells(i +  370 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  442 ,  21 ).Value =  0 : .Cells(i +  407 ,  26 ).Resize( 31 ) = "": .Cells(i +  407 ,  31 ).Resize( 31 ) = ""
            End If
        End With
    Next
End Sub
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721296
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailВот код
м-да, кривовато как-то...
ну да чтоб голову вам не морочить - воспользуйтесь моим примером с Case
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721302
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Боле подробно чтобы Вы поняли.
12 строк кода на двенадцать месяцев.
Если, например, по условию выпадает февраль, то первая строка выполняет код февраля, естественно остальные строки выпадают на месяца после февраля, значит 12-я строка выполняет пустое действие, в данном случае необходимо блокировать или запретить выполнение кода 12-ой строки, ну и так далее…
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721304
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Боле подробно чтобы Вы поняли.
12 строк кода на двенадцать месяцев.
Если, например, по условию выпадает февраль, то первая строка выполняет код февраля, естественно остальные строки выпадают на месяца после февраля, значит 12-я строка выполняет пустое действие, в данном случае необходимо блокировать или запретить выполнение кода 12-ой строки, ну и так далее…
ну так я же привел код.
Запускаете цикл от 2 до 12
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721306
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Лады попробую. Спасибо
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721388
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюСпросим по другому, Ваше мнение конструкция вида:
а="сс"
If ..... Then GoTo a
......
......
......
сс:
Имеет право на существование?
Может иметь практическое для программиста?
Я считаю что да

Может иметь.

В принципе, это можно в VB6... точнее, не совсем это, а вызов процедуры по указателю в виде переменной... но кажется этот способ недокументирован, кажется его когда-то давно приводил Antonariy...
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721390
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может Antonariy напомнит?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721393
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProsegailВот код
м-да, кривовато как-то...

Как я понимаю, у вас на листе есть что-то типа календаря, поэтому расстояние в ячейках между двумя месяцами неравномерно и зависит от количества дней.

Если делать по уму - у вас должна быть универсальная функция, вычисляющая (или тупо знающая) по номеру месяца, где он расположен, то есть функция, которая возвращает координаты месяца на листе по его номеру.

Тогда задача, которая требуется сейчас, решается легко и просто. Мало того, легко решается куча других сопутствующих задач (прошлых и будущих), потому что любой вашей процедуре будет все равно, где находится месяц, она получит его координаты из функции.

Ну это по уму....
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721421
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Умышленно сделано равномерно, чтобы не замарачиваться мне.

У меня еще с условием проблема. Одна форма из двух всегда будет закрыта. Я поставил Or (или)
но код глючит, из-за отсутствие одного из ComboBox. Это как то лечится?
If Form_SelectDate.ComboBox_Month = CStr(.Cells(i, 27).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i, 27).Text) Then
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721423
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЦипихович ЭндрюСпросим по другому, Ваше мнение конструкция вида:
а="сс"
If ..... Then GoTo a
......
......
......
сс:
Имеет право на существование?
Может иметь практическое для программиста?
Я считаю что да

Может иметь.

В принципе, это можно в VB6... точнее, не совсем это, а вызов процедуры по указателю в виде переменной... но кажется этот способ недокументирован, кажется его когда-то давно приводил Antonariy...Не то чтобы не документирован, просто гемороен и нафиг не нужен в прикладных программах.
Вызов процедуры "по указателю" можно реализовать с помощью классов CreateObject (progid - переменная) или с помощью CallByName (переменная — название метода).
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721426
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailУмышленно сделано равномерно, чтобы не замарачиваться мне.
не знаю.
в цифрах 35, 72, 109, 146, 183, 220 я равномерности не нашел, иначе предложил бы другой алгоритм.

segailУ меня еще с условием проблема. Одна форма из двух всегда будет закрыта. Я поставил Or (или)
но код глючит, из-за отсутствие одного из ComboBox. Это как то лечится?
If Form_SelectDate.ComboBox_Month = CStr(.Cells(i, 27).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i, 27).Text) Then
Этот код запустит обе формы, вне зависимости о того, что было закрыто. А вопрос я не очень понял.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721429
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
ну как нет количество промежуточных ячеек 37. Или Вы о другом?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721432
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЭтот код запустит обе формы, вне зависимости о того, что было закрыто. А вопрос я не очень понял.
Этот код не запускает форму.
С одной из двух форм будет выполнен код вызванный (например кликом по кнопке) из модуля. Одна из форм всегда будет закрыта.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721433
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
ну как нет количество промежуточных ячеек 37. Или Вы о другом?
О, чёрт, видимо не туда посмотрел. "Признаю себя ослом и жду дальнейших распоряжений" (с)

Тогда мне непонятна вообще вот эта конструкция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
.Cells(i +  35 ,  21 ).Value =  0 : .Cells(i,  26 ).Resize( 31 ) = "": .Cells(i,  31 ).Resize( 31 ) = "" 'a*
.Cells(i +  72 ,  21 ).Value =  0 : .Cells(i +  37 ,  26 ).Resize( 31 ) = "": .Cells(i +  37 ,  31 ).Resize( 31 ) = ""
.Cells(i +  109 ,  21 ).Value =  0 : .Cells(i +  74 ,  26 ).Resize( 31 ) = "": .Cells(i +  74 ,  31 ).Resize( 31 ) = ""
.Cells(i +  146 ,  21 ).Value =  0 : .Cells(i +  111 ,  26 ).Resize( 31 ) = "": .Cells(i +  111 ,  31 ).Resize( 31 ) = ""
.Cells(i +  183 ,  21 ).Value =  0 : .Cells(i +  148 ,  26 ).Resize( 31 ) = "": .Cells(i +  148 ,  31 ).Resize( 31 ) = ""
.Cells(i +  220 ,  21 ).Value =  0 : .Cells(i +  185 ,  26 ).Resize( 31 ) = "": .Cells(i +  185 ,  31 ).Resize( 31 ) = ""
.Cells(i +  257 ,  21 ).Value =  0 : .Cells(i +  222 ,  26 ).Resize( 31 ) = "": .Cells(i +  222 ,  31 ).Resize( 31 ) = ""
.Cells(i +  294 ,  21 ).Value =  0 : .Cells(i +  259 ,  26 ).Resize( 31 ) = "": .Cells(i +  259 ,  31 ).Resize( 31 ) = ""
.Cells(i +  331 ,  21 ).Value =  0 : .Cells(i +  296 ,  26 ).Resize( 31 ) = "": .Cells(i +  296 ,  31 ).Resize( 31 ) = ""
.Cells(i +  368 ,  21 ).Value =  0 : .Cells(i +  333 ,  26 ).Resize( 31 ) = "": .Cells(i +  333 ,  31 ).Resize( 31 ) = ""
.Cells(i +  405 ,  21 ).Value =  0 : .Cells(i +  370 ,  26 ).Resize( 31 ) = "": .Cells(i +  370 ,  31 ).Resize( 31 ) = ""
.Cells(i +  442 ,  21 ).Value =  0 : .Cells(i +  407 ,  26 ).Resize( 31 ) = "": .Cells(i +  407 ,  31 ).Resize( 31 ) = ""
почему она не в цикле сама по себе?
Тогда все, что я советовал, нафиг не нужно. Просто сделать из этого цикл и все. Запускать цикл можно будет с любого по любой месяц по желанию.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721435
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailЭтот код не запускает форму.
Этот код запускает форму, если она не запущена.
Если не верите, поставьте MsgBox в UserForm_Initialize и убедитесь в этом.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721439
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Любой месяц выбирается на форме Form_SelectDate в ComboBox_Month затем клик по кнопке например так.
Код: plaintext
1.
2.
Private Sub CommandButton1_Click()
    Module2.Test
End Sub
и происходит, назовем очищение нужных ячеек. Как должно происходить очищение я говорил выше (на основание условия)
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721441
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721442
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Любой месяц выбирается на форме Form_SelectDate в ComboBox_Month затем клик по кнопке например так.
Код: plaintext
1.
2.
Private Sub CommandButton1_Click()
    Module2.Test
End Sub
и происходит, назовем очищение нужных ячеек. Как должно происходить очищение я говорил выше (на основание условия)
Ну и в чем проблема?
Если выбран апрель, то надо просто устроить цикл от 4 до 12.
В цикле будет одна строчка:
Код: plaintext
.Cells(i +  109 ,  21 ).Value =  0 : .Cells(i +  74 ,  26 ).Resize( 31 ) = "": .Cells(i +  74 ,  31 ).Resize( 31 ) = ""
только вместо конкретных цифр будет выражение на основе переменной цикла.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721443
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Как его устроить та?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721445
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Как его устроить та?
Блин
Код: plaintext
1.
2.
For j= 1  to  12 
  .Cells(i + формула,  21 ).Value =  0 : .Cells(i + формула,  26 ).Resize( 31 ) = "": .Cells(i + формула,  31 ).Resize( 31 ) = ""
Next
формулу, надеюсь, сами сможете сделать
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721450
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Что-то проясняется. Попробую.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721455
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Что-то проясняется. Попробую.

Может сначала почитать учебник в разделе "циклы"?

P.S. Зачем вы 450 раз очищаете почти одни и те же ячейки?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721460
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Да я английский не шарю.
Как одни и те же ячейки. Если идет очищение февраля, то должны очистятся все ячейки последующих месяцев, кроме января. Или я Вас опять не понял?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721463
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВызов процедуры "по указателю" можно реализовать с помощью классов CreateObject (progid - переменная) или с помощью CallByName (переменная — название метода).

CreateObject - ты имеешь ввиду - создать собственный класс и потом создавать его экземпляр?

Но я несколько другое имел ввиду - вроде получали адрес процедуры с помощью Address Of и потом вызывали с помощью какой-то недокументированной функции... Ну может это был и не ты...
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721468
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailДа я английский не шарю.
Учебников достаточно на русском

segailКак одни и те же ячейки. Если идет очищение февраля, то должны очистятся все ячейки последующих месяцев, кроме января. Или я Вас опять не понял?
Возьмем вот этот фрагмент внутри цикла:
Код: plaintext
Cells(i +  148 ,  26 ).Resize( 31 ) = ""
грубо говоря, при первом проходе цикла очищается диапазон "Z149:Z180"
при втором проходе "Z150:Z181"
при третьем проходе "Z151:Z182"
и так 450 раз

То есть отдельно взятая ячейка (скажем, "Z181" будет очищена 31 раз) и так почти каждая (за исключением крайних).
"Первое лезвие бреет чисто, второе еще чище.... 31-е полирует челюсть" (с)
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721472
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Не понял, почему он столько раз очищается…
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721473
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Не понял, почему он столько раз очищается…
Это я не понял, поэтому и задал вам вопрос - "зачем?"
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721476
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Ну как я предполагал до этого, найденный диапазон очищается и на этом все…
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721479
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Pro,
Ну как я предполагал до этого, найденный диапазон очищается и на этом все…
и где же команда, которая обеспечивает "на этом все"?
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721481
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proи где же команда, которая обеспечивает "на этом все"?
Чем дальше в лес, тем больше дров…

Какую литературу можно почитать, как говорят, написано легко для понимания.
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721483
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailShocker.Proи где же команда, которая обеспечивает "на этом все"?
Чем дальше в лес, тем больше дров…
Какую литературу можно почитать, как говорят, написано легко для понимания.
для понимания основ.... в общем-то любую

Конкретных рекомендаций дать не могу, поищите в этой ветке по слову "литература"
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721566
Gray_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
segail
Чем дальше в лес, тем больше дров…
Какую литературу можно почитать, как говорят, написано легко для понимания.
Тут дело даже не в литературе, а в понимании того что вы хотите сделать.
Вот пример:
Ваша процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Sub Test()
    Dim i As Integer
    For i =  1  To  450 
        With Sheets("Отчет")
            If Form_SelectDate.ComboBox_Month = CStr(.Cells(i,  27 ).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i,  27 ).Text) Then 
                ' Удаление данных на выбранный месяц, и ниже следующих м-ц
                .Cells(i +  35 ,  21 ).Value =  0 : .Cells(i,  26 ).Resize( 31 ) = "": .Cells(i,  31 ).Resize( 31 ) = "" 'a*
                .Cells(i +  72 ,  21 ).Value =  0 : .Cells(i +  37 ,  26 ).Resize( 31 ) = "": .Cells(i +  37 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  109 ,  21 ).Value =  0 : .Cells(i +  74 ,  26 ).Resize( 31 ) = "": .Cells(i +  74 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  146 ,  21 ).Value =  0 : .Cells(i +  111 ,  26 ).Resize( 31 ) = "": .Cells(i +  111 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  183 ,  21 ).Value =  0 : .Cells(i +  148 ,  26 ).Resize( 31 ) = "": .Cells(i +  148 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  220 ,  21 ).Value =  0 : .Cells(i +  185 ,  26 ).Resize( 31 ) = "": .Cells(i +  185 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  257 ,  21 ).Value =  0 : .Cells(i +  222 ,  26 ).Resize( 31 ) = "": .Cells(i +  222 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  294 ,  21 ).Value =  0 : .Cells(i +  259 ,  26 ).Resize( 31 ) = "": .Cells(i +  259 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  331 ,  21 ).Value =  0 : .Cells(i +  296 ,  26 ).Resize( 31 ) = "": .Cells(i +  296 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  368 ,  21 ).Value =  0 : .Cells(i +  333 ,  26 ).Resize( 31 ) = "": .Cells(i +  333 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  405 ,  21 ).Value =  0 : .Cells(i +  370 ,  26 ).Resize( 31 ) = "": .Cells(i +  370 ,  31 ).Resize( 31 ) = ""
                .Cells(i +  442 ,  21 ).Value =  0 : .Cells(i +  407 ,  26 ).Resize( 31 ) = "": .Cells(i +  407 ,  31 ).Resize( 31 ) = ""
            End If
        End With
    Next
End Sub

Вот тот-же код но совсем немного подумав:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Sub Test()
    Dim i As Integer
    Dim const as Integer
    const= 0 
    For i =  1  To  450 
        With Sheets("Отчет")
            If Form_SelectDate.ComboBox_Month = CStr(.Cells(i,  27 ).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i,  27 ).Text) Then 
                ' Удаление данных на выбранный месяц, и ниже следующих м-ц
                .Cells(i +  35  + const,  21 ).Value =  0 : .Cells(i + const,  26 ).Resize( 31 ) = "": .Cells(i + const,  31 ).Resize( 31 ) = "" 'a*
                const = const +  37 
            End If
        End With
    Next
End Sub
Найдите 10 отличий в результате...
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721567
Gray_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя главная проблема тут всё-же в этом адском цикле...
Код: plaintext
For i =  1  To  450 
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721570
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gray_Wolf
Найдите 10 отличий в результате...
Я нашел.
Вы забыли внутренний цикл (1-12).
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721571
Gray_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, ошибся, конечно-же процедура будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Sub Test()
    Dim i As Integer
	Dim j As Integer
	Dim const as Integer
    For i =  1  To  450 
	const =  0 
        With Sheets("Отчет")
            If Form_SelectDate.ComboBox_Month = CStr(.Cells(i,  27 ).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i,  27 ).Text) Then 'a*    Form_SelectDate.ComboBox_Month = месяц  или  UserForm4.ComboBox1 = месяц
                ' Удаление данных на выбранный месяц, и ниже следующих м-ц
                For j =  1  to  12 
				.Cells(i +  35  + const,  21 ).Value =  0 : .Cells(i + const,  26 ).Resize( 31 ) = "": .Cells(i + const,  31 ).Resize( 31 ) = "" 'a*
				const = const +  37 
				next j
            End If
        End With
    Next i
End Sub
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721575
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gray_WolfУпс, ошибся, конечно-же процедура будет выглядеть так:
На самом деле, в переменной const нет абсолютно никакой необходимости.
Либо For со Step 37, либо домножать j на 37
...
Рейтинг: 0 / 0
при сдвиге месяца, выполнить нужный код.
    #36721694
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyВызов процедуры "по указателю" можно реализовать с помощью классов CreateObject (progid - переменная) или с помощью CallByName (переменная — название метода).

CreateObject - ты имеешь ввиду - создать собственный класс и потом создавать его экземпляр?

Но я несколько другое имел ввиду - вроде получали адрес процедуры с помощью Address Of и потом вызывали с помощью какой-то недокументированной функции... Ну может это был и не ты...Вполне документированной — CallWindowProc. Просто в VB смысла в этом нет. Какая разница, какой переменной описана функция, long-указателем или sting-названием? Только в сложности вызова.
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / при сдвиге месяца, выполнить нужный код.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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