Проблемы начинаются, если хочу открыть макросом Word, и с корректным перескакиванием туда-сюда. То в Excel не ищет, то в Word
Это переделанный мною, под собственные потребности, из приведенного примера выше код, который из Excel открывает Word, и переносит в Word из Excel нужное содержимое ячеек из строки в разные части документа Word (процедура "Сформироватьзаявки"). Как этот функционал реализован можно посмотреть во вложении. Разница как я понимаю только в том, что у меня обращение идет к ячейке, а не к именованному диапазону. И в вашем случае потребуется отказаться от цикла перехода на следующюю строку.
Послушайте, уважаемый, ваш код я посмотрел, естественно ничего не понял. Для меня это темный лес. Может вы уже посмотрели бы мой код и сказали бы ,что в нем не так. Макрос, при условии, что я открыл вордовский файл ручками - работает. Как открываю среlствами VBA - не работает. Я сам то понимаю, что идет путаница объектов и их свойств при переключении Екселя и Ворда, только реализовать не могу. В любом случае, кроме вас никто не ответил, так что премного благодарен. Только не отсылайте меня своими советами, что нужно сделать примерно то-то и то-то. Лучше напишите, что вот в такой то строке переменная задана неправильно и т.д.
Добавлено (24.07.2015, 19:24) --------------------------------------------- Решено
Set Имена = ActiveWorkbook.Names 'задается область именованных диапазонов в активной книге Excel
For Номер_Имени = 1 To Имена.Count 'проход в цикле по всем возможным именованным диапазонам Range(Имена(Номер_Имени)).Select 'находится очередной именованный диапазон из всех имен (Имена), под нужным номером (Номер_Имени) Selection.Copy 'копируется найденное в буфер обмена
On Error Resume Next 'в случае ошибки переход на следующую итерацию цикла Set objWrdApp = GetObject(, "Word.Application") If objWrdApp Is Nothing Then 'если приложение Word не запущено Set objWrdApp = CreateObject("Word.Application") 'назначается oWord как новый объект приложения Word objWrdApp.Visible = False 'True - отображать ход выполнения операций в приложении Word End If
Set objWrdDoc = objWrdApp.Documents.Open(ПутьШаблона) 'назначается objWrdDoc как документ Word для открытия
' Вставить в Word из буфера обмена Dim oWord As Object 'оператор переменной, назначает oWord, типа данных как объекта среды выполнения Dim oDocument As Object
Set oWord = GetObject(Class:="Word.Application") 'назначается oWord как объект класса приложения Word
Set oDocument = oWord.ActiveDocument 'назначается oDocument как активный документ Word
With oWord.Selection 'инициализируется поиск и выделение в активном документе .Find.ClearFormatting 'не учитывая формат текста поиска документа .Find.Replacement.ClearFormatting 'не учитывая формат текста замены документа .Find.Text = "Табл" & Номер_Имени 'найти текст .Find.Replacement.Text = "Табл" & Номер_Имени 'заменить текст .Find.Execute 'выполнить .Paste 'вставить из буфера обмена в активный документ с заменой выбранного текста End With
Next Номер_Имени 'переход к следующему именованному диапазону
'Закрыть документ Word, True - с сохранением, False - без сохранения objWrdDoc.Close True
Marat_A, мне кажется, что rimlynin заслуживает более искренней благодарности с вашей стороны. Вы пришли сюда почти с претензией, а ушли, благодаря ему, с работающим решением. Лично у меня не было никакого желания вам помогать после вашего:
ЦитатаMarat_A ()
Нет, ну вам конечно спасибо за ценные советы.Однако в соответствии с темой, "Чтобы вы хотели научится в Excel, но не знаете как?", я и задал вопрос. Если бы я сам умел, то и не спрашивал бы.
Всё-таки помощи приличные люди просят несколько в другой тональности.
Вы пришли сюда почти с претензией, а ушли, благодаря ему, с работающим решением
Я никому никаких претензий не предъявлял. И, кстати, сделал в итоге все сам. Кроме вашего форума, есть еще и интернет со множеством решений и советов. Ошибка в адаптации кода меня и тормозила, но в итоге решилось. Решение Римлянина подоспело через три дня после моей добавки "решено", в любом случае ему огромнейшее спасибо, как и вам за этот форум.
Здравствуйте, долгое время веду файл учета рабочих часов машин/работников. На каждую неделю в году свой рабочий лист, там расставляются рабочие часы машин + работников посменно, с учетом сверхурочных и т.д.Начал изучать применение формул в Эксель- решил немного облегчить свою жизнь. Суть проблемы- с убавлением/добавлением оборудования/работника надо переделывать все раб.листы до конца года. Хотелось бы чтоб данные брались из таблиц, "активные" отражались в таблице. Получаю список "активных" не могу сообразить, как расставить их на места ведь таблицы динамически меняются... Может кто предложит чего? Заранее спасибо!
Drew, здравствуйте. А кто заполняет недельные файлы? Это всегда плохо, когда разные периоды расположены на отдельных листах. Формулами, боюсь, вы тут не обойдётесь. Извлекать список активных работников / оборудования формулами можно, но вы же не хотите, чтобы прошлые периоды тоже динамически менялись? Поэтому единственный вариант - макросом...
Сам и заполняю; конечно не хочется, чтобы предыдущие периоды изменялись, но я тут подумал:"а что если неактивные просто каким-то образом станут невидимы??" Возможно, что плохо, но, к сожалению, до лучшего решения не додумался. А нельзя сделать, чтоб формулы вычислялись по нажатию кнопки? А как все-таки разместить динамически изменяющиеся элементы в нужные мне ячейки, может это мне поможет? Предыдущий проект стоил долгих усилий, но вроде получилось, что я задумал, это учет выдачи инструмента... Заранее благодарен!
Drew, здравствуйте. Кстати да, идея со скрытием строк хорошая. То есть вы на любой лист проецируете весь список сотрудников, а показываете только активных для текущей или будущей недели или только тех сотрудников, у которых были отметки о трудовой деятельности. По каждой строке вам надо будет рассчитать признак видимости (1/0). Технология скрытия изложена тут. Людей тащите формулой INDEX в её самом простейщем варианте - разберётесь.
Посмотрел ваш новый файл. Безобразие. Я, конечно, в эстонском не силён, но зачем вы наплодили таблиц с одинаковой структурой? Вы же потом опять намучаетесь.
Здравствуйте, Большое спасибо за ответ, постараюсь разобраться... Идея была разбить большой массив входных данных на подгруппы, куда было бы удобно добавлять новые элементы. Прошу прощения за эстонский, создавал для рабочих целей, переводить особого смысла нет, так как это файл учета выдачи инструмента со "склада". Честно говоря не очень понимаю, что в такой структуре плохо- добавить дополнительную позицию легко, удалять ничего не нужно, легко можно отсортировать по какому-либо критерию... Если не трудно, попробуйте схематически обрисовать более красивое решение задачи? всегда открыт для чего-то нового;) Заранее спасибо!
У вас есть какой-то признак, который вы используете для разделения таблиц учёта инструментов. Предположительно это наименование структурного подразделения, где эксплуатируются инструменты. То есть на каждое подразделение - своя таблица учёта инструментов. Таким образом единый процесс, который вы собираетесь контролировать в ЦЕЛОМ, вы (своими руками) разбиваете на несколько объектов учёта, вместо того, чтобы сконцентрировать все данные в одном месте. А поскольку вы должны контролировать этот процесс по всему предприятию, то вы просто усложняете себе работу по: консолидации учёта инструментов (одно дело, когда всё находится в одной таблице, и другое, когда в 10), по созданию отчётности, по банальному обслуживанию данных (представьте, что вы решили поменять структуру таблиц) и т.д. Логика - та же самая, что и при проектировании структур реляционных баз данных. Там есть такое понятие, как нормализация базы данных. Мой вам совет: храните все в одной таблице. Это сильно облегчит вам жизнь. Понятное дело, что в чём-то усложнит, но это усложнение будет связано с благодарной работой, в процессе которой вы будете узнавать что-то новое, а не с механической, тупой работой по преодолению своих архитектурных ошибок.
Здравствуйте, Спасибо за пояснение, попытаюсь осмыслить...
Добавлено (27.09.2015, 14:17) --------------------------------------------- Здравствуйте, Наконец разобрался, как посмотреть Ваши макросы, проблемка - все комметарии и некоторые названия "кракозябры". Пробовал в Нотепад плюс-плюс перекодировать, почему-то ничего не получается. Не подскажете, как решить эту проблемку? Заранее спасибо. Обдумал Ваши аргументы по структуре таблицы, изменения последуют, спасибо!
Сообщение отредактировал Drew - Понедельник, 28.09.2015, 20:05
помогите плиз с такой задачей: есть эксель таблица, с данными в 2-х столбцах,номера чертежей с дэшами, нужно сформировать третий столбец , который выдает значение из первого с учетом совпадения дэш номера со вторым столбцом. Пример : 1-ый столбец 999Е8888-256; 2-ой столбец 888Е7777-256. Если дэши "-256" совпали , то нужен 3-ий столбец со значением из 1-ого, т.е 999Е8888-256. Спасибо