Страницы: 1
RSS
Печать актов по данным из двух таблиц
 
Добрый день. Подскажите пожалуйста как реализовать следующий функционал:
Есть таблица с данными (в примере это лист "исходные данные")
Есть список актов с номерами и фамилиями ( в примере это лист "исходные данные 2")
Нужно на основание списка актов сформировать акт и напечатать его, количество актов будет равно количеству номеров.
В форме для печати будет менятся номер акта, дата, и строки самого акта. Отбор данных в акт производится по фамилии, но тут такой момент, фамилии в таблице "исходные данные" написаны на латинице, а в таблице "исходные данные 2" кирилицей, для этого думаю сделать таблицу соответствия и первым делом заменить имена и фамилия на русские. На печать строки соответствующие фамилии "ответственный" / "сотрудник"

Таблица "исходные данные" в реальности очень большая во обоих направлениях, нужные для печати столбцы можно найти по заголовку столбца

Большое спасибо.
Изменено: mrtopgun - 15.07.2015 16:48:10
 
Для печати актов можете попробовать одну из этих надстроек для Excel:
http://excelvba.ru/articles/Complete_Form

Подтянуть данные из таблицы соответствий можно формулой =ВПР()
Впрочем, можно попробовать применить функцию транслитерации, - чтобы обойтись без таблицы соответствий:
http://excelvba.ru/code/translit
http://excelvba.ru/code/TranslitAddin
 
Игорь,  Спасибо за ответ. Реализовать все хочется в виде макроса.
Как вообще такие задачи реализуются в виде плана действий,  у меня в голове крутится так:
1. перевести в транслит столбец с фамилиями
2. "выдернуть" нужные столбцы с данными для печати на новый лист
3. дольше цикл подстановки в форму для печати номер акта дата и строки содержашие определённую фамилию потом печать,  следующий номер дата фамилия

в правильном направление рассуждают?
Изменено: mrtopgun - 15.07.2015 17:55:22
 
Уважаемые специалисты,  направте в нужное русло.

спасибо.
 
кладем файл в папку C:\1\
На листе "печатная форма" в D1 выбираем нужный акт. Таблица обновляется автоматически.
Если надо обновить список актов в выборе D1, то двойной клик на D1, список берется с листа Исходные данные 2.
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, Спасибо,  за ответ.  работает.  Будьте добры объясните код.
Изменено: mrtopgun - 16.07.2015 18:29:14
 
какой код? какой конкретно код?
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, вот этот. Как это работает?
Код
Sub Список(Optional Target As Range)
'добавляет в ячейку список проверки/выбора
Dim InVal() As Variant
Dim OutVal() As Variant
Dim OutVal2 As String
If TypeName(Target) <> "Range" Then Set Target = ThisWorkbook.Worksheets("Печатная форма").Range("D1")
InVal = ThisWorkbook.Worksheets("Исходные данные 2").Range("E1:E100").Value
Set dicRow = CreateObject("scripting.dictionary")
    With dicRow
        .comparemode = 1
        .Add InVal(1, 1), 1
        For i = 1 To UBound(InVal, 1)
            If Not .Exists(InVal(i, 1)) Then .Add InVal(i, 1), InVal(i, 1)
        Next i
        .Remove (InVal(1, 1))
        OutVal = .keys
    End With
    With Target.Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=Join(OutVal, ",")
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Range("D1").Select
End Sub


Или это только часть? Где еще смотреть? Как это можно перенести на реальную таблицу, какие условия нужно соблюсти?
Изменено: mrtopgun - 16.07.2015 19:24:23
 
Это формирует список проверки. Можете стереть из файла этот код, таблица будет работать.
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, Киким образом можно перенести на другую таблицу?
Работа с этим файлом построена следующим образом:
Изначально получаю таблицу "исходные данные",  потом формируют сам "исходные данные 2" таблица соответствия удобнее хранить в отдельном файле,  она будет очень редко меняться. форма для печати тоже не меняется заголовок,  можно хранить с таблицей соответствия.  Удобнее было  бы наверно при получение "исходных данных"  запустить макрос который и собирает всю информацию в печатную форму.  находит нужные столбцы с информацией и выводить печатную форму в соответствии с фамилией.
 
Цитата
mrtopgun написал: Киким образом можно перенести на другую таблицу?
см. Данные - Подключения - Свойства - Определения
в др файле создать подключение (например, пост 23) и назначить соответствующий запрос (текст команды)... или видоизменить его если нужны др столбцы в др "соотношении" др к др...
p.s. если структура начальных данных всегда одинакова (количество столбцов и их названия) - то на вкладке Данные - Обновить... и не нужен макрос - очень удобно
p.p.s support.office.com Извлечение внешних данных с помощью Microsoft Query
Изменено: JeyCi - 17.07.2015 10:25:34
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
mrtopgun написал: Удобнее было  бы наверно
Как пожелаете. Сейчас Печатная форма "смотрит" на тот файл, где она находится. Вам ничего не мешает это изменить и даже написать макрос, который это меняет. Я лишь сделал это:
Цитата
mrtopgun написал:   направте в нужное русло.
Неизлечимых болезней нет, есть неизлечимые люди.
 
JeyCi, TheBestOfTheBest, Спасибо большое,  пока изучаю вопрос,  с таким методом вообще не знаком.
 
пост#23 по линку выше - это пример параметрического запроса - у вас проще - вопросительный знак ставить не надо для задания параметра для запроса... когда будете его создавать... в свойствах подключения в Определении конструкцию запроса можно менять (вставить из файла TheBest'a, например - если структура данных идентична) - вобщем, изучайте, экспериментируйте - очень облегчает жизнь  - Использование Microsoft Query

Изменено: JeyCi - 17.07.2015 13:37:53
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Всем привет. С Microsoft Query немного разобрался,  но ни как не получается сформировать правильно запрос на выборку строк.
Как написать: выдать строки из столбцов 12,13,20,23 листа 1 содержащих в столбце 9  листа 1 часть значения столбца 7 листа 3?
часть значения имеется ввиду в столбце 7 указанно фамилия без имени,  а в столбце 9 полностью имя и фамилия,  нужно чтобы нашёл наиболее совпадающее значения.

Спасибо.
Изменено: mrtopgun - 23.07.2015 15:45:38
 
- нужно использовать sql-запрос (отдельный язык, отдельная тема, отдельный файл, отражающий, что не получается... и, отдельный запрос в google - путь ведь указан)
SQL за 10 минут
www.sql.ru/forum
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, Спасибо, все читаю изучаю, но понимание приходит не сразу.
Вот такой запрос работает корректно, если значения столбцов полностью совпадаю, а в моем случае в столбце 7 листа 3 есть только фамилия.
Понял, что нужно добавить знак %, но ни как не получается и с кавычками и всяко добавлял, помогайте:

select F12, F11, f23, f20, `'3$'`.Получил1
from `'1$'`, `'3$'` WHERE `'1$'`.F9 LIKE `'3$'`.Получил1;

И еще почему-то не работает если из select убрать `'3$'`.Получил1, этот столбец мне для вывода не нужен только для сравнения с `'1$'`.F9

Огромноe спасибо.
Изменено: mrtopgun - 23.07.2015 19:07:39
 
Цитата
mrtopgun написал: помогайте
помогут ваши подчинённые, не я
Изменено: JeyCi - 23.07.2015 21:35:54
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
с запросом разобрался выдаёт теперь то,  что нужно
получилось так select F12, F11, f23, f20, `'3$'`.Получил1
from `'1$'`, `'3$'` WHERE `'1$'`.F9 LIKE `'3$'`.Получил1+'%';  подсказали на форуме sql.ru
Остается макрос написать который перебирает данные и печатает акты,  как обращаться к таблице Microsoft Query из vba?
Страницы: 1
Читают тему
Наверх