|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.11.2018, 20:14 | #1 |
Пользователь
Регистрация: 26.11.2018
Сообщений: 10
|
Уважаемые умные люди! Помогите, пжл! В vba - я новичок., хотя уже что-то начинаю фурычить, однако, не могу придумать алгоритм для своей задачи.... Ломаю голову уже неделю. Скоро мозги задымятся. Может кто подскажет как сделать....
задача такая... Есть разные таблицы с данными. Ячейки первой строки этих таблиц различаются по цвету - серые и без заливки. В самом начале макроса задается количество столбцов, которое нужно передвигать вправо за секунду функцией ActiveWindow.SmallScroll ToRight. Сдвигаемые в каждую секунду столбцы должны в эту секунду выделяться. Однако, если попадаются столбцы, которые не имеют в первой строке заливки, то они должны входить в секундный сдвиг дополнительно и прибавляться к выделенному диапазону ...возможно плохо формулирую задачу, поэтому покажу на примере ... пусть, например, есть таблица с 1-й строкой ( с - серый, х - нет заливки) х с с х х с х с с х с с с х х х с с если выбрать, например, сдвиг на 2 столбца в секунду, то сдвигаться по-секундно должно так: х с с - х х с х с - с х с - с с - х х х с с (то есть по 2 "с" в каждой секунде) если выбрать, например, сдвиг на 3 столбца в секунду, то сдвигаться по-секундно должно так: х с с х х с - х с с х с - с с х х х с - с (то есть по 3 "с" в каждой секунде) если у кого есть идеи, как это сделать? подскажиет пжл, где ошибка... почему Do..Loop не берет Код:
Код программы нужно выделять (форматировать) тегами [CODE][/CODE] (читать FAQ) Модератор Последний раз редактировалось Вадим Мошев; 04.12.2018 в 17:46. |
27.11.2018, 09:36 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
я вам вряд ли помогу (уж очень у Вас задача "хитрая" и специфичная),
да и я не уверен, что вообще полагаться на таймер в Excel - это вполне надёжно (Windows не является системой реального времени). НО. Рекомендую прилагать к коду тестовый файлик, в котором этот код должен выполняться. p.s. ну конкретно про LOOP ответ простой. Вы банально неверно написали. в VBA есть цикл Код:
Код:
попробуйте заменить слово LOOP на Wend, убрать ненужное DO в операторе While и закрыть не закрытый if (добавить End If) это позволит вашему макросу запуститься. но не факт, что это обеспечит его корректную работу! Последний раз редактировалось Serge_Bliznykov; 27.11.2018 в 09:49. |
27.11.2018, 11:39 | #3 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Запись цикла вроде верна
https://www.tutorialspoint.com/vba/v...while_loop.htm если не срабатывает то надо протрассировать и искать ошибку. Вангую что Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
27.11.2018, 13:02 | #4 |
Пользователь
Регистрация: 26.11.2018
Сообщений: 10
|
Спасибо за ответ
немного код переделала, но вы - правы, он не рабочий, выдает ошибку 1004 вот файл, в котором код должен выполняться.. Последний раз редактировалось shchnad; 27.11.2018 в 21:43. |
27.11.2018, 14:25 | #5 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
shchnad,
сможете обьяснить, что должно происходить в файле - есть шанс получить рабочий код. а вообще, для работы с диапазонами изучайте методы обьекта Range в обьектной моделе Excel
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 27.11.2018 в 14:49. |
27.11.2018, 17:46 | #6 |
Пользователь
Регистрация: 26.11.2018
Сообщений: 10
|
спасибо за ответ....в первом сообщении я уже попыталась объяснить, что я пытаюсь кодом сделать...
перемещать таблицу со скоростью n столбов в секунду, ...если попадается столбец, у которого в первой строке отсутсвует заливка, то он должен также в эту секунуду смещаться...смещающаяся область должна выделяться вот попыталась объяснить комментариями Код:
не понимаю, что хочет ошибка на строке 'как только k достигает n, так область (шириной в 57 строк) от начала поиска до ячейки с серой заливкой выделяется Range(Cells(1, ActiveCell.Column), Cells(57, last.Column)).Select Последний раз редактировалось Вадим Мошев; 04.12.2018 в 17:47. |
28.11.2018, 04:31 | #7 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
попытайтесь еще раз, что бы кому -то стало понятно.
понимаете, Вы этим никому не делаете одолжения. Вы делаете более вероятным получение конкретного ответа на свой вопрос. или ничего можно не делать и так уже все обьяснили ждите пока Вам накидают ответов, один точнее другого. не нужно Вашего кода и комментариев к нему. нужно словесное описание задачи короткое, но достаточное для ее понимания.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 28.11.2018 в 04:33. |
28.11.2018, 07:15 | #8 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Нету в вышеприведённом коде такой строки, потому и ругается что last переменная не инициализированная. F8 не стесняйтесь использовать, проверяйте каждую строку, сначала в голове уясните что должно быть на этом этапе, потом сделали шаг трассировки. Совпало? Гуд. Не совпало? Перепроверяем все переменные и активно юзаем стаковерфлоу.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
28.11.2018, 11:25 | #9 |
Пользователь
Регистрация: 26.11.2018
Сообщений: 10
|
доброе утро!
словесное объяснение задачи: есть таблица, которая должна постепенно смещаться влево, чтобы показывать на экране новые и новые столбцы, находящиеся правее. Скорость смещения таблицы - количество столбцов смещения в секунду должно задаваться пользователем. Во время смещения количество смещаемых столбцов должно выделяться (к примеру, если пользователь задал скорость - три столбца, то должны выделиться на секунду одни три столбца, затем следующие в таблице правее три столбца и т.д. Столбец таблицы, от которого начинать выделение, также должен задаваться пользователем вначале. Когда таблица заканчивается, макрос должен остановиться, предварительно вернув таблицу в начальное состояние, то есть на выбранный пользователем стартовый столбец. Задача усложняется тем, что в первой строке таблицы ячейки имеют разную заливку (серую и без заливки). Столбцы, у которых ячейки первой строки не имеют заливки, должны входить в зону выделения дополнительно и также смещаться в ту же секунду, что и столбцы с серой заливкой. То есть область выделения в секунду может быть разной в зависимости от заливки в первой строке, однако ее первый столбец будет находиться на экране всегда в одном и том же месте (потому что смещаться будет то, количество столбцов, которое выделено), в области выделения количество столбцов с серой заливкой в первой строке будет всегда то, которое задал пользователь вначале. Последний раз редактировалось shchnad; 28.11.2018 в 11:32. |
28.11.2018, 13:00 | #10 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
вот код который двигает
Только имхо "поиск серой заливки" не так делается, но вам виднее что подразумевается под "цикл поиска по серой заливке" Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа VBA с удаленной БД | Ципихович Эндрю | Microsoft Office Word | 0 | 01.03.2017 17:47 |
Работа с массивами (VBA) | yura13 | Помощь студентам | 0 | 01.12.2013 14:58 |
Работа с формой VBA | Игорь Новый | Microsoft Office Excel | 6 | 08.12.2012 13:17 |
Работа со строками в VBA | dimok5 | Помощь студентам | 7 | 14.02.2011 16:46 |
работа с диапазонами-столбцами | polukaroff | Microsoft Office Excel | 7 | 27.11.2009 20:37 |