Форум пользователей Visio
http://visio.getbb.ru/

Работа над ошибками: Error318
http://visio.getbb.ru/viewtopic.php?f=15&t=599
Страница 1 из 2

Автор:  Surrogate [ 30 май 2014, 20:04 ]
Заголовок сообщения:  Работа над ошибками: Error318

Разбирая свои старые работы нашел документы из которых нельзя ничего скопировать, вылезает ошибка 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, вдруг после каких-то умельцев придется снова лечить файл Изображение

Автор:  Surrogate [ 10 июн 2014, 12:06 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

я смотрю мне уже плюсик за это добрый человек поставил Изображение
разместил данный код на Visio Insights в комментариях к статье Error #318 Explained

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

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

Автор:  Surrogate [ 26 сен 2014, 16:22 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

немного поправил этот код здесь
Код:
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 [ 09 окт 2014, 12:24 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

 
пацан к успеху шел
 
гы-гы удостоился ссылок на эту ветку в англоязычном форуме Изображение
Интересно, кто же этот анонимоус Croc из Рязани ? Изображение

Автор:  Tumanov [ 09 окт 2014, 13:46 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Surrogate [ 09 окт 2014, 14:04 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

Tumanov писал(а):
Я что-то сделал не так?
Наоборот, Вы дичайше прокачали мое ЧСВ (чувство собственного величия)
Я сначало было возгордился: ого, на буржуинских форумах на меня ссылаются ! А когда посмотрел профиль Croc на форуме радость прошла…

Автор:  Майк [ 01 апр 2015, 18:31 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Surrogate [ 01 апр 2015, 18:41 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

добрый день!

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

Автор:  Майк [ 01 апр 2015, 18:45 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Surrogate [ 01 апр 2015, 18:55 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

печально, мои экстрасенсорные способности не безграничны Изображение

последний коммент на первом листе
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.
выделить на странице все и щелкнуть правой кнопкой и выбрать пункт "Переместить назад"
Изображение
говорят помогает…

Автор:  Майк [ 01 апр 2015, 19:00 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Surrogate [ 01 апр 2015, 19:10 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Tumanov [ 01 апр 2015, 20:43 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

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

Автор:  Майк [ 02 апр 2015, 10:15 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Майк [ 02 апр 2015, 10:20 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

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

Автор:  Surrogate [ 02 апр 2015, 11:28 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

Изображение
такая ошибка вылетает при попытке копирования.
я залез в шейпшит документа. в одной из строк нашел ссылку на эту несуществующую ячейку - в ячейке user.dec

Автор:  Майк [ 02 апр 2015, 11:35 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

Ага, эта самая ошибка. А как исправить?

Автор:  Surrogate [ 02 апр 2015, 11:41 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

Майк писал(а):
Ага, эта самая ошибка. А как исправить?
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.
ибо я знаю, что тебе эта ячейка не нужна

Автор:  Майк [ 02 апр 2015, 12:03 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

"Уррраааа, заработало" (Матроскин)

Спасибо!

Автор:  NoName [ 23 окт 2019, 19:01 ]
Заголовок сообщения:  Re: Работа над ошибками: Error318

Доброго времени суток, после проделанных операций при приближении(отдалении) пропадают все элементы документа( не только этого). Помогите, что делать :shock:

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/