Страница: 1 |
Страница: 1 |
Вопрос: Форма выбора файла.
Добавлено: 29.09.04 18:42
Автор вопроса: Ruselus
Здравствуйте.
Мне вот приспичило в качестве переменной указывать имя файла с полным путем. Есть ли в VBA какая-нить стандартная формочка похожая на File.Open но чтобы просто возвращала полный путь с именем?
Ну и заодно еще пару повросов, чтобы не создавать новые темы.
Можно ли как нить в ExelXP (ну и др. офисные приложения) присобачить нормальный хелп, хотя бы от Office2k?
А то невозможно ниче найти и очень не удобно искать. =(
Есть ли какой нить способ разбить данные одной ячейки по нескольким, используя некий критерий?
Т.е. у меня есть ячейка в которой находится длинная строка (так называемая "Аналитика") в которой находится много данных (шифров) разделенных пробелом.
Если не понятно, то вот пример:
0101 ДОГОВОР№3476 29587 290480 ЗАО"ЧЕРЕЗЗАБОРНОГУИТ.Д."
Вот мне надо на автомате все это дело разбить по разным ячейкам. Пока что делаю так: копирую столбец с аналитикой в новый лист, сохраняю его в текстовый документ с разделителем табуляция, а потом делаю в рабочий лист импорт данных из этого текстового документа. Все это соответственно макросом...
Вопрос: может есть какой-нить более простой стандартный способ или у когонить уже есть код на VBA который это проделывает без юзания файлов.
Всем заранее фенкс.
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 29.09.04 18:46
1. Workbooks.Open
2. MSDN
3. Поищи на сайте про парсинг строки на пробелы
4. Не знаю
Номер ответа: 2
Автор ответа:
Ruselus
Вопросов: 1
Ответов: 3
Профиль | | #2
Добавлено: 29.09.04 18:49
Спасибо.
По первому уже подсказали:
Application.GetOpenFilename
2. А что такое MSDN?
3. спасибо.
4. Вопросов было всего 3. )) Все равно спасибо.
Номер ответа: 3
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #3
Добавлено: 29.09.04 18:57
)
2) MSDN - это микрософтовская справочная система по языкам, находящимся в Visual Stud'ии
3) Попробуй функцию Split
Номер ответа: 4
Автор ответа:
Stas2k
Вопросов: 6
Ответов: 16
Профиль | | #4
Добавлено: 30.09.04 10:33
Можно определить сколько пробелов (N) в строке. Зная позицию каждого пробела N+1 раз выдернуть из этой строки функцией Mid каждую отдельную строку. Выдернутое значение можно либо присваивать временным переменным (особенно если пробелов в каждой исходной строке одинаково, например 5) и потом разнести по ячейкам, либо сразу после выдергивания загонять в ячейки листа. И не нужны текстовые файлы.
Номер ответа: 5
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 30.09.04 13:29
Stas2k, со Split оно красивее и понятнее выглядит, хотя всё ты верно сказал.
2. MSDN в данном контексте звучит как RTFM Да, поиск не такой, как раньше. Но меня в VBA встроенная справка + Object Browser вполне устраивают. Да, правда накопилась у меня уже приличная коллекция документаци. У VBA с VB так много общего!
Номер ответа: 6
Автор ответа:
Ruselus
Вопросов: 1
Ответов: 3
Профиль | | #6
Добавлено: 30.09.04 21:16
Ну мне пока именно VBA нужен и чаще всего приходится обращатся к обьектам специфическим для него...
Тут еще несколько вопросов поднабралось за рабочий день. Помогите если не влом.
1. Можно ли как нить отключить обновление экрана Экселя во время выполнения скрипта? А то седня дописал основной модуль обработки и запустил его сдуру сразу на все 250к позиций... Пол часа он у меня все это перелопачивал. Потом впринципе нашел как оптимизировать, до 4-х минут, но все равно вот думаю если отключить обновление - авось побыстрее будет...
2. Можно ли как нить отслеживать и перехватывать ошибки? Т.е. уже во время выполнния программы... Чтобы она при возникновении ошибки не вылетала а просто игнорила эту строку и работала дальше. Я точно знаю что эта строка у меня не обязательная.
Ну это я просто так, на будущее.
А возник вопрос у меня как. Долго думал, как можно проверить есть файл на месте (заранее задавал путь) или его там нету. Придумал пробывать его атрибуты считать (думал - считается - все ок, а нет - так переспросим у пользователя, а правильно ли он путь указал), но если путь указан не верно, прога просто вылетает в дебуг.
3. Тут же возникае вопрос. А как можно проверить наличие файла по определенному пути?
4. Как можно определить длинну столбца или строки? Т.е. мне нужно задать крайние границы обработки ячеек но я не знаю как. Пока ввожу это вручную. Пробывал выделять столбец и применять к нету count но что-то у меня не получилось. =((
5. Можно ли заставить Эксель сохранить файл поверх другого, но чтоб он даже не спрашивал подтверждения?
Всем огромный фенкс, особенно тем, кому не влом отвечать на мои вопросы.
З.Ы. А вот я тут думал, MSDN наверное 100% на инглише. А нет никакой документации где бы обьяснялись основные свойства и назначения функций и объеков на русском? А то я читать на английском то читаю, но как-то медленно, из-за этого сильно дело тормозится...
Справочник там какой электронный или еще что...
Номер ответа: 7
Автор ответа:
ActiveX
Вопросов: 0
Ответов: 73
Профиль | | #7
Добавлено: 30.09.04 22:33
Цитата :
0101 ДОГОВОР№3476 29587 290480 ЗАО"ЧЕРЕЗЗАБОРНОГУИТ.Д."
Вот мне надо на автомате все это дело разбить по разным ячейкам
Ответ :
Как много гениев в одном месте собралось, но никто может применить самый простой и действенный метод :
ActiveCell.TextToColumns Destination:=ActiveCell
' возможно потребуются дополнительные параметры (см. help)
___________________
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас.
Номер ответа: 8
Автор ответа:
Stas2k
Вопросов: 6
Ответов: 16
Профиль | | #8
Добавлено: 02.10.04 13:55
Отключение обновления экрана: Application.ScreenUpdating=False
Чтобы твоя программа работала быстрее сделай так, чтобы не перемещаться по ячейкам, а использовать ссылки на них. Например, присвоить ячейке "C2" значение 328 можно так: ActiveSheet.Cells(2,2)=328. Также можно загонять формулы и считывать атрибуты ячеек.
Отлов ошибок с помощью On Error GoTo Err, также читай справку.
Отключение вывода предупреждающих сообщений: Application.DispayAlerts=False
To ActiveX: Хорошо, что ты знаешь "самый простой и действенный способ", но зачем ёрничать? Форум для того и есть, чтобы обмениваться опытом.
Номер ответа: 9
Автор ответа:
ActiveX
Вопросов: 0
Ответов: 73
Профиль | | #9
Добавлено: 02.10.04 14:16
To Stas2k :
Сарказм необходим для того, чтобы заставить людей изучать MS Excel дабы впоследствии на форуме не возникало "бредовых" ответов на элементарные вопросы, которые можно решить стандартными средствами, даже не прибегая к помощи VBA.
Номер ответа: 10
Автор ответа:
night-roll
Вопросов: 36
Ответов: 326
Профиль | | #10
Добавлено: 02.10.04 15:54
а ещё есть архив этого форума, где можно найти ответы на некоторые вопросы (а может быть и все, пользуясь кнопочкой (см. ниже)
To Ruselus: не рекомендую задавать вопросы, если ответы на них ты собираешься использовать не сразу (а так, через время), по своему опыту могу сказать, что забывается или зачастую долго не понимается.
Номер ответа: 11
Автор ответа:
Ruselus
Вопросов: 1
Ответов: 3
Профиль | | #11
Добавлено: 02.10.04 17:35
To ActiveX => Большое спасибо за ответ.
Однако чтобы прервать ваш спор, вставлю цитату моего вопроса...
Т.е. потому и спросил потому что не знал.
To => night-roll
Да не, эти все вопросы как раз и возникают в процессе моей попытки написать конкретную прогу. К томуже я уже давно взял в привычку, все полученые мной ответы складировать в свой личный FAQ.
А ищу я обычно не на форумах а вообще в инете, некоторые вещи увы найти не удается. =(
Видимо из-за неправильной постановки вопроса.
Номер ответа: 12
Автор ответа:
ActiveX
Вопросов: 0
Ответов: 73
Профиль | | #12
Добавлено: 02.10.04 20:50
To Ruselus
Вопросы потому и задаются, что нет ответа или ответ не устраивает человека их задавшего, так что я сразу понял что именно Вам нужно поэтому и вынужден был вмешаться.
P.S. Спора никакого нет. А есть (было) послание человека (Stas2k) чьё самолюбие было ущемлено.