Форум пользователей Visio http://visio.getbb.ru/ |
|
Копирование листа http://visio.getbb.ru/viewtopic.php?f=6&t=1049 |
Страница 1 из 4 |
Автор: | Alex_ST [ 11 ноя 2016, 14:26 ] |
Заголовок сообщения: | Копирование листа |
Т.к. по не известной мне причине топик Перенос элементов управления на другой лист залочили, то продолжу здесь. К тому же вопрос с автоматическим выполнением (автозапуском) необходимого набора макросов при старте Visio, как это реализовано в Excel и Word, так до конца и не решён, поэтому я решил ВРЕМЕННО (надеюсь) взять за правило всегда начинать работу с Visio с ручного открытия документа-сборника необходимых для настройки интерфейса программы "под себя" макросов путём тупого нажатия единственной CommandButton , размещённой на единственном листе документа. (блин, ну и фраза получилась ) Проще: в начале работы открываю документ с макросами, настраивающими интерфейс так, как мне нужно, а потом макросы вызываются кнопкой на листе. Т.к. версии Visio у всех разные и менюшки/табы, соответственно, тоже разные, то кнопки вызова дорабатывающих интерфейс макросов, естественно, должны располагаться в не изменяемых от версии к версии панелях управления/вкладках. Таких мест всего два: контекстно-изменяемое меню, всплывающее по ПКМ на выбранном элементе/группе (с ним работать - одно мучение, на Excel я уже намучился) и меню, всплывающее по ПКМ на ярлыке листа - ТО, ЧТО НАДО!!! Туда и буду вставлять кнопки вызова процедур. Первым делом пришлось "прошерстить" интерфейс приложения на предмет выяснения .Name и .NameLocal менюшек, чтобы их потом можно было изменять программно. Чтобы легче было однозначно "опознать" панели управления, решил, что кроме .Name и .NameLocal надо выводить ещё и перечень элементов управления, входящих в них. Для этого написал простейшую процедуру: Код: Sub test_CommandBars() Результат скопировал из окна Immediate VBE, вставил его в Excel и применил "текст по столбцам", указав как разделитель символ "|".Dim oBar As CommandBar Dim oCtr As Controls Dim stext$, i% For Each oBar In Application.CommandBars With oBar stext = .Index & " | " & .Name & " | " & .NameLocal & " >> " For i = 1 To oBar.Controls.Count stext = stext & "|" & .Controls.Item(i).Caption Next i Debug.Print stext End With Next oBar End Sub Выяснил, что меню таба листа имеет .Name="Page Tab", .NameLocal="Вкладка страницы", .index=67 (ну, это, вполне возможно, только у меня, поэтому на него лучше не опираться). А дальше уже проще. По аналогии с тем, как я "калечил" интерфейс Excel написал процедуру, добавляющую в меню по ПКМ на ярлыке листа выпадающую менюшку с двумя пунктами: "Дуплицировать здесь" и "Дуплицировать в открытый документ...": Код: Sub AddButtons() '--------------------------------------------------------------------------------------- ' Procedure : AddButtons ' Author : Alex_ST ' Topic_HEADER : Копирование листа ' Topic_URL : http://visio.getbb.ru/viewtopic.php?f=6&t=1049 ' Post_Author : Alex_ST ' Post_URL : ' DateTime : 11.11.2016, 12:43 ' Purpose : Добавление меню копирования листа в интерфейс Visio ' Notes : '--------------------------------------------------------------------------------------- ' Задаём имена (так удобнее - только в одном месте процедуры) Dim sCBarName$: sCBarName = "Page Tab" Dim sCBarNameLocal$: sCBarNameLocal = "Вкладка страницы" ' имя панели управления Dim sControlCaption$: sControlCaption = "Копирование страницы" ' отображаемое в интерфейсе имя Dim OnActArr: OnActArr = Array("Duplucate_Here", "Duplucate_Here_To") ' имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню Dim CaptArr: CaptArr = Array("Дуплицировать здесь", "Дуплицировать в открытый документ...") ' имена пунктов нового меню, вызывающих процедуры Dim i% ' Создаём дополнительное меню в указанной панели управления On Error Resume Next Application.CommandBars(sCBarName).Controls(sCBarName).Delete 'на всякий случай попробуем удалить существующее меню, чтобы не было дублирования With Application.CommandBars(sCBarName) With .Controls.Add(Type:=msoControlPopup) ' добавляем меню в панель управления .Caption = sControlCaption .TooltipText = sCBarName For i = 0 To UBound(OnActArr) ' добавляем в меню кнопки вызова процедур With .Controls.Add(Type:=msoControlButton, Temporary:=False) .OnAction = OnActArr(i) .Caption = CaptArr(i) .Style = 2 ' msoButtonAutomatic=0 ' msoButtonIcon=1 ' msoButtonCaption=2 ' msoButtonIconAndCaption=3 ' msoButtonIconAndWrapCaption=7 ' msoButtonWrapCaption=14 ' msoButtonIconAndCaptionBelow=11 ' msoButtonIconAndWrapCaptionBelow=15 End With Next i End With End With End Sub Ну и для отладки: Код: Sub DelButtons() ' нужно только для тестирования - чтобы можно было легко удалить любое меню Dim sCBarName$: sCBarName = "Page Tab" Dim sControlCaption$: sControlCaption = "Копирование страницы" On Error Resume Next Application.CommandBars(sCBarName).Controls(sControlCaption).Delete End Sub Теперь осталось "всего лишь" допилить процедуры копирования листа, основываясь на процедурах, описанных Surrogate в ЭТОМ топике Есть энтузиасты, которые напишут процедуры? (у меня свободное время на работе кончилось, а дома я не пишу) ----------------------- Упс! А топик-то почистили и процедур там уже нет... |
Автор: | Surrogate [ 11 ноя 2016, 14:36 ] |
Заголовок сообщения: | Re: Копирование листа |
Alex_ST писал(а): топик Перенос элементов управления на другой лист залочили не может быть ! вроде значка с замком не теме нет - только что разместил там сообщение от имени анонимоусаAlex_ST писал(а): упс! А топик-то почистили и процедур там уже нет... упс. я не про тот топик подумал ! а что именно почистили ?Alex_ST писал(а): Для этого написал простейшую процедуру: я тоже недавно хотел сделать что-то подобное. в эксель свести информацию по командам на тулбарах/риббонах. пригодится
|
Автор: | Alex_ST [ 11 ноя 2016, 14:54 ] |
Заголовок сообщения: | Re: Копирование листа |
Surrogate писал(а): пригодится Юзай, пожалуйста. Мне не жалко. На СВОИ авторские права в VBA я обычно плюю (ни разу в жизни ни сам не заплатил ни за одну программу, ни бабла за "плоды своих трудов" не получал - "Скачал-не украл!")
|
Автор: | Alex_ST [ 11 ноя 2016, 14:56 ] |
Заголовок сообщения: | Re: Копирование листа |
Саш, может быть сам подпилишь свою процедуру, чтобы получилось законченное решение? (с копированием в уже открытый документ можно и потом разобраться, какой-никакой, а опыт есть) |
Автор: | Surrogate [ 11 ноя 2016, 15:03 ] |
Заголовок сообщения: | Re: Копирование листа |
Alex_ST писал(а): дома я не пишу ничего я и дома пишу. посмотрю в выходныеAlex_ST писал(а): может быть сам подпилишь свою процедуру, чтобы получилось законченное решение? Алексей, а какое техзадание ? что именно допилить ?
|
Автор: | Alex_ST [ 11 ноя 2016, 15:08 ] |
Заголовок сообщения: | Re: Копирование листа |
К стати, с постами я и сам уже запутался окончательно... Процедуру копирования ты, оказывается, выкладывал ЗДЕСЬ ------------------- А подпилить нужно всего-то имя процедуры, чтобы подцепить её по .OnAction и проверитьь работу "во всех позах" Ну и саму процедуру проверить на обращение к ActiveDocument а не к ThisDocument У меня, реально, сейчас вдруг завал. Не до программирования. |
Автор: | Surrogate [ 11 ноя 2016, 15:35 ] |
Заголовок сообщения: | Re: Копирование листа |
Alex_ST писал(а): А подпилить нужно всего-то имя процедуры, чтобы подцепить её по .OnAction и проверитьь работу "во всех позах" ok, как с ленточным интерфейсом это сделать я примерно знаю. а вот с классикой надо еще посмотреть !Alex_ST писал(а): Мне не жалко. На СВОИ авторские права в VBA я тоже так думал до определенной поры. был у нас один пилотный проект установки оборудования для нескольких регионов. мы разобрались с новым для нас оборудованием (первый в России был подобный проект), что как и куда подключается. В общем было масса нюансов, мы набили немало шишек в процессе, я прикрутил туда не хилую автоматизацию. А потом наш Заказчик, попросил нашего Продавца наши исходники в визио. Тот "добрая душа" отдал, в итоге на оставшиеся 70 с лишним регионов наш Заказчик отдал не нашей конторе проектировать !!! Наши конкуренты с радостью воспользовались готовыми решениями. Не все правда догадались правда, как пользоваться автоматизацией - но это слабое утешение…После этого выработал себе правило: не храню код, который автоматизирует рабочие вопросы в целевых файлах !!! |
Автор: | Alex_ST [ 11 ноя 2016, 15:47 ] |
Заголовок сообщения: | Re: Копирование листа |
Surrogate писал(а): ok, как с ленточным интерфейсом это сделать я примерно знаю. а вот с классикой надо еще посмотреть ! А я как раз поэтому именно к меню ярлыка листа процедуры и прицеплял, что ярлык во всех Офисах одинаковый.Кроме того ещё и не стал указывать при добавлении меню, куда его надо вставлять (Before:=…) , чтобы по умолчанию в конец меню добавилось. |
Автор: | Surrogate [ 12 ноя 2016, 02:50 ] | ||
Заголовок сообщения: | Re: Копирование листа | ||
Alex_ST писал(а): подпилить нужно всего-то имя процедуры, чтобы подцепить её по .OnAction и проверить работу "во всех позах" тут все просто нужно лишь указать где находятся процедуры Duplucate_Here и Duplucate_Here_To в модуле класса ThisDocument (!) или в каком-то из модулей и т.п. надо лишь одну строчку поправить. например если процедуры сидят в ThisDocument Dim OnActArr: OnActArr = Array("ThisDocument.Duplucate_Here", "ThisDocument.Duplucate_Here_To") ' имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню Alex_ST писал(а): процедуру проверить на обращение к ActiveDocument а не к ThisDocument поэкспериментировал с размещением кода в стенсил в этом случае надо еще прописать имя проекта 9rey в сообщении #4506 писал(а): .OnAction = "Prj_name!ThisDocument.Main" Prj_name имя проекта в стенсиле. Dim OnActArr: OnActArr = Array("ForAlexST!ThisDocument.Duplucate_Here", "ForAlexST!ThisDocument.Duplucate_Here_To") также надо добавить обработчики событий открытия стенсила и перед закрытием стенсила - которые будут добавлять/убирать это кастомное меню! Код: Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
DelButtons End Sub Private Sub Document_DocumentOpened(ByVal doc As IVDocument) AddButtons End Sub
|
Автор: | Shishok [ 12 ноя 2016, 09:59 ] |
Заголовок сообщения: | Re: Копирование листа |
Цитата: также надо добавить обработчики событий открытия стенсила и перед закрытием стенсила - которые будут добавлять/убирать это кастомное меню! Не знаю как у кого, но у меня это меню пропадает при закрытии документа и последующем открытии. Так что может вот это и не нужно: Код: Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
|
Автор: | Surrogate [ 12 ноя 2016, 13:54 ] |
Заголовок сообщения: | Re: Копирование листа |
у меня вроде все ОК, тестил в визио 2003, 2010 и 2016! на всякий случай опубликую содержимое модуля класса ThisDocument из этого стенсила Код: Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
DelButtons End Sub Private Sub Document_DocumentOpened(ByVal doc As IVDocument) AddButtons End Sub Sub AddButtons() '--------------------------------------------------------------------------------------- ' Procedure : AddButtons ' Author : Alex_ST ' Topic_HEADER : Копирование листа ' Topic_URL : http://visio.getbb.ru/viewtopic.php?f=6&t=1049 ' Post_Author : Alex_ST ' Post_URL : ' DateTime : 11.11.2016, 12:43 ' Purpose : Добавление меню копирования листа в интерфейс Visio ' Notes : '--------------------------------------------------------------------------------------- ' Задаём имена (так удобнее - только в одном месте процедуры) Dim sCBarName$: sCBarName = "Page Tab" Dim sCBarNameLocal$: sCBarNameLocal = "Вкладка страницы" ' имя панели управления Dim sControlCaption$: sControlCaption = "Копирование страницы" ' отображаемое в интерфейсе имя Dim OnActArr: OnActArr = Array("ForAlexST!ThisDocument.Duplucate_Here", "ForAlexST!ThisDocument.Duplucate_Here_To") ' имена процедур, вызываемых ИЗ МОДУЛЕЙ ЭТОГО ЖЕ ДОКУМЕНТА при нажатии на кнопки нового меню Dim CaptArr: CaptArr = Array("Дуплицировать здесь", "Дуплицировать в открытый документ...") ' имена пунктов нового меню, вызывающих процедуры Dim i% ' Создаём дополнительное меню в указанной панели управления On Error Resume Next Application.CommandBars(sCBarName).Controls(sCBarName).Delete 'на всякий случай попробуем удалить существующее меню, чтобы не было дублирования With Application.CommandBars(sCBarName) With .Controls.Add(Type:=msoControlPopup) ' добавляем меню в панель управления .Caption = sControlCaption .TooltipText = sCBarName For i = 0 To UBound(OnActArr) ' добавляем в меню кнопки вызова процедур With .Controls.Add(Type:=msoControlButton, Temporary:=False) .OnAction = OnActArr(i) .Caption = CaptArr(i) .Style = 2 ' msoButtonAutomatic=0 ' msoButtonIcon=1 ' msoButtonCaption=2 ' msoButtonIconAndCaption=3 ' msoButtonIconAndWrapCaption=7 ' msoButtonWrapCaption=14 ' msoButtonIconAndCaptionBelow=11 ' msoButtonIconAndWrapCaptionBelow=15 End With Next i End With End With End Sub Sub Duplucate_Here() MsgBox "Duplucate_Here" ' пока здесь пусто End Sub Sub Duplucate_Here_To() MsgBox "Duplucate_Here_То" ' пока здесь пусто End Sub Sub DelButtons() ' нужно только для тестирования - чтобы можно было легко удалить любое меню Dim sCBarName$: sCBarName = "Page Tab" Dim sControlCaption$: sControlCaption = "Копирование страницы" On Error Resume Next Application.CommandBars("Page Tab").Controls("Копирование страницы").Delete End Sub |
Автор: | Shishok [ 12 ноя 2016, 14:03 ] |
Заголовок сообщения: | Re: Копирование листа |
А я себе сделал из твоего Surrogate кода: Код: Sub Duplucate_Here()
Dim arrPage(7) As String, oPage As Visio.Page, oPage1 As Visio.Page, oGroup As Visio.Shape Set oPage = ActivePage Call GetPageSettings(oPage, arrPage) ActiveWindow.SelectAll Set oGroup = ActiveWindow.Selection.Group Call EditFormulas(oGroup) oGroup.Copy Set oPage1 = ActiveDocument.Pages.Add Call SetPageSettings(oPage1, arrPage) oPage1.Paste ActiveWindow.Selection.Ungroup ActiveWindow.Page = oPage oGroup.Ungroup ActiveWindow.DeselectAll End Sub Sub Duplucate_Here_To() Dim arrPage(7) As String, oPage As Visio.Page, oPage1 As Visio.Page Dim oActiveDoc As Visio.Document, oOtherDoc As Visio.Document, oDoc As Visio.Document Dim oGroup As Visio.Shape, oActiveWindow As Visio.Window Set oActiveDoc = ActiveDocument Set oActiveWindow = ActiveWindow For Each oDoc In Application.Documents If oDoc.Name <> oActiveDoc.Name Then If Not oDoc.Name Like "*.vss*" Then Set oOtherDoc = oDoc Exit For End If End If Next Set oPage = ActivePage Call GetPageSettings(oPage, arrPage) ActiveWindow.SelectAll Set oGroup = ActiveWindow.Selection.Group Call EditFormulas(oGroup) oGroup.Copy Windows.Item(2).Activate Set oPage1 = oOtherDoc.Pages.Add Call SetPageSettings(oPage1, arrPage) oPage1.Paste ActiveWindow.Selection.Ungroup ActiveWindow.DeselectAll oActiveWindow.Activate oGroup.Ungroup ActiveWindow.DeselectAll End Sub Private Sub GetPageSettings(oPage As Visio.Page, arrPage) With oPage.PageSheet arrPage(0) = .CellsSRC(1, visRowPage, visPageDrawingScale).FormulaU arrPage(1) = .CellsSRC(1, visRowPage, visPageScale).FormulaU arrPage(2) = .CellsSRC(1, visRowPage, visPageWidth).FormulaU arrPage(3) = .CellsSRC(1, visRowPage, visPageHeight).FormulaU arrPage(4) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesLeftMargin).FormulaU arrPage(5) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesRightMargin).FormulaU arrPage(6) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesTopMargin).FormulaU arrPage(7) = .CellsSRC(1, visRowPrintProperties, visPrintPropertiesBottomMargin).FormulaU End With End Sub Private Sub EditFormulas(oGroup As Visio.Shape) Dim pinx As String, piny As String With oGroup pinx = .Cells("Pinx").FormulaU: pinx = "Guard(" & pinx & ")" piny = .Cells("PinY").FormulaU: piny = "Guard(" & piny & ")" .Cells("Pinx").FormulaU = pinx .Cells("Piny").FormulaU = piny End With End Sub Private Sub SetPageSettings(oPage1 As Visio.Page, arrPage) With oPage1.PageSheet .CellsSRC(1, visRowPage, visPageDrawingScale).FormulaForceU = arrPage(0) .CellsSRC(1, visRowPage, visPageScale).FormulaForceU = arrPage(1) .CellsSRC(1, visRowPage, visPageWidth).FormulaForceU = arrPage(2) .CellsSRC(1, visRowPage, visPageHeight).FormulaForceU = arrPage(3) .CellsSRC(1, visRowPrintProperties, visPrintPropertiesLeftMargin).FormulaForceU = arrPage(4) .CellsSRC(1, visRowPrintProperties, visPrintPropertiesRightMargin).FormulaForceU = arrPage(5) .CellsSRC(1, visRowPrintProperties, visPrintPropertiesTopMargin).FormulaForceU = arrPage(6) .CellsSRC(1, visRowPrintProperties, visPrintPropertiesBottomMargin).FormulaForceU = arrPage(7) End With End Sub |
Автор: | Shishok [ 12 ноя 2016, 14:06 ] |
Заголовок сообщения: | Re: Копирование листа |
А менюшка так и пропадает из таба страницы. ХЗ. |
Автор: | Surrogate [ 12 ноя 2016, 14:33 ] |
Заголовок сообщения: | Re: Копирование листа |
Shishok писал(а): А менюшка так и пропадает из таба страницы а стенсил ForAlexST.vss к документу погрузил ?если убрать из кода модуль Document_BeforeDocumentClose, то после закрытия стенсила наше меню выглядит так строка Копирование страницы есть, а выпадающего списка уже нет ! |
Автор: | Alex_ST [ 12 ноя 2016, 14:56 ] |
Заголовок сообщения: | Re: Копирование листа |
Привет, ребята! Я на полчасика заглянул всего. Дома к тому же Visio на новый комп не поставил за ненадобностью. Поэтому, хоть стенсил с макросами скачать и могу (не то, что на работе ), но поэкспериментировать, к сожалению, не могу Поэтому чисто теоретизирую. Саша, а стенсил, надеюсь, не закрыл? Ведь процедуры-то все в нём. А убиение менюшки в Document_BeforeDocumentClose я поставить просто забыл, т.к. выкладывал не весь проект, а только часть кода. А после перезапуска приложения созданные программно элементы управления (по крайней мере в Excel) обычно не восстанавливаются, т.к. по умолчанию методом .Add они создаются с со значением опционального аргумента Temporary:=True Скорее всего так же и в Visio К стати, в Excel у панелей управления есть метод .Reset, поэтому перед закрытием модуля можно не удалять созданное, а просто сбросить. Вот как это сделано у меня в процедуре надстройки "Управление видимостью листов": Код: Sub My_Menu_Reset() (В Excel "Ply" - это имя меню ярлыка листа).Application.CommandBars("Ply").Reset End Sub Наверное, и в Visio есть такой метод? --- вы должны быть зарегистрированным пользователем, чтобы прочитать это содержимое --- |
Автор: | Surrogate [ 12 ноя 2016, 16:35 ] |
Заголовок сообщения: | Re: Копирование листа |
Alex_ST писал(а): Саша, а стенсил, надеюсь, не закрыл? Ведь процедуры-то все в нём. в смысле закрыл ? да и весь листинг кода из стенсила, я приводил выше --- вы должны быть зарегистрированным пользователем, чтобы прочитать это содержимое --- |
Автор: | Alex_ST [ 12 ноя 2016, 20:04 ] |
Заголовок сообщения: | Re: Копирование листа |
Оффтоп:
Surrogate писал(а): ленточный интерфейс на котором еще почти ничего не видно Ну, тогда 2013 - это точно не для меня. Зрение в последнее время стало ни к чёрту. Слишком много в монитор пялюсь, наверное.С Ribbon-интерфейсом, если он хорошо структурирован и интуитивно понятен я ещё как-то смог бы смириться (но только в Visio, где мне просто негде хранить общие для всех книг макросы, но уж никак не в Excel и Word, которые набиты макросами, самодельными менюшками и кнопочками). А вот то, что, несмотря на далеко не бетта-версию, там фиг чего найдёшь - это для меня главный и перевешивающий практически все плюсы недостаток. |
Автор: | Surrogate [ 13 ноя 2016, 01:59 ] |
Заголовок сообщения: | Re: Копирование листа |
Alex_ST писал(а): где мне просто негде хранить общие для всех книг макросы можно на форуме МС оставлять свои пожелания (скорее к будущим версиям) Surrogate в сообщении #10221 писал(а): я там разместил несколько своих пожеланий кстати: Local storage for macros, which available for all documents Alex_ST писал(а): А вот то, что, несмотря на далеко не бетта-версию, там фиг чего найдёшь это только в версии 2016 смогли порешать разработчики из MS https://support.office.com/ru-ru/ в статье Новые возможности Visio 2016 писал(а): На ленте Visio 2016 есть текстовое поле Что вы хотите сделать?. В него можно вводить слова и фразы, описывающие то, что вы хотите сделать. Кроме того, с помощью этого поля можно получить справку по интересующей вас теме. http://unmanagedvisio.com/ в статье Поиск команд Visio писал(а): Данный бесплатный плагин для Visio позволяет быстро найти команды в Visio. Если Вы используете Visio 2010/2013 то возможно Вы сталкивались с ситуацией когда опция или команда, легко доступная в предыдущих версиях, оказалась глубоко запрятанной. С помощью данного плагина найти такую команду можно просто набрав ее название |
Автор: | Alex_ST [ 13 ноя 2016, 12:49 ] |
Заголовок сообщения: | Re: Копирование листа |
Оффтоп:
Поставил вчера вечером на домашний комп (Win-7x64) Visio-2013... Ну, в общем-то нечто подобное и ожидал. Действительно, перейти с классического интерфейса, если к нему уже успел хорошо привыкнуть, на Ribbon (ленточный) очень трудно и, если это возможно, то проще оставаться на "старье", особенно, если привык настраивать всё "под себя". Я, к стати, до сих пор и дома, и на работе сижу на Excel, Word-2003 Visio-2007 именно из-за классических интерфейсов. И вообще-то особых неудобств от этого не испытываю. В общем, наверное и дома откачусь на Visio-2007 и придётся мне тему топика добивать. ------------------- P.S. За наводку на надстройку спасибо. Нашёл на сайте автора, где её можно скачать Радует, что можно искать на любом языке, а не только по-английски. Попробую. Но что-то мне подсказывает, что даже с этим "протезом для увечного интерфейса" работать мне в 2013 не понравится и я всё-таки откачусь. |
Автор: | Alex_ST [ 13 ноя 2016, 20:11 ] |
Заголовок сообщения: | Re: Копирование листа |
Surrogate, Shishok Завтра на работе похоже должно быть свободное время. Покручу Ваши процедуры. Я когда-то, занимаясь автоматизацией сбора в один документ листов из нескольких ЧУЖИХ файлов Visio, написал процедурку, которая автоматом перебирала все файлы в указанной директории директории, а потом копировала их содержимое в страницы новой книги. Всё заработало. Только, кроме сдвига "центра масс" наткнулся на неряшливость авторов: не нужные (запасные) шейпы-образцы они просто скидывали за границы листа. При распечатывании проекта эти Тогда и встала проблема: "Как выделить не все шейпы на листе, а только те, которые находятся в границах печати листа?" Так и не смог тогда это победить. А теперь, если уж делать новую процедуру копирования, надо это предусмотреть. Surrogate, спасибо, конечно, за название имени меня , но вообще-то я предпочитаю в распространяемых процедурах не привязываться к конкретным именам файлов/листов/ячеек Завтра пороюсь в своей копилке на работе, посмотрю, как узнать имя модуля VBA Тогда можно будет перед назначением .OnAction это имя узнать и вставить как переменную. |
Страница 1 из 4 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |