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

Форум по вопросам применения и программирования в Visio
Текущее время: 25 июн 2017, 19:38

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


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


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
 Заголовок сообщения: Работа над ошибками: Error318
СообщениеДобавлено: 30 май 2014, 20:04 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Разбирая свои старые работы нашел документы из которых нельзя ничего скопировать, вылезает ошибка 318
Изображение
Ошибка возникает тогда, когда в TheDoc есть формулы содержащие в себе ссылки на ячейки со страниц документа. Например Pages[Page-1]!sheet.1!prop.row_1
Ошибка №318 (Error 318). Самая безобидная ошибка, появляется в определенных случаях, когда перемещение данных, из документа (TheDoc) до фигуры (TheSheet), осуществляется через промежуточные ячейки. Лечится простым удалением «пятого колеса», т.е. этих самых промежуточных ячеек на страницах (ThePage).
моя реализация "починки, без удаления колеса"
Код:
Sub vsd_RepairError318()
Dim cl As Row
Dim n As Integer
n = 0
Dim row_name$, row_value$, row_prompt$, new_prompt$, bl As Boolean
For i = ActiveWindow.Shape.RowCount(242) - 1 To 0 Step -1
    row_name = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserValue).RowNameU
    row_value = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserValue).FormulaU
    row_prompt = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserPrompt).FormulaU
    bl = InStr(row_value, Trim("Pages["))
If bl = True Then '
n = n + 1
If n = 1 Then new_prompt = "setf(getref(user." & row_name & "), " & row_value & ")"
If n > 1 Then new_prompt = new_prompt & "+setf(getref(user." & row_name & "), " & row_value & ")"
Else
End If
Next
ActiveDocument.DocumentSheet.AddNamedRow visSectionUser, "Err318fix", visTagDefault
ActiveDocument.DocumentSheet.Cells("User.Err318fix.prompt").FormulaU = new_prompt
Application.ActiveWindow.Shape.DeleteRow visSectionUser, ActiveWindow.Shape.RowCount(242) - 1
End Sub
суть метода:
1. макрос пробегается по секции User, если формула в поле Value содержит Pages[, то для нее формируется формула для замены на значение, с помощью функции SETF - формируемуя формула замены хранится в переменной new_prompt
2. Добавляется в секцию User строка User.Err318fix, в которой будет выполнена полученная в п. 1 формула
3. На всякий случай убиваем строку User.Err318fix, вдруг после каких-то умельцев придется снова лечить файл Изображение


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 10 июн 2014, 12:06 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
я смотрю мне уже плюсик за это добрый человек поставил Изображение
разместил данный код на Visio Insights в комментариях к статье Error #318 Explained

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

палим реакцию


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 26 сен 2014, 16:22 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
немного поправил этот код здесь
Код:
Sub vsd_RepairError318()
Dim cl As Row, ss As Window
Dim n As Integer
n = 0
Dim row_name$, row_value$, row_prompt$, new_prompt$, bl As Boolean
Set ss = Application.ActiveDocument.DocumentSheet.OpenSheetWindow
If ss.Shape.SectionExists(visSectionUser, visExistsAnywhere) Then
For i = ss.Shape.RowCount(242) - 1 To 0 Step -1
    row_name = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserValue).RowNameU
    row_formula = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserValue).FormulaU
    row_value = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserValue).ResultStr("")
    row_prompt = Application.ActiveWindow.Shape.CellsSRC(visSectionUser, i, visUserPrompt).FormulaU
    bl = InStr(row_formula, Trim("Pages["))
If bl = True Then '
n = n + 1
If n = 1 Then new_prompt = "setf(getref(thedoc!user." & row_name & "), " & Chr(34) & Chr(34) & Chr(34) & row_value & Chr(34) & Chr(34) & Chr(34) & ")"
If n > 1 Then new_prompt = new_prompt & "+setf(getref(thedoc!user." & row_name & "), " & Chr(34) & Chr(34) & Chr(34) & row_value & Chr(34) & Chr(34) & Chr(34) & ")"
Else
End If
Next
End If
Debug.Print new_prompt
If Len(new_prompt) > 0 Then
ActiveDocument.DocumentSheet.AddNamedRow visSectionUser, "Err318fix", visTagDefault
ActiveDocument.DocumentSheet.Cells("User.Err318fix.prompt").FormulaU = new_prompt
Application.ActiveWindow.Shape.DeleteRow visSectionUser, ActiveWindow.Shape.RowCount(242) - 1
End If
ss.Close
End Sub

данный код был модифицирован снова


Последний раз редактировалось Surrogate 04 мар 2016, 01:44, всего редактировалось 2 раз(а).
добавлена ссылка, где в первые была опубликована крайняя версия кода


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 09 окт 2014, 12:24 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
гы-гы удостоился ссылок на эту ветку в англоязычном форуме Изображение
Интересно, кто же этот анонимоус Croc из Рязани ? Изображение


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 09 окт 2014, 13:46 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Я что-то сделал не так?
Вроде, авторские права не нарушены :)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 09 окт 2014, 14:04 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Tumanov писал(а):
Я что-то сделал не так?
Наоборот, Вы дичайше прокачали мое ЧСВ (чувство собственного величия)
Я сначало было возгордился: ого, на буржуинских форумах на меня ссылаются ! А когда посмотрел профиль Croc на форуме радость прошла…


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 18:31 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
День добрый! Прошу помощи. В Visio 2010 появилась вот такая ошибка: "Ошибка (318) при выполнении действия копировать. Указанная ячейка User.Value[253] не существует." Описанные выше действия не принесли результата.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 18:41 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
добрый день!

в статье Error #318 Explained описывается несколько причин возникновения ошибки #318. Мой код исправляет только одну из них, ту что часто встречается в моей практике.
выложи файл посмотрим, что с ним можно сделать ?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 18:45 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Я б выложил, но это, к сожалению, коммерческая тайна так сказать.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 18:55 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
печально, мои экстрасенсорные способности не безграничны Изображение

последний коммент на первом листе
Isuru 12 Sep 2014 9:43 писал(а):
I had the same problem. Select all and right click to choose "Bring to Front". This will solve the problem.
выделить на странице все и щелкнуть правой кнопкой и выбрать пункт "Переместить назад"
Изображение
говорят помогает…


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 19:00 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Данный пункт при выделении всего содержимого листа становится недоступен. Попробую поодиночке переместить на задний план.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 19:10 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
честно говоря я лишь однажды тестировал этот способ, тогда у меня получилось !
сейчас нет под рукой файла с ошибкой… я не понимаю в чем смысл этой магии, но боюсь что поочередное выделение не поможет!
может из выделения исключить одну фигуру и попробовать, если жалко палить военную тайну ?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 01 апр 2015, 20:43 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Майк писал(а):
Я б выложил, но это, к сожалению, коммерческая тайна так сказать.

Обычно удается путем удаления половины шейпов, потом половины от половины и т.д. оставить минимальный рисунок, в котором еще есть ошибка, но никакой тайны он уже не представляет.
Либо Вы в процессе удаления сами вычислите место, где сидит ошибка.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 02 апр 2015, 10:15 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Способ с перемещением на задний план результата не дал. Группировка всего также не дала результата. В файле примерно треть фигур не копируется.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 02 апр 2015, 10:20 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Майк писал(а):
Способ с перемещением на задний план результата не дал. Группировка всего также не дала результата. В файле примерно треть фигур не копируется.
Собственно файл с не копируемой фигурой
удален по просьбе администратора Surrogate, на правах автора. Данный файл был создан им в апреле 2006 года, до августа 2006 года подобные файлы принесли Surrogate массу головной боли. И вот спустя 9 лет такая неожиданная встреча!


Последний раз редактировалось Surrogate 06 апр 2015, 12:31, всего редактировалось 2 раз(а).
Добавлен комментарий администратора


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 02 апр 2015, 11:28 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Изображение
такая ошибка вылетает при попытке копирования.
я залез в шейпшит документа. в одной из строк нашел ссылку на эту несуществующую ячейку - в ячейке user.dec


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 02 апр 2015, 11:35 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Ага, эта самая ошибка. А как исправить?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 02 апр 2015, 11:41 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3330
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Майк писал(а):
Ага, эта самая ошибка. А как исправить?
Surrogate писал(а):
я залез в шейпшит документа. в одной из строк нашел ссылку на эту несуществующую ячейку - в ячейке user.dec
надо было удалить из формулы эту ссылку User.Value[253]
но это путь хардорных визио-пользователей, слабонервных просьба под спойлер не заглядывать :)
Спойлер: показать
1. нужно включить режим Разработчика
Surrogate писал(а):
что по умолчанию в визио 2010 и 2013 эта панелька отключена…
Изображение
2. Включить Drawing Explorer на ленте Разработчик
Изображение
3. В самом Drawing Explorer открыть Shapesheet документа
Изображение

Исправлено на: есть путь покороче
Изображение



если совсем без порева, то решение такое
Изображение
1. Открываем окно редактора VBA клавишами Alt+F11
2. В нем жмем Ctrl+G
3. Вставляем в окне Immediate вставляем формулу
Код:
ActiveDocument.DocumentSheet.Cells("user.dec").Formula = ""
4. Жмем клавишу Enter.
ибо я знаю, что тебе эта ячейка не нужна


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Работа над ошибками: Error318
СообщениеДобавлено: 02 апр 2015, 12:03 
Не в сети

Зарегистрирован: 02 апр 2015, 10:16
Сообщений: 7
Использую Visio c: 2003
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
"Уррраааа, заработало" (Матроскин)

Спасибо!


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

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



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

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


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

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