Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Помогите с кодом Добавлено: 09.10.09 16:33  

Автор вопроса:  Блондинко
Привет! Помогите, пожалуйста, разобраться. Спец образования у меня нет, только книги! Есть код, но в этом виде он перебирает переменные "показатель" и ставит конечное значение при переменной "6" в заданную ячейку на активный лист, затем переходит на следующий лист. Я же хочу чтобы значение при переменной "1" отразилось на первом активном листе и перешел на следующий лист на котором отразилось бы значение при переменно "2" и так дальше. Мне нужно как-то прерывать выполнение цикла после каждой переменной и запускать цикл с переходом на следующую страницу. Помогите, пожалуйста.


Dim Показатель As Variant
Dim ws As Worksheet
Показатель = Array("1", "2", "3", "4", "5", "6")
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
Range("F10").Select
 For i = 0 To UBound(Показатель)
ActiveCell.FormulaR1C1 = "=SUMIF(X," & Chr(34) & Показатель(i) & Chr(34) & ",Y)"
Next i
Next ws

P.S. Значение X и Y в формуле заменяют диапазон (формула "суммесли" в Excel)

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #1 Добавлено: 09.10.09 20:36
Код не особо хорош. Кстати.

Телепатия подсказывает что надо:

  1. Dim Показатель As Variant
  2. Dim ws As Worksheet
  3. Показатель = Array("1", "2", "3", "4", "5", "6")
  4. For Each ws In ActiveWorkbook.Worksheets
  5.     ws.Activate
  6.     Range("F10").Select
  7. '    For i = 0 To UBound(Показатель)
  8.         ActiveCell.FormulaR1C1 = "=SUMIF(X," & Chr(34) & Показатель(i) & Chr(34) & ",Y)"
  9. '    Next i
  10. Next ws


Телепатия меня не подводит???

Ответить

Номер ответа: 2
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #2 Добавлено: 09.10.09 20:37
Кстати что я написал - тоже отстой. Просто время уже нет написать почеловечески.

Ответить

Номер ответа: 3
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #3 Добавлено: 09.10.09 20:44
Не, наверное так:

  1. Dim Показатель As Variant
  2. Dim i As Long
  3. Dim ws As Worksheet
  4. Показатель = Array("1", "2", "3", "4", "5", "6")
  5. For Each ws In ActiveWorkbook.Worksheets
  6.     ws.Activate
  7.     Range("F10").Select
  8. '    For i = 0 To UBound(Показатель)
  9.         ActiveCell.FormulaR1C1 = "=SUMIF(X," & Chr(34) & Показатель(i) & Chr(34) & ",Y)"
  10. '    Next i
  11.     i = i + 1
  12. Next ws

Ответить

Номер ответа: 4
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #4 Добавлено: 09.10.09 20:45
Предупрежд.: нет проверки ошибок, а поэтому число листов не должно быть больше 6-ти.

Ответить

Номер ответа: 5
Автор ответа:
 Блондинко



Вопросов: 2
Ответов: 12
 Профиль | | #5 Добавлено: 12.10.09 09:36
Огромное спасибо. Я только учусь, помогать совершенно некому, поэтому коряво. Но буду стараться )

Ответить

Номер ответа: 6
Автор ответа:
 Блондинко



Вопросов: 2
Ответов: 12
 Профиль | | #6 Добавлено: 12.10.09 09:38
GDK пишет:
Предупрежд.: нет проверки ошибок, а поэтому число листов не должно быть больше 6-ти.


А почему? В книгах я пока не встречала про проверку ошибок. Даже не представляю что она будет проверять.

Ответить

Номер ответа: 7
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #7 Добавлено: 12.10.09 10:02
Даже не представляю что она будет проверять.

При количестве листов больше 6 у тебя будет возникать ошибка - Subscript out of Range, чтобы этого не происходило:

  1. Dim Показатель As Variant
  2.  Dim i As Long
  3.  Dim ws As Worksheet
  4.  Показатель = Array("1", "2", "3", "4", "5", "6")
  5.  For Each ws In ActiveWorkbook.Worksheets
  6.     ws.Activate
  7.     Range("F10").Select
  8. '    For i = 0 To UBound(Показатель)
  9.         On Error GoTo Ext
  10.         'On Error resume next ' ну или так
  11.                 ActiveCell.FormulaR1C1 = "=SUMIF(X," & Chr(34) & Показатель(i) & Chr(34) & ",Y)"
  12. '    Next i
  13.     i = i + 1
  14.  Next ws
  15. Ext:



А еще здесь обсуждали:
http://www.vbnet.ru/forum/show.aspx?id=195929

Ответить

Номер ответа: 8
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #8 Добавлено: 12.10.09 17:25
Лучше будет если не использовать On Error, тем более это здесь более кстати. Надо проверить кол-во листов и кол-во элементов в массиве и в случ. чего выдать пользователю сообщение типа: "кол-во листов слишком большое ...".

Ответить

Номер ответа: 9
Автор ответа:
 Блондинко



Вопросов: 2
Ответов: 12
 Профиль | | #9 Добавлено: 12.10.09 18:23
AngryBadger пишет:
При количестве листов больше 6 у тебя будет возникать ошибка - Subscript out of Range, чтобы этого не происходило:


Ага, кажется поняла. Необходимо чтобы количество листов и переменных было одинаково, так?
У меня сначала было листо на один больше чем переменных, но я в переменные добавила "пустышку" и ошибка больше не возникает.
Показатель = Array("","1", "2", "3", "4", "5", "6";)
Только теперь вот думаю, можно ли сдвинуть цикл листов на один, чтобы не писать "пустышку", т.е. чтобы цикл попустил первый лист и навчал со второго. Может так как-нибудь?
Dim ws As Worksheet
ws=Array("2","3","4","5","6" и так далее)
Буду пробовать.
Про ошибку обязательно почитаю.
Спасибо Всем огромное, что помогаете. ))

Ответить

Номер ответа: 10
Автор ответа:
 Блондинко



Вопросов: 2
Ответов: 12
 Профиль | | #10 Добавлено: 12.10.09 18:32
Получилось вот так:
  1. For Each ws In ActiveWorkbook.Worksheets(Array("2","3","4","5","6" и так далее))

А дальше без измененений.

Ответить

Номер ответа: 11
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #11 Добавлено: 13.10.09 11:41
ActiveWorkbook.Worksheets(Array("2","3","4","5","6" и так далее))


Т.е. надо заранее знать сколько будет листов у пользователя.

А ведь можно программно узнать сколько листов в документе, создать массив на основе этого числа, .....

Не надо будет заранее знать сколько листов в документе у пользователя.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам