Помогите с Excel
У меня в екселе несколько однотипных листов, после заполнения формы нужно работать с одним из листов:
If AddCompl.PageList.ListIndex = 0 Then
With Worksheets("111")
ElseIf AddCompl.PageList.ListIndex = 1 Then
With Worksheets("222")
End If
...
End With
при запуске выдаёт такую ошибку:
Else whithout if
Подскажите, в чём проблема?
Такая ситуация:
У меня в екселе несколько однотипных листов, после заполнения формы нужно работать с одним из листов:
If AddCompl.PageList.ListIndex = 0 Then
With Worksheets("111")
ElseIf AddCompl.PageList.ListIndex = 1 Then
With Worksheets("222")
End If
...
End With
при запуске выдаёт такую ошибку:
Else whithout if
Подскажите, в чём проблема?
Суда по коду, тебя пересекаются IF и With
Тоесть тебе нужно написать скорее всего так:
If AddCompl.PageList.ListIndex = 0 Then
With Worksheets("111")
..........
End With
ElseIf AddCompl.PageList.ListIndex = 1 Then
With Worksheets("222")
..........
End With
End If
Суда по коду, тебя пересекаются IF и With
Тоесть тебе нужно написать скорее всего так:
If AddCompl.PageList.ListIndex = 0 Then
With Worksheets("111")
..........
End With
ElseIf AddCompl.PageList.ListIndex = 1 Then
With Worksheets("222")
..........
End With
End If
Но тогда мне прийдётся писать один и тот же код для каждой страницы. Нет ли другой возможности указать страницу, а потом выполнять код уже для той страницы, для которой это нужно.
Иначе не смысла мне использовать With ... End with.
Сейчас попробовал исправить код:
i = 0
If AddCompl.PageList.ListIndex = 0 Then
With Worksheets("111")
Do
i = i + 1
While (.Cells(i, 1) <> "")
.Cells(i, 1) = AddCompl.TextCode.Text
End With
End If
Выдаёт такую ошибку: End With without With
:???:
Но тогда мне прийдётся писать один и тот же код для каждой страницы. Нет ли другой возможности указать страницу, а потом выполнять код уже для той страницы, для которой это нужно.
Иначе не смысла мне использовать With ... End with.
Сейчас попробовал исправить код:
i = 0
If AddCompl.PageList.ListIndex = 0 Then
With Worksheets("111")
Do
i = i + 1
While (.Cells(i, 1) <> "")
.Cells(i, 1) = AddCompl.TextCode.Text
End With
End If
Выдаёт такую ошибку: End With without With
:???:
Ты что то путаешь, With ... End тут вообще не причем, это просто конструкция для сокращения кода, позволяя многокоратно обращаться к свойствам и методам указанного объекта ставя вместо него просто точку. Можно и просто написать:
If AddCompl.PageList.ListIndex = 0 Then
Do
i = i + 1
Loop while (Worksheets("111").Cells(i, 1) <> "")
Worksheets("111").Cells(i, 1) = AddCompl.TextCode.Text
End If
Ну а указанная ошибка на самом деле возникает у тебя потому что ты неправильно используешь оператор цикла, надо писать так:
.....
Loop while/untill
почитай справку по Do, там все варианты описаны.
Теперь на счет того что применять код универсально для разных страниц. Как я уже говорил дело тут абсолютно не в With, а в том как ты указываешь эту страницу в коллекции Worksheets. Ты указываешь конкретно по имени "111":
Worksheets("111")
а можно еще указывать по индексу, например
Worksheets(1) - будет вызываться всегд первая страница, можно вообще цикл сделать по всем страницам:
For i=1 To Worksheets.Count
....
Worksheets(i).[ля-ля]
....
Next i
Ну и наконец есть такие еще такие объекты ActiveSheet - это активная страница, с которой сейчас работает пользователь.