Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Цикл в цикле или как? / 14 сообщений из 14, страница 1 из 1
11.11.2007, 18:42:49
    #34930859
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
Добрый день.
Есть таблица в которой много столбцов вперемешку от цех 1 до цех 20.
Пытаюсь макросом найти столбцы с Цех 1 и Цех2 и скопировать на второй лист.
Но нижеприведенный макрос ПОСЛЕДОВАТЕЛЬНО выбирает сначало столбцы с Цех1 и потом только столбцы с Цех2. А мне необходимо что бы на листе2 были только столбцы с цех1 и цех2, но в той же последовательности что и в исходном листе1.
Код: 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.
 Set videlenCEH1 = Range(Cells( 1 ,  1 ), Cells( 20 ,  100 )).Find(What:="CEH1", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False)
    If Not videlenCEH1 Is Nothing Then
    firstAddressCEH1 = videlenCEH1.Address
         Do
            strCEH1 = videlenCEH1.Row
            idCEH1 = videlenCEH1.Column
            Range(Cells( 1 , idCEH1), Cells( 50 , idCEH1)).Select
            Selection.Copy
            Sheets("sheet2").Select
            Cells( 1 , yach).Select
            ActiveSheet.Paste
            Sheets("sheet1").Select
            yach = yach +  1 
            schCEH1 = schCEH1 +  1 
         Set videlenCEH1 = Range(Cells( 1 ,  1 ), Cells( 20 ,  100 )).FindNext(videlenCEH1)
         Loop While videlenCEH1.Address <> firstAddressCEH1
    End If
    Set videlenCEH2 = Range(Cells( 2 ,  1 ), Cells( 20 ,  100 )).Find(What:="CEH2", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False)
                If Not videlenCEH2 Is Nothing Then
                firstAddressCEH2 = videlenCEH2.Address
                Do
                    strCEH2 = videlenCEH2.Row
                    idCEH2 = videlenCEH2.Column
                    Range(Cells( 1 , idCEH2), Cells( 50 , idCEH2)).Select
                    Selection.Copy
                    Sheets("sheet2").Select
                    Cells( 1 , yach).Select
                    ActiveSheet.Paste
                    Sheets("sheet1").Select
                    yach = yach +  1 
                    schCEH2 = schCEH2 +  1 
                Set videlenCEH2 = Range(Cells( 2 ,  1 ), Cells( 20 , PravStPaketn)).FindNext(videlenCEH2)
            Loop While videlenCEH2.Address <> firstAddressCEH2
    End If
End Sub
Не могу сообразить.Как?
Спасибо.
...
Рейтинг: 0 / 0
12.11.2007, 14:03:30
    #34932227
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
Ну действительно, есть таблица

I Цех1 I Цех6 I Цех3 I Цех2 I Цех1 I Цех1 I Цех2 I Цех4 I Цех4 I Цех1 I

Мне нужно выбрать Цех1 и Цех2

С помощью макроса я могу выбрать так (сначала столбцы с Цех1, потом с Цех2)

I Цех1 I Цех1 I Цех1 I Цех1 I Цех2 I Цех2 I

или вставив нижний цикл внутрь верхнего

I Цех1 I Цех2 I Цех2 I Цех1 I ...

А мне нужно

I Цех1 I Цех2 I Цех1 I Цех1 I Цех2 I Цех1 I

Никто не поможет?
Спасибо.
...
Рейтинг: 0 / 0
12.11.2007, 18:45:33
    #34933517
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
Ну что ты зациклился на этом Find??? От нее не всегда есть толк.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
sub a()
   dim c as range, colToCopy as range
   for each c in sheets("Sheet1").Range(Cells( 1 ,  1 ), Cells( 20 ,  100 ))  ' почему правый нижний угол 20??? У тебя заголовки столбцов могут быть на разном уровне?
        if c.Text = "CEH1" or c.Text = "CEH2" then
            set colToCopy = c.EntireColumn
            colToCopy.Copy Destination:=sheets("Sheet2").Range("A1").End(xlRight).Offest( 0 , 1 )
        end if
    next
end sub
И все.
НЕ ИСПОЛЬЗУЙ SELECTION
...
Рейтинг: 0 / 0
12.11.2007, 21:19:35
    #34933741
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
Макрос останавливается на строке
Код: plaintext
colToCopy.Copy Destination:=sheets("Sheet2").Range("A1").End(xlRight).Offest( 0 , 1 ) 
Может кто нибудь знает ссылки, где есть объяснения на РУССКОМ таких вещей как

Destination
EntireColumn
End(xlRight)
Offest(0,1)

стандартные самоучители не углубляются настолько ,а хелп только английский (даже в Ехеле 97)
Или где можно скачать русский хелп?
Обидно ходить вокруг да около из за незнания методов и свойств.
White Owl... У тебя заголовки столбцов могут быть на разном уровне?...
Да, потому что это не заголовки а текст в шапке таблицы, а действительные названия заголовков будут присвоены позже.
Спасибо.
...
Рейтинг: 0 / 0
12.11.2007, 21:33:42
    #34933753
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
vad-anatolijМакрос останавливается на строке
Код: plaintext
colToCopy.Copy Destination:=sheets("Sheet2").Range("A1").End(xlRight).Offest( 0 , 1 ) 
Останавливается, потому что Offset должно быть. На опечатки макрос не проверялся :)

vad-anatolijстандартные самоучители не углубляются настолько ,а хелп только английский (даже в Ехеле 97)
Или где можно скачать русский хелп?Проще выучить английский.

vad-anatolij White Owl... У тебя заголовки столбцов могут быть на разном уровне?...
Да, потому что это не заголовки а текст в шапке таблицы, а действительные названия заголовков будут присвоены позже.эээээ.... как-то это.... некузяво.
...
Рейтинг: 0 / 0
12.11.2007, 23:55:46
    #34933868
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
White Owl.... как-то это.... некузяво.

А что сдесь ...гм...противоестественного))...когда я пытаюсь автоматизировать процесс определения столбцов по шапке таблицы и уже ПОСЛЕ определения присвоить им нормальные названия?))...Вручную если делать, так не стоит тогда с макросами связываться..Другое дело что я делаю, возможно, не через главный вход..так это от незнания...
...
Рейтинг: 0 / 0
13.11.2007, 00:27:21
    #34933894
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
vad-anatolijА что сдесь ...гм...противоестественного))...когда я пытаюсь автоматизировать процесс определения столбцов по шапке таблицы и уже ПОСЛЕ определения присвоить им нормальные названия?))...Вручную если делать, так не стоит тогда с макросами связываться..Другое дело что я делаю, возможно, не через главный вход..так это от незнания...
Ну хорошо, а что ты будешь делать вот например с такой таблицей?
Column AColumn BColumn CColumn DCEH1CEH3CEH2abcdCEH2eCEH1йцВот нарисует тебе юзер такую шапку и что ты делать будешь? И хорошо если юзер будет свои цеха CEH1, CEH2 называть... А вдруг кто-нибудь шибко умный сделает Ceh4 или Ceh 5? Или уж "Цех 45"?
...
Рейтинг: 0 / 0
13.11.2007, 05:55:25
    #34933989
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
White Owl ...а что ты будешь делать вот например с такой таблицей?...
Так в том то и дело, что шапка у таблицы может незначительно меняться раз в год. Существует стандарт ее, который пересматривается раз в год. Поэтому то и пытаюсь автоматизировать макросом. Раз в год внести изменения в макрос, это ж не трудно)).
...
Рейтинг: 0 / 0
13.11.2007, 14:58:12
    #34935565
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
White Owl ...потому что Offset должно быть. На опечатки макрос не проверялся ...

После исправления опечатки все равно выдает ошибку 1004.
В чем может быть дело?
Спасибо.
...
Рейтинг: 0 / 0
13.11.2007, 16:05:28
    #34935895
Pavel55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
надо писать

Код: plaintext
colToCopy.Copy Destination:=Sheets("Sheet2").Range("IV1").End(xlToLeft).Offset( 0 ,  1 )
...
Рейтинг: 0 / 0
13.11.2007, 18:47:55
    #34936521
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
vad-anatolij White Owl ...потому что Offset должно быть. На опечатки макрос не проверялся ...

После исправления опечатки все равно выдает ошибку 1004.
В чем может быть дело?
Спасибо.А ты пошагово макрос запускать умеешь? А резать его?
Пробуй разрезать все строки в макросе на составляющие и смотреть что каждая составляющая тебе даст.
Код: 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.
sub a()
   dim c as range, colToCopy as range

   ' убедись что проверяемая шапка та которую ты хочешь
   debug.print "source header = "  & sheets("Sheet1").Range(Cells( 1 ,  1 ), Cells( 20 ,  100 )).address

   for each c in sheets("Sheet1").Range(Cells( 1 ,  1 ), Cells( 20 ,  100 ))

        ' смотри какая исходная ячейка на каждом шаге проверяется
        debug.print "c.Address = "  & c.Address
        if c.Text = "CEH1" or c.Text = "CEH2" then

            ' смотри какую колонку мы будем копировать
            debug.print "c.EntireColumn.Address = "  & c.EntireColumn.Address
            set colToCopy = c.EntireColumn

            ' смотри куда мы будем ее копировать
            debug.print "sheets("Sheet2").Range("A1").Address = " & sheets("Sheet2").Range("A1").Address
            debug.print "sheets("Sheet2").Range("A1").End(xlRight).Address = " & _
                             sheets("Sheet2").Range("A1").End(xlRight).Address
            debug.print "sheets("Sheet2").Range("A1").End(xlRight).Offset(0,1).Address = " & _
                             sheets("Sheet2").Range("A1").End(xlRight).Offset( 0 , 1 ).Address

            colToCopy.Copy Destination:=sheets("Sheet2").Range("A1").End(xlRight).Offset( 0 , 1 )
        end if
    next
end sub
Не видишь сразу в чем может быть ошибка - прогони макрос под микроскопом.
И не стесняйся нажимать F1 на незнакомых командах. За чтение документации тебя будут только хвалить.
...
Рейтинг: 0 / 0
16.11.2007, 10:17:26
    #34943909
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
White Owl.. А ты пошагово макрос запускать умеешь? А резать его?..

Использую msgbox и stop всегда...спасибо за науку конечно...а вот при debug.print у меня ничего не происходит...так и не понял почему, что делаю не так.
...
Рейтинг: 0 / 0
16.11.2007, 12:10:55
    #34944425
Pavel55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
А вы откройте окно Immediate (Ctrl+G) там и увидите сообщение которое печатается там, например, после команды

Код: plaintext
Debug.Print "Hello"
...
Рейтинг: 0 / 0
16.11.2007, 12:39:29
    #34944586
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл в цикле или как?
Pavel55А вы откройте окно Immediate (Ctrl+G) там и увидите сообщение которое печатается там, например, после команды

Код: plaintext
Debug.Print "Hello"


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


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