Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2016, 12:27   #1
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию создание листа по условию

Добрый день. Подскажите где ошибка, пожалуйста.
Нужно создать листы с именем из ячейки. Нужно создать столько листов сколько есть в данном диапазоне. В ячейках информация текстовая, я так понимаю ошибка в строке с условием, но не понимаю, как задать.

Код:
Sub test()
If Cells("B7") <> 0 Then
Sheets.Add after:=Sheets(1)
Sheets(2).Name = Sheets(1).Range("B7").Value
End If

If Cells("B8") <> 0 Then
Sheets.Add after:=Sheets(1)
Sheets(3).Name = Sheets(1).Range("B8").Value
End If

'и т.д


End Sub
Спасибо
Morozeckiy вне форума Ответить с цитированием
Старый 30.08.2016, 12:29   #2
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию

Как всегда, запостил и осенило. Нужно в условии указать Range вместо Cells.

Хотя появилась другая проблема. Цикл заканчивается на первом IF, как перешагнуть на следующий?


upd. тихо сам с собою...
это тоже решено, нужно выделять первый лист, где инфа в ячейках.

Последний раз редактировалось Morozeckiy; 30.08.2016 в 12:42.
Morozeckiy вне форума Ответить с цитированием
Старый 30.08.2016, 12:45   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не должно там ничего заканчиваться. Конечно когда прпишите правильно обращение к ячейкам.
А вообще без примера кода в файле слишком много текста нужно в ответе писать...
Вернее так - поместите код в модуль листа и заработает. Если конечно названия будут допустимы.
P.S. И не надо ничего выделять, бросайте эту порочную практику!
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 30.08.2016 в 13:07.
Hugo121 вне форума Ответить с цитированием
Старый 30.08.2016, 12:59   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это стандартная ситуация:
когда Вы пытаетесь собеседнику изложить суть задачи, Вы стараетесь рассказать так, чтобы ему было понятно, при этом сами переосмысливаете суть проблемы и можете неожиданно для себе найти решение)

а Ваши циклы... (как раз к Cells совершенно непринужденно обращаться ее по № строки и № колонки)
Код:
with worksheets(1)
  r = 7
  do while .cells(r,2) <> 0 then
    WorkSheets.Add after:=workSheets(1)
    worksSheets(2).Name = .cells(r,2)
    r =r+1
  loop
end with
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.08.2016, 14:12   #5
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Не должно там ничего заканчиваться. Конечно когда прпишите правильно обращение к ячейкам.
А вообще без примера кода в файле слишком много текста нужно в ответе писать...
Вернее так - поместите код в модуль листа и заработает. Если конечно названия будут допустимы.
P.S. И не надо ничего выделять, бросайте эту порочную практику!
Я только начал учиться vba), поэтому приходится увеличивать код ненужными кусками.
Morozeckiy вне форума Ответить с цитированием
Старый 30.08.2016, 14:19   #6
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
это стандартная ситуация:
когда Вы пытаетесь собеседнику изложить суть задачи, Вы стараетесь рассказать так, чтобы ему было понятно, при этом сами переосмысливаете суть проблемы и можете неожиданно для себе найти решение)

а Ваши циклы... (как раз к Cells совершенно непринужденно обращаться ее по № строки и № колонки)
Код:
with worksheets(1)
  r = 7
  do while .cells(r,2) <> 0 then
    WorkSheets.Add after:=workSheets(1)
    worksSheets(2).Name = .cells(r,2)
    r =r+1
  loop
end with
ваш код сокращает мой раз в 10 Только я так понимаю перед .cells должно быть что то важное, но я пока не понимаю что?

p.s. r - я могу указать число максимальное которое мне нужно? Просто это будет обработка разных файлов и где то 7 строк и будет 7 листов, где то 10. Максимум 13.
То есть если я укажу r=13 и в файле будет 7 ячеек 2 столбца с инфой, макрос создаст мне 7 листов и не будет ругаться?

Спасибо!
Morozeckiy вне форума Ответить с цитированием
Старый 30.08.2016, 14:36   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

r = 7 - это стартовая строка, с которой макрос начнет проверять ячейки 2-й колонки (колонки В)

если ячейка не пустая
- за первым листом будет добавлен лист с соотв. названием
иначе
обработка строк (и, видимо, работа макроса) на этом прекращается

перед .cells(r,2) ничего не нужно, все что нужно написано чуть выше
а чуть выше написано, что все свойства (методы) название которых начинаются с точки являются свойствами или методами обьекта
with worksheets(1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.08.2016, 16:35   #8
Morozeckiy
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 36
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
r = 7 - это стартовая строка, с которой макрос начнет проверять ячейки 2-й колонки (колонки В)

если ячейка не пустая
- за первым листом будет добавлен лист с соотв. названием
иначе
обработка строк (и, видимо, работа макроса) на этом прекращается

перед .cells(r,2) ничего не нужно, все что нужно написано чуть выше
а чуть выше написано, что все свойства (методы) название которых начинаются с точки являются свойствами или методами обьекта
with worksheets(1)
Тогда я что то не понимаю, VBA выдает синтаксическую ошибку
Morozeckiy вне форума Ответить с цитированием
Старый 30.08.2016, 16:41   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так?
Код:
With Worksheets(1)
  r = 7
  Do While .Cells(r, 2) <> 0
    Worksheets.Add after:=Worksheets(1)
    Worksheets(2).Name = .Cells(r, 2)
    r = r + 1
  Loop
End With
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.08.2016, 16:53   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Сергей, спасибо!)
правил с первоначального кода Then провтыкал снести))

Morozeckiy, если VBA выдает синтаксическую ошибку
во-первых значит, что она есть (обычно еще как-то подсвечена компилятором)
во-вторых, значит ее нужно устранять всеми доступными способами

самый надежный способ - привести текст макрос в соответствие с правилами синтаксиса языка
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данных с общего листа на другие по условию кнопка 01011991 Microsoft Office Excel 0 23.01.2015 16:05
перенос данных с одного листа на другой по условию diop Microsoft Office Excel 3 21.01.2015 01:33
запретить переход с листа на лист по условию Uralmaster Microsoft Office Excel 14 11.02.2011 15:48
Создание листа с одновременным созданием формулы на ячейку нового листа ShamanK Microsoft Office Excel 4 02.05.2010 22:00
добавление листа в книгу по условию Sasha K Microsoft Office Excel 4 30.01.2007 15:44