Страницы: 1
RSS
Формирование спецификаций по определенным строкам рабочей области
 
Добрый день уважаемые форумчане. Прошу помощи. Думаю задача тривиальная, но для дилетанта сложная:
Имеется рабочая область "work.xlsx"
Нужен макрос, который будет формировать спецификацию на поставку "спецификация.xls" (№ поставки в ячейке E2).

Проблемы дилетанта:  
1.Не знаю, как макросом присваивать значения в шаблоне «спецификация.xls» из определенной строки «work.xlsx» соответствующей № поставки.

Откликнувшимся заранее большое спасибо! :)

Не нужно валить все вопросы в одну кучу. Удалены.
Превышение допустимого размера вложения. Картинки удален
ы [МОДЕРАТОР]
 
С помощью sql запроса:
Файл work должен находится в папке c:\1\
При смене номера спецификации в С1 запрос обновит данные.
Изменено: TheBestOfTheBest - 27.04.2015 12:28:36
Неизлечимых болезней нет, есть неизлечимые люди.
 
Большое спасибо за столь быстрый ответ! Разбираюсь!

Кнопка цитирования не для ответа!
Пора читать правила
[МОДЕРАТОР]
Изменено: greendeem - 28.04.2015 00:21:27
 
TheBestOfTheBest, прошу прощения, но может вы поможете понять, синтаксис выражения:
WHERE m.`№Поставки`>0 and m.`№Спецификации`=?
Я так понимаю, "?" - в данном случае значение параметра1, которое берется из ячейки 'Сп РФ-РФ'!$C$1?
Может, соориентируете где подробнее изучить как этот параметр задается в excel?
Также сломал мозг пробуя изменить написанный вами sql запрос... К примеру, при изменении наименования выводимого столбца в теле sql запроса, столбец перемещается в крайнее правое положение... :qstn:
Изменено: greendeem - 27.04.2015 23:01:36
 
Цитата
greendeem написал:
1) WHERE m.`№Поставки`>0 and m.`№Спецификации`=?
2) Я так понимаю, "?" - в данном случае значение параметра1, которое берется из ячейки 'Сп РФ-РФ'!$C$1? соориентируете...
3)К примеру, при изменении наименования выводимого столбца в теле sql запроса...
1) m - это псевдоним вашей базы/таблицы - просто так назвал TheBest (в части FROM) - дальше использовал в части WHERE как название таблицы, а в кавычках название столбца, по которому накладывается условие
2) смотрите Данные - Подключения - Свойства - вкладка Определение - внизу кнопка Параметры... если захотите поменять ячейку...
3) этот "пример" вашего изменения запроса вы не показали (сам запрос)...

p.s. недавно я публиковала скрины и много ответов получила сама, от TheBest в том числе, - мы много нюансов рассмотрели, - если хотите, полистайте историю моих постов или постов TheBest или постов Андрей VG - выйдите на соответствующие ветки, где много ответов уже дано... успехов
 
Изменено: JeyCi - 28.04.2015 09:01:53
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Сделала лишь потому, что только учусь писать макросы. А т.к.только учусь - наверняка далеко не так коротко и оптимально, чем могло бы быть сделано.
У меня часто тут на сайте плохо отображается текст кода, поэтому текст макроса я кину вам файлом work.xlsm.

Форматы всякие (ширина колонок, шрифты и тп) - это уж сами.
Предполагается что номер спецификации и договора в рамках одной поставки будет один и тот же.
Ед изм - везде "кг"
ставка ндс - везде 18%
срок поставки - везде "27.05.2015", т.к. не указано иное
Вообще весь текст, идущий под таблицей в примере файла спецификации - он статичный, кроме числа "цена за всю партию"
Как это число прописью прописать тоже сами ищите.
Макет итоговой спецификации таков, что там не будет скрытых строк. весь текст пляшет от последнего заполненного в спецификации товара.
Вообще, думаю не нужно объяснять, что итоговый макет и исходная таблица (порядок и названия столбцов) должны быть неизменны.

Я задала так, чтобы название файла спецификации формировалось как "Спецификация" + номер поставки, т.е. вида "Спецификация2.xls"
Ну чтобы ошибка не выдавалась, т.к. единовременно может быть открыт только один файлс названием "Спецификация.xls"
При запуске макроса, файл work.xlsx должен быть открыт (что очевидно, т.к. там кнопка запуска, на которую вы планируете повесить макрос))
Текст макроса (из приложенного мною work.xlsm) помещаете в свою личную книгу макросов или как там вы хотите. и назначаете его на кнопку формирования спецификации.

Для проверки работы, откройте свой файл work.xlsx (задайте там в ячейке E2 нужный номер поставки), откройте мой файл work.xlsm. и жмите в нем на синюю кнопку.

Сформированные файлы спецификаций будут сохраняться у вас по пути, который задан по умолчанию (в большинстве случаев, это Мои документы). Чтобы изменить путь сохранения смотрите мои комментарии в тексте макроса.
 
anyarceva, и вам спасибо большое за подробный ответ!
Решение, предложенное TheBestOfTheBest, мне показалось очень гибким, но после неудачных попыток поправить sql запрос автора бросился изучать рекомендованные
JeyCi темы по использованию Sql в Excel.
Сегодня займусь вашим вариантом. В любом случае Большое человеческое спасибо за потраченное время. Не возражаете, если по непонятным вопросам по вашему варианту немного вас побеспокою?
Изменено: greendeem - 29.04.2015 20:24:59
 
Конечно, пишите. У меня там просто все: как я и написала просто "Для проверки работы, откройте свой файл work.xlsx (задайте там в ячейке E2 нужный номер поставки), откройте мой файл work.xlsm. и жмите в нем на синюю кнопку.  
 
Цитата
greendeem написал:
при изменении наименования выводимого столбца в теле sql запроса, столбец перемещается в крайнее правое положение...
Все верно, заново названный столбец является условно новым, а все новые столбцы добавляются справа. Изменить имя столбца можно оператором AS (м.СтароеИмя as НовоеИмя). Если в названии поля или нового имени есть знаки кроме букв и цифр то такое имя следует брать в хитрые кавычки `...` либо в [...]. MS Query берет в кавычки.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
anyarceva написал:
Конечно, пишите. У меня там просто все: как я и написала просто "Для проверки работы, откройте свой файл work.xlsx (задайте там в ячейке E2 нужный номер поставки), откройте мой файл work.xlsm. и жмите в нем на синюю кнопку.
спасибо! пытаюсь внести небольшие изменения в ваш макрос, и вот что не получается.

1.Не могли бы вы пояснить что именно делает строка:
Workbooks("work.xlsx" ).Sheets("main" ).Range("A5" ).AutoFilter
В вашей реализации фильтр устанавливается на диапазон A5:H5, не могу понять почему...

Такой вопрос возник потому что, когда я пытаюсь установить фильтр в нужной мне строке, у меня он почему-то устанавливается для первой строки.

2. .Range("A6:A" & lrow).SpecialCells(xlCellTypeVisible).Copy Destination:=Workbooks("Спецификация" & numb & ".xls" ).Sheets("Сп РФ-РФ" ).Range("A6" ) заносит в A6 спецификации содержимое диапазона  A6:A lrow, у меня в  диапазоне  A6:A lrow формулы, как присваивать A6 спецификации значения этих формул?
Изменено: greendeem - 05.05.2015 23:14:40
 
Цитата
как присваивать A6 спецификации значения этих формул?
Используйте специальную вставку
Код
.Range("A6:A" & lrow).SpecialCells(xlCellTypeVisible).Copy Workbooks("Спецификация" & numb & ".xls" ).Sheets("Сп РФ-РФ" ).Range("A6" ).PasteSpecial xlPasteValues
Страницы: 1
Наверх