|
|
|
| Задача вот какая: есть поле2, в нем запись напр. CryslerCrossfire 2003г.в. цвет красный, пробег 70000км. Из этого всего нужно вырезать например, модель: Crossfire и поставить ее в поле1. Далее то же по всем записям таблицы..
В общем, как это реализовать в коде VBA?
Спасибо большое | |
|
| |
|
|
|
| Задачи такого рода практически неразрешими и не гарантируют 100% правильности сепарации (разбора) данных
нужно было думать на стадии формирования таблицы-источника данных, чтобы данные заносились в определенные поля, как-то
марка
цвет
год выпуска
и т.д.
попробуйте использовать функцию Split() | |
|
| |
|
|
|
| Дело в том, что таблица-источник - это импортируемый файл, содающийся постоянно не мной, но постоянно мной импортируемый. Вообще моя задача - преобразовать исх. таблицу в таблицу должного мне вида.
А как именно можно использовать Split? и задать изначально в коде условие поиска [Crossfire] из всей записи?
На VBA практикуюсь, (нравиться в нем капаться) | |
|
| |
|
|
|
| Можно конечно создать в таблице с этими данными ещё одно поле
и в нём держать нужную фразу.
и досьавать их оттуда для второго поля или сразу они оттуда будут автоматом подставлятся при выборе в первое поле.
++++++++++++++++++++++++
Если всегда за назвнием идёт год выпуска то можно вырезать CryslerCrossfire , но никак не Crossfire т.к. неизвестно заранее длинна названия и т.д. | |
|
| |
|
|
|
| А можно ли задать условие поиска CryslerCrossfire (и всех прочих моделей), затем его заSplit-ить (не знаю как пока!) ну а далее уже обработать разбитый пробелом текст? | |
|
| |
|
|
|
|
| Нет точной позиции для фрагмента текста Crossfire, записи поля2, чтобы его найти. Может быть как то задать конкретно внутри кода "Crossfire", если сама модель (которая ищется - Crossfire) будет иметь пробелы с обеих сторон? | |
|
| |
|
|
|
| зачем пробелы?
InStr найдет вам начальную позицию, дальше вырезайте с помощью MID
если хотите в запросе, то можно иcпользовать LIKE | |
|
| |
|
|
|
| Osmor, я не совсем понимаю, как будет выглядеть.. часть кода вырезающая текст "Модель" и вставляющая этот текст в поле левее.. только начинаю разбираться в вижуале | |
|
| |
|
|
|
| если нужен кусок кода, то давайте задачу подробнее.
Сколько возможных "моделей", есть ли их полный список, если нет, то по каким "граничным" признака можно ыыделить "модель" из строки? | |
|
| |
|
|
|
| Нет, количество моделей ограничено. Вот модели "Crysler"-а: 300C, 300C Touring, Grand Voyager, PT Cruiser, Crossfire, Sebring.
Поле2 содержит: "CryslerCrossfire 2003г.в. цвет красный, пробег 70000км."
Примерно столько же для других производителей, но для одной модели наверное достаточно будет примера. Остальное аналогично можно будет...
(Такая же таблица есть по ПК, тоже импортится, но это похожая тема) | |
|
| |
|
|
|
| Выложи пример, поле2 с данными и чего хочешь из этого получить | |
|
| |
|
|
|
| да это было бы проще всего | |
|
| |
|
|
|
| Пример: Таблица: АВТО
Поле1 Поле2 Поле3
В Поле3 строка: CryslerCrossfire 2003г.в. цвет красный, пробег 70000км.
Хочу, чтобы в Поле1 скопирилось "Crysler"
в Поле2 скопирилось "Crossfire"
а все остальное осталось в Поле3.. Вот вся задача.
Под копированием понимаю
( Application.CutCopyMode = true) | |
|
| |
|
|
|
| "Выложи пример, поле2 с данными "
Имелось ввиду файлик MDB таблицей и куском данных в ней
Под копированием понимаю
( Application.CutCopyMode = true)
вот этого не понял | |
|
| |
|
|
|
| просто имел в виду, что не копирить, а вырезать-вставить. База как таковая не готова еще, в ней куча хлама, таблицу в ней пришлю сейчас. | |
|
| |
|
14 Кб. |
|
| База Catalogue
Табличка Tech содержит поле3, откуда нужно скопирить название позиции (т.е."Ноутбук") в поле1, название фирмы-производителя (т.е. напр. ASUStec) в поле2, остальное (описание модели) оставить в поле3; | |
|
| |
|
23 Кб. |
|
| Ну здесь то легко... это совсем другой случай, здесь есть разделитель (пробел) | |
|
| |
|
|
|
| В том и дело, что в другой табличке многое идет слитно. я еще позадаю вопросы по ней если многоуважаемые господа программисты не против | |
|
| |
|
|
|
| если поля идут слитно, то нужна таблица в которой отпределены те слова вхождения которых нужно искать. иначе невозможно их будет выделить | |
|
| |
|
|
|
| Osmor, а как сделать то же на VBA? Просто изначально, я планировал написать код, который бы делал много другого еще, ну и это вот копирование..
И как бы сделать в SQL, чтобы обойтись без доп. поля, т.е., чтобы оставшийся в поле3 текст, уходил бы напр. в память, а после обновления Поля3 (очистка) снова там появлялся.
Или же более тривиально наверное можно: после запроса - прибить поле Old и скопирить в Поле3 все из поле New... | |
|
| |
|
|
|
| можно и без дополнительного. дополнительное я ввел что бы продемонстрировать, что бы можно было запрос несколько раз запустить, иначе исходные данные затирались бы
Это и так на VBA сделано...просто не оформлено в виде отдельной функции. | |
|
| |
|
|
|
| Спасибо за помощь Osmor
Т.е. как я понял, надо объявить INSTR, MID, Left, right и len как функции, и так же их задать?
Буду теперь думать, как это все проделать....
"..Respect is everything.." | |
|
| |
|
|
|
| зачем что-то объявлять? эти функции стандартные функции VBA их нужно посто использовать | |
|
| |
|
|
|
| А ВЫ смотрели запрос "q " из базы "Catalogue" в конструкторе запросов
там используются эти непонятные пока для Вас функции
откройте хелп и спросите Left,- многое проясниться --чес слово | |
|
| |