Зачем вообще .Select делать?
Код |
---|
Worksheets("FROM").Range("A1:A100").Copy _ Destination := Worksheets("TO").Range("A1") |
05.07.2016 16:48:45
При запуске макроса спрашивает в каком диапазоне делать проверку. Если есть формула и значение выводится пустое, то скрывает строку.
|
|||
|
20.07.2015 21:39:25
Здравствуйте, хочу узнать ваше мнение, так как думаю, что на форуме есть много людей, кто с этим сталкивался.
Нужно создать базу данных и пользовательский интерфейс для компании, БД будет храниться на рабочем компьютере, с открытым доступом других пользователей локальной сети. Где введя свой Логин, работник сможет получить всякие отчеты в самом интерфейсе или в виде excel файла. 1.Страховая компания. 2.Пользователей примерно 20-30. 3.Сейчас все хранится в Excel файлах, нету структуры данных, поэтому появилась необходимость создать Базу данных для нужд работников, а именно: 1) Одновременный ввод данных в формы многими работниками. 2) Просмотр данных в виде таблиц. 3) Легкий импорт/экспорт в Excel таблицы. (Некоторые данные получаются только в виде Excel файлов из других баз данных, появляется необходимость постоянного обновления записей базы данных на новые из Excel файла) 4) Получение отчетов о продажах и т.д. 5) Построение графиков исходя из запросов и таблиц. 4.Есть: 1) на всех компьютерах установленный MS Office 2013 (без Access) 2) на 2 компьютерах установлен MS Access 2013. (Есть возможность на остальные установить бесплатный Access Runtime 2013) 3) начатый проект в MS Access 2013, где есть логин форма и в зависимости от пользователя выбор разрешенной ему формы. (Разделено на 2 файла, Front end, Back end) 5.Знания: 1) MS Office 2013 (Access, Excel) 2) VBA 3) Основы HTML + CSS 4) Основы создания SQL запросов. 6.Объемы БД: 1) Есть отчет из интернета, где 3млн строчек и около 15 колонок. (Было 5 разделенных excel файлов, с горем пополам, закинул в один файл MS Access) в Access он весит 1гб. 2) Есть много разных отчетов, где около 150 тысяч строк и 100 колонок. 3) И всякие разные мелкие файлы. Все это хранится в Excel файлах. 7.Сроки и ограничения: - Нужно создать основу, где уже будут хоть какие-то отчеты в течении 15 дней. - Без доп. вложений. (без покупки лицензий на сторонний софт) 8.Предположительные решения: 1) MS Access (Front End) + MS Access (Back End) 2) MS Access (Front End) + MS SQL Server Express 2012 (Back End) (нужно будет обучиться управлением SQL server) 3) ASP.NET + MS SQL Server Express 2012 4) Готовое бесплатное решение, предназначенное для этих целей. (типо Joomla) 5) Php + MYSQL Что можете посоветовать в данном случае? (учитывая срок в 15 дней и время на обучение пользования решений 8.3-8.5) |
|
|
13.07.2015 17:34:30
Уже разобрался:
![]() |
|||
|
13.07.2015 17:22:36
Спасибо! С "#" все работает.
Как сделать при выгрузке SELECT, JOIN с листом FLEET где Polises numurs = Polises numurs ? Пока что дошел только до такого извращенства: ![]()
Изменено: |
||
|
13.07.2015 16:50:33
А как вы тогда проверили, работает ли у вас такой код или нет? Без подключения к ADODB.
Вот код который я использую для создания SQL подключения к книге, нашел его на этом форуме( автор:
|
|||||
|
13.07.2015 16:28:57
TheBestOfTheBest, может у меня перед sql кодом что-то не правильно. Можете прислать ваш sql код целиком, где создается ADODB.Connection и т.д?
Изменено: |
|
|
13.07.2015 14:15:25
Попробуйте такой код, он также лечит после того, как сделано Paste as values, когда числовые данные всеравно остаются текстом.
Изменено: |
|||
|
13.07.2015 13:57:17
Здравствуйте, который раз уже сталкиваюсь с проблемой из-за не понимания принципа написания SQL запросов в excel или использование словарей. В интернете очень мало такой информации, особенно доступной для соображения. На Youtube вообще не нашел видео на эту тему.
Попробовал сделать через массивы, и выгрузку из них. Получилось все очень тормознуто, минут 20 обрабатывает 140 000 строк из-за огромного количества For, IF, Next. Думаю SQL запрос как раз расщитан для такого и справится намного быстрее: 1. Лист CRRATYLV и DATA добавляются с помощью макроса из другой книги, это я сделал. 1.1. Лист CRRATYLV постоянно новый 2. В Лист FLEET из листа "DATA" вытаскиваются значения Produkta kods, Polises numurs, FLEET, Territory 3. Нужно взять все значения из листа CRRATYLV только из коллонок перечисленных в Sheets("MACRO").Range("A2:A" & Lastrow) 3.1. Выбрать только те строки, где Produkta kods = 430 и 440 4. Скопировать отсортированные значения из листа "CRRATYLV" на лист "DATA", при этом подставляя значения Коллонок (FLEET, Territory) из листа FLEET где Produkta kods = Produkta kods AND Polises numurs = Polises numurs 5. В коллонках Auto Year, Period на листе DATA будут формулы, так что с ними ничего делать не надо Подскажите, как это можно реализовать. Заранее спасибо!
Изменено: |
|
|
10.07.2015 14:52:33
Здравствуйте, снова столкнулся с похожей проблемой из-за непонимания работы словарей и массивов. Попробовал применить здесь предыдущие способы, все без результатно.
Все расписал в файле примера: 1.Лист CRRATYLV и DATA добавляются с помощью макроса из другой книги, это я сделал. 2. Нужно создать макрос, который берет все значения из листа CRRATYLV только из коллонок перечисленных в Sheets("MACRO").Range("A2:A" & Lastrow) 3. Выбирает только те строки, где Produkta kods = 430 и 440 4. Сравнивает, были ли такие уже записи на Листе DATA, сравнивает по Polises numurs 5. Если в Sheets("MACRO").Range("B2:B" & Lastrow) стоит U, тогда обновляет эти коллонки новым значением из Листа CRRATYLV в Листе DATA 6. Если на листе DATA не было найдено строки с таким Polises numurs, то макрос добавляет эту строку 7. Коллонки FLEET, FLEET DATE на листе DATA не должны затрагиваться Пробовал создать макрос через массивы, но дойдя до этапа копирования значений совсем запутался в нем. (Макрос есть в этом файле, но думаю там теперь уже никто ничего не поймет в нем) Как можно это реализовать более простым способом? |
|
|
30.06.2015 17:12:55
Smiley, Думал по поводу Access, было бы супер, но тут не все так просто
![]() 1. На рабочих копьютерах нету Access, нужно будет каждый раз загружать с флешки Portable версию. 2. Один из файлов подгружаю с сайта, в день по 300 записей. 3. Другой файл это под заказ выбранные поля из огромной базы данных сервера, который находится в другой стране. Генерируется и приходит по э-майлу в csv формате. С ним работает весь офис для подготовки отчетов и анализа данных, продаж. 4. Данные вводятся на сервер путем ввода через консоль PuTTY, где каждое значение вбивается отдельно, никакого импорта из excel и прочего там не предусмотренно. 5. Где-то раз в неделю запрашиваем новый отчет, приходит новый csv файл. Не думаю, что можно как-то в access сделать постоянное обновление базы данных из новых сгенерированных excel файлов.
Изменено: |
|
|
30.06.2015 16:46:58
Smiley, А можно ли как-то вытягивать таким способом значения из разных книг Excel, не открывая их?
Допустим, что есть 3 рабочих книги, с такими же названиями как и у листов, только теперь они содержат по 1 листу: Foto.xlsm - открыт и содержит макрос Эти нет смысла открывать, так как много времени уходит на их открытие и закрытие (файлы по 60мб): Data.xlsx AnotherData.xlsx |
|
|
30.06.2015 15:35:25
Здравствуйте, пробую разобраться с созданием словарей в Excel VBA. Не могу понять их принцип.
Задача такая - Имеется таблица на листе ("Data") с огромным колличеством строк и коллонок: (сверху A,B это буква коллонки; слева номер строки)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
29.06.2015 10:54:40
Здравствуйте, что можете посоветовать для хранения наработок макросов, кодов AutoIT и прочих программных кодов? Желательно чтобы было переносное решение, так как пользуюсь этим на разных компьютерах.
Может есть какой-то сайт связанный с Google аккаунтом? Или если создавать свой блог для записей, то какой бесплатный хостинг можете посоветовать? |
|
|
18.06.2015 14:07:30
Hugo, Спасибо за направление мыслей!
Написал код в AutoIT, использовал много раз Sleep() для ожидания обработки программы - PuTTY, но хотелось бы заменить его на какой-то более умный подход. В PuTTy настроил так, чтобы создавался putty.txt файл, куда записывается лог обработки. Хотелось бы сделать так, чтобы Autoit проверял putty.txt файл на то, обновился ли он и добавилась ли туда такая-то строка. Как это можно реализовать в AutoIT по 2 принципам? 1) подсчет строк Начала(RowE) и Конца(LastRow) этого этапа 2) по содержанию значения в строках (LastRow - RowE) |
|
|
17.06.2015 16:25:52
Есть база данных сделанная в DOS системе, сервера находятся в другой стране. Поэтому просто импортировать данные из Excel нет возможности.
Предположим, у нас есть такая таблица, откуда макрос при вводе должен брать по 1 символу и вводить как буд-то вручную с клавиатуры, так как DOS не поддерживает copy/paste.
Уже открыта DOS система. Макрос вводит в нее 440. То есть сначала 4, потом 4, потом 0. Нажимает TAB. Далее пишет так же 9005587. Нажимает ENTER, HOME, "g", ENTER, 7 раз стрелку вниз, "z", ENTER, 1 раз стрелку вниз, "999", ENTER, "F9", "F8", Взял из 3 коллонки букву T и написал в DOS, ENTER, "F9", "F9" (...Небольшая задержка...), "F2", HOME, "x", ENTER, "F9", HOME, "x", ENTER. И теперь заного все то же самое. И так для 2000 записей. Нужно чтобы учитывал небольшие задержки системы. |
||||||||||||||||
|
17.06.2015 14:36:03
Здравствуйте, хочу узнать, можно ли как-то записать макрос, который будет управлять DOS системой, в которой управление ведется засчет клавиатуры (Всякие нажатия, например Tab, стрелки, буквы). И сам вводить значения из таблицы excel. А то надо ввести 2000 значений, руками это делать проблематично. А по сути дела происходят одни и те же комманды.
|
|
|
16.06.2015 09:31:19
Сделал то, что хотел
![]() Теперь чтобы добавить нужные коллонки нужно всего лишь добавить Названия коллонок в массив. Спасибо всем за помощь!
|
|||
|
16.06.2015 08:56:07
Пытливый, Спасибо за помощь! Все работает. А то часто сталкиваюсь с этой проблемой, когда указываю Range через переменные. Тогда чтобы добавить еще коллонки, просто скопировать и вставить код и изменить what find?
А можно ли как-то вынести в массив find what и сделать конструкцию для этого через For? для того, чтобы код не выглядил громозким
Изменено: |
|
|
15.06.2015 16:22:37
Есть файл, в котором очень много коллонок, нужно сделать Pivot Table, но все коллонки не нужны, нужны только некоторые. Поэтому, чтобы конечный файл не был огромным и Pivot не зависал, нужные коллонки выгружаю в отдельную Книгу, с которой позже работаю.
Попробовал сделать предыдущий пример Range(columns(Prn)).Copy , ошибка осталась та же. Сделал пример файла. |
|
|