Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 20:46

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Текстовое поле
СообщениеДобавлено: 01 мар 2016, 11:12 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Цитата:
Насколько надежный способ?

Посмотрел повнимательнее...
Наиболее надежным представляется следующий способ:
Вначале сделать копию источника. Потом создавать и закрывать объект Workbook для этой копии.
При этом исходный файл может быть как открыт, так и закрыт. Это на процесс не влияет.
И наша работа на ручную работу с источником тоже не влияет.
Лишних процессов после закрытия не остается.
Ниже book1.xlsx - источник. copy.xlsx - рабочая копия источника
Код:
Sub UseExcel()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
        fso.CopyFile "D:\Temp2\Exl\book1.xlsx", "D:\Temp2\Exl\copy.xlsx"
    Set fso = Nothing
   
    Dim wbk As Excel.Workbook
    Dim sheet As Excel.Worksheet
   
    Set wbk = GetObject("D:\Temp2\Exl\copy.xlsx")
    Set sheet = wbk.Worksheets(1)
    Debug.Print sheet.Range("A1").Offset(1, 1).Formula
       
    wbk.Close
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текстовое поле
СообщениеДобавлено: 01 мар 2016, 21:56 
Не в сети

Зарегистрирован: 07 фев 2016, 16:32
Сообщений: 19
Использую Visio c: 2016
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Цитата:
Я так понимаю, что файл эксель может быть периодически открываться и закрываться для заполнения данных и это на работу макроса ни как не влияет? Насколько надежный способ?

В принципе, может влиять.
По правилам сначала нужно попытаться выполнить GetObject. А если получим ошибку (нет открытого Excel), то выполнить CreateObject.
С другой стороны, если открыть лишний экземпляр приложения, то тоже страшного ничего не должно быть.
Короче, хорошо бы погонять и перепроверить. Уверенного ответа нет.
Цитата:
Можно дополнить макрос чтобы он запускался по расписанию?

Можно добавить таймер, но я бы этого делать не стал.
У себя в похожей ситуации я использовал назначенные задания Windows. Добавил WSH скрипт, который запускается по заданию. А уже из скрипта открываю Visio и выполняю в нем макрос. У меня этот макрос сначала обновляет файл Visio по данным из БД, потом сохраняет документ в PDF на SharePoint. Работает уже больше года и вроде бы без претензий.
Промежуточный скрипт хорош еще и тем, что может выполнить дополнительные операции. Например, сделать копию файла - источника данных или что-то преобразовать...
Это я к тому, что можно скачать источник из удаленного хранилища на свою машину и запускать обновление по этой копии.
Выглядит он примерно так
Код:
   Option Explicit
   Dim vApp
   Dim vDoc
   Set vApp = WScript.CreateObject("Visio.Application")
   Set vDoc = vApp.Documents.Open("D:\aaaa1.vsd")
   Call vDoc.PDFs
   vDoc.Close
   Set vDoc = vApp.Documents.Open("D:\aaaa2.vsd")
   Call vDoc.PDFs
   vDoc.Close
   vApp.Quit

В этом фрагменте обновляются и публикуются два файла Visio.
Вот прямо этот код сидит в файле .vbs и запускается по расписанию.


У меня этот скрипт файл запускает и выскакикает это:
Вложение:
.png
.png [ 8.91 Кб | Просмотров: 481 ]


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Текстовое поле
СообщениеДобавлено: 01 мар 2016, 23:34 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Естественно.
Я же привел кусок из своего файла.
Код:
   Set vDoc = vApp.Documents.Open("D:\aaaa1.vsd")
   Call vDoc.PDFs

D:\aaaa1.vsd - это мой файл.
PDFs - это макрос, который сидит в моем файле.
Вам нужно писать свой скрипт по аналогии.
Файл Visio явно будет один (а не два, как у меня). Макрос тоже по-другому называться будет.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB