VBA цикл выдает ошибку - PullRequest
1 голос
/ 27 марта 2012

У меня есть несколько листов в одном Excel ..

То, что я собираюсь сделать, это объединить в соответствии с заголовком столбца в основной лист.

Если столбец отсутствует на каком-либо из листов, значит, заполненный как «Недоступно» в основной таблице для этих данных

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

Может ли кто-нибудь выручить меня из этой проблемы ...

Sub Sathish()
    'Declaration

    Dim ii
    Dim j As Integer
    Dim a As Integer
    Dim i As Integer
    Dim rrange As Range
    Dim trange As Range

    'Assigning

    a = Worksheets.Count
    ii = Array("saaa", "Description", "saaa", "Model", "sathish")

   Dim aa As Integer

    'Practical
    'Call Create_new_sheet
    For j = 1 To a
        Sheets(j).Select
        If Not ActiveSheet.Name = "Master" Then
            For i = 1 To 3
                Rows("1:1").Select
                For Each trange In Selection
                    If trange.Value = ii(i) Then
                        Selection.Find(What:=ii(i), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
                        ActiveCell.Offset(1, 0).Select
                        Range(Selection, Selection.End(xlDown)).Copy Destination:=Sheets("Master").Cells(6550, i).End(xlUp).Offset(1, 0)
                    Else
                        Sheets("Master").Cells(6550, i).End(xlUp).Offset(1, -1).Select
                        Selection.End(xlDown).Offset(0, 1).Select
                        ActiveCell.Value = "[not applicable]"
                        ActiveCell.Offset(-1, 0).Select
                        Range(ActiveCell, Selection.End(xlUp)).Offset(1, 0).Select
                        For Each rrange In Selection
                            rrange.Value = "[not applicable]"
                        Next rrange
                    End If
                Next trange
            Next i
        End If
    Next j
End Sub

1 Ответ

1 голос
/ 27 марта 2012

Я планировал опубликовать это как комментарий, но так как текста много, он мне не позволил бы.

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

If trange.Value = ii(i) Then Эта часть будет проверять только первые три значения массива.Если вы заметите, что ваш цикл запускается только 3 раза (For i = 1 To 3)

Также не используется .Find :) Я бы рекомендовал перейти по этой ссылке и повторно применить логику.

ТЕМА : . Find и .FindNext в Excel VBA (см. Раздел 1)

LINK : http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/

Когда я пишу код, я записываю логику, а затем кодирую соответственно.Я бы беззастенчиво также рекомендовал бы эту ссылку

TOPIC : Для "Err" - Человек (см. Раздел 1, что я имел в виду выше. См. Другиеразделы, чтобы улучшить ваш код)

LINK : http://siddharthrout.wordpress.com/2011/08/01/to-err-is-human/

Вот пример того, как должна выглядеть логика.

LOGIC

  • Loop Through Все рабочие листы
  • Проверьте, не является ли лист Master
  • Установите диапазон поиска как 1-ую строку
  • Используйте .Find, чтобы проверить, присутствуют ли значения в массиве в строке 1. Используйте здесь отдельный цикл.
  • Если найдено (сделайте это)
  • Если нетнайдено (затем сделайте это)

Если вы все еще застряли, опубликуйте код, который вы пробовали, и мы возьмем его оттуда.

HTH

Sid

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...