![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
Не могу понять как работает цикл в цикле
на пример repeat begin lalalala if что-то1<>100 then begin lalalala2 что-то1:=что-то1+1; end end until что-то2<чего-то Выполняется это так? Заходим в цикл repeat делаем lalalala затем входим в условие if делаем lalalala2 затем будет выполняться if пока что-то1 не станет равным 100 и только потом перейдет на until так? Вот наглядный пример с которым мучаюсь, у меня есть таблица в ней в ячейке(8,1) есть текст далее в каком-то, неизвестном, кол-ве ячеек вниз пусто и потом опять в одной ячейке что-то есть надо объединить ячейку 8,1 со всеми пустыми ячейками,вниз, до след заполненной. И то же самое проделать с следующей.
Объединяется только ячейка 8,1 и 9,1 Это сообщение отредактировал(а) 123456789igor - 19.9.2012, 20:05 |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
123456789igor, Как ты собираешься закончить цикл если z не меняется?
Добавлено через 3 минуты и 40 секунд ну или NRow ))) -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
А зачем его менять?
Вот как я представляю как работает этот код z это кол-во всех строк-1 dir это переменная типа string в неё записывается значение ячейки далее захожу в цикл repeat если ячейка не пустая то объединяем ячейки 8,1 и 9,1 далее dir присваиваем значение ячейки 9,1 и значение nrow становиться 10 а так как 10<чем число строк то проходим по циклу ещё раз но только dir уже это ячейка 9,1 и она объединена с 8,1 соответственно она не пустая и тогда так как nrow уже 10 должны объединиться 10,1 и 11,1 но этого не происходит Добавлено через 50 секунд NRow там просто закоменчено NRow:=NRow+2; |
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Моим рекомендациям в прошлый раз вы не последовали.
Вы понимаете, что каждый раз при вызове такой конструкции
компьютер выполняет как минимум 6 абсолютно лишних, достаточно длительных и не-безопасных для вашей программы операций по получению всяких WorkBooks|Sheets[1]? По факту - код должен выглядеть как-то так: (пишу в браузере, могут быть незначительные ошибки)
Добавлено через 2 минуты и 9 секунд Вполне возможно, что в VBA для узнавания следующей непустой ячейки есть функции, но мне сейчас лень копаться. |
||||
|
|||||
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
Если честно, то мне тяжело переделать под себя ваш код и в то же время не понимаю чем мой хуже(ну не считая что он не работает:) ) я прошу с моим кодом помочь вот к чему пришёл:
То, как я его понимаю: z это кол-во всех строк-1 dir это переменная типа string в неё записывается значение ячейки далее захожу в цикл repeat если ячейка не пустая то объединяем ячейки 8,1 и 9,1 далее dir присваиваем значение ячейки 9,1 и значение nrow становиться 10 а так как 10>=чем число строк(так как это условие выхода) то проходим по циклу ещё раз но только dir уже это ячейка 9,1 и она объединена с 8,1 соответственно она не пустая и тогда так как nrow уже 9 должны объединиться 9,1 и 10,1 НО! прога компилется, но при запуске excel виснет и вместе с ним и прога Это сообщение отредактировал(а) 123456789igor - 19.9.2012, 21:24 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
его не надо переделывать, а использовать в соответствии с назначением
я объяснял это в прошлой вашей теме, объяснил и сейчас. Могу только добавить, что пользователь вас убьет (и будет иметь на это все основания), если до начала работы с программой у него будет идти работа в Excel с каким-либо файлом. Потому что в этом случае Worksheets[1] будет указывать не на ваш, на на его, пользователя, открытый файл. Соответственно - вы испортите ему всю работу, и кнопка Undo ничего не сможет с этим поделать. Кроме того, если работа идет длительная, то пользователь может отработав со своим файлом и закрыть его. Afair, нигде в справке по VBA не написано, что в коллекции Workbooks порядок следования книг сохраняется. Кстати, не понимаю - в чем проблема "переделки под себя" приведенного кода - он писался под вашу конкретную задачу. Это сообщение отредактировал(а) kami - 19.9.2012, 21:43 |
|||
|
||||
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
Сделал так, но объединяет только с 9 по 23 строку, 24 не пустая, а дальше опять идут пустые. Как изменить код, что бы объединяло дальше с 24? |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |