нельзя присвоить листу имя совпадающее с именем другого листа библиотеки что делать
1C и Excel
Создаю файл Excel в 1С. В него мне нужно на разные страницы раскидать различные данные. Страниц в создаваемой книге по умолчанию 3, а у меня их может быть больше 3х. Каждую страницу нужно переименовать, при переименовании страниц, которые были в книге по умолчанию, все нормально, а при переименовании страниц, которые добавил программно, возникает ошибка:
<Форма.Форма.Форма(50)>: Ошибка при установке значения атрибута контекста (Name)
Лист.Name = «Показатели » + ВыделеннаяСтрока.Регистратор.Проект;
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Нельзя присвоить листу имя, совпадающее с именем другого листа, библиотеки объектов или книги, на которую ссылается Visual Basic.
Попытка
// Загрузка Microsoft Excel
Состояние(«Выгрузка данных из 1С в Microsoft Excel. «);
ExcelПриложение = Новый COMОбъект(«Excel.Application»);
Исключение
Сообщить(«Ошибка при загрузке Microsoft Excel.»
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
// Используем первый лист книги Excel
НомерЛиста = 1;
Для л = 1 По КоличествоЛистов Цикл
// Сформировать шапку документа в первой строке листа
Для Каждого ВыделеннаяСтрока из ЭлементыФормы.ТабличноеПоле1.ВыделенныеСтроки Цикл
Для Каждого КлючИЗначение из СтруктураДляВыгрузки Цикл
Лист.Cells(1, 1).Value = «Документ » + ВыделеннаяСтрока.Регистратор.Номер;
Лист.Cells(1, 2).Value = «Время версии » + ВыделеннаяСтрока.Период;
Если ТипЗнч(ТаблицаВыгрузки) = Тип(«ДеревоЗначений») Тогда
Лист.Name = «График » + ВыделеннаяСтрока.Регистратор.Проект;
ИначеЕсли ТаблицаВыгрузки.Колонки.Количество() = 2 Тогда
Лист.Name = «Показатели » + ВыделеннаяСтрока.Регистратор.Проект;
Иначе
Лист.Name = «Строки » + ВыделеннаяСтрока.Регистратор.Проект;
КонецЕсли;
.
Почему в Excel появляется диалоговое окно «Конфликт имен»?
Если в Excel вы видите диалоговое окно Конфликт имен, это происходит из-за того, что вы пытаетесь скопировать один или несколько листа в книгу, которая имеет похожие именные диапазоны.
Предположим, что у таблицы, которую вы пытаетесь скопировать, и конечной книги, в которую вы хотите скопировать его, есть именный диапазон с именем InterestRates. При попытке переместить или скопировать листа Excel обнаружит этот конфликт и отобразит следующее сообщение:
Имя InterestRates уже существует. Нажмите кнопку Да, чтобы использовать эту версию имени, или кнопку Нет, чтобы переименовать перемещаемую или копную версию InterestRates.
Примечание: Диалоговое окно Конфликт имен появится для каждого экземпляра конфликтующих диапазонов имен. Если вы используете версию Excel с подпиской, сообщение в диалоговом окте о конфликте содержит третий вариант с пометкой Да для всех. Это означает, что сообщение не будет отображаться для дополнительных диапазонов конфликтующих имен.
Решение
В диалоговом окне выше необходимо сделать следующее:
Нажмите кнопку Да, чтобы продолжить использовать имя конфликтующих диапазонов в конечной книге.
Что происходит при нажатии кнопки Да?
Excel скопирует конфликтующий диапазон имен в 9-ю книгу. Это означает, что в конечной книге будут два похожих именуемого диапазона.
Предупреждение: Если в книге есть формулы, ссылающие на конфликтующие именные диапазоны, копирование этих диапазонов повлияет на эти формулы и приведет к ошибкам в книге. Если вы не знакомы с данными в конечной книге, не нажимайте кнопку Да. Вместо этого щелкните Нет, чтобы переименовать конфликтующий диапазон.
Нажмите кнопку Да для всех, чтобы продолжить использовать все возможные имена конфликтующих диапазонов в конечной книге. Обратите внимание, что этот параметр можно увидеть только в том случае, если вы используете версию Excel по подписке.
Что происходит при нажатии кнопки Да для всех?
Excel скопирует все конфликтующие диапазоны имен в 9-ю книгу. Это означает, что в конечной книге будут два или более похожих именуемого диапазона.
Предупреждение: Если в книге есть формулы, ссылающие на конфликтующие именные диапазоны, копирование этих диапазонов повлияет на эти формулы и приведет к ошибкам в книге. Если вы не знакомы с данными в конечной книге, не нажимайте кнопку Да для всех. Вместо этого щелкните Нет, чтобы переименовать конфликтующие диапазоны по одному.
Чтобы переименовать конфликтующий диапазон имен, нажмите кнопку Нет. Отобразит следующее диалоговое окно:
В разделе Новое имя введите новое имя диапазона. Новое имя не будет принято, если оно
начинается с буквы или подчеркиваия,
— ссылка на ячейку, например A1, A123 или XFD21,
имеет то же имя, что и у другого диапазона в книге, в которую вы копируете копию.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нельзя присвоить листу имя совпадающее с именем другого листа библиотеки что делать
Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.6.2017
Репутация: нет
Всего: нет
Доброго времени суток.
Сюда будут приложены две формы Access. Одной из них я «вдохновлялся», другая моя (по названию несложно будет понять какая из них какая).
Однако, не идентичны. Мне нужно предоставить пользователю возможность предварительно выбрать нужные таблицы для экспорта, а не просто отправлять все разом. Колличество нужных таблиц может варьироваться. Имеется два списка. В первый нажатием кнопки выводятся имена всех таблиц. Во второй список кликом отправляются нужные. Соответственно, процедура экспорта обращается ко второму списку.
Проблема: Изначально я забыл присвоить значение переменной cnt. Процедура проходила, но экспортируя только одну таблицу, чьё имя первое в списке. После того как присвоил, при попытке экспорта более одной таблицы выдаёт » ошибка 1004: Нельзя присвоить листу имя, совпадающее с именем другого листа, библиотеки объектов или книги, на которую ссылается Visual Basic » в строке:
Позже пропала. Не смог понять её причину, т.к. если она пропала благодаря каким-то изменениям в коде, то изменения были крайне несущественными (во всяком случае на мой взгляд). Ошибка же приведённая выше актуальна до сих пор.
Прошу помощи.
Код процедуры экспорта:
Код |
Public Sub MultiExp(tblName) Dim db As DAO.Database Dim rst As DAO.Recordset Dim app As Object Dim wrk As Object Dim i As Integer Dim t Dim j As Integer |
‘ tblName = Me![Поле0]
t = tblName(i)
Set db = CurrentDb
Set app = CreateObject(«Excel.Application»)
Set wrk = app.Workbooks.Add
Set rst = db.OpenRecordset(«SELECT * FROM [» & t & «]»)
For i = 0 To UBound(tblName)
If i
Код |
Private Sub Кнопка8_Click() Dim tblName() Dim cnt As Integer Dim i As Integer |
If Me!Список2.ListCount = 0 Then
MsgBox «blablabla»
Exit Sub
End If
ReDim tblName(0 To cnt)
For i = 0 To cnt
tblName(i) = Me.Список2.ItemData(i)
Next i
MultiExp tblName
End Sub
P.S. Заранее извиняюсь за возможное несоответствие разделу форума.
Присоединённый файл ( Кол-во скачиваний: 8 )
Формы.rar 42,30 Kb
Советчик
Профиль
Группа: Модератор
Сообщений: 20503
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 30
Всего: 453
Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.6.2017
Репутация: нет
Всего: нет
Сам код представлен в сообщении выше.
Если же в список выбрано одно имя таблицы, экспорт проходит. Но, собственно, всё затевалось для того, чтобы таблиц импортировать можно было более одной
Советчик
Профиль
Группа: Модератор
Сообщений: 20503
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 30
Всего: 453
Цитата(Ethex @ 3.7.2017, 16:22 ) |
При попытке экспорта нескольких таблиц в книгу Excell процедура не проходит. |
Загрузил и распаковал БД (ту, где три таблицы и одна форма).
В каждую таблицу добавил содержательное поле (имя val, тип текстовое) и по 2 записи.
Открыл форму и нажал кнопку.
Код выполнился без ошибок, данные скопированы в книгу Excel.
Резюме: проблема не воспроизводится.
Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.6.2017
Репутация: нет
Всего: нет
Цитата(Akina @ 3.7.2017, 15:35 ) |
Попробуйте после Set wrk = app.Workbooks.Add удалить из книги все листы, кроме одного |
Агааась. Не работал ранее с такими методами. Пробую разобраться.
Akina, если вас это не затруднит, посмотрите вторую форму. Если таблиц было три, то вы, скорее всего (если на форме не было списков, то точно) смотрели вариант со статическим массивом (т.е. не мой). И не удивительно что ошибки не возникло. Ошибка при выполнении кода на другом файле (там таблиц шесть).
Цитата(Akina @ 3.7.2017, 15:35 ) |
В каждую таблицу добавил содержательное поле (имя val, тип текстовое) и по 2 записи. |
Необязательно было утруждаться. После экспорта пустой таблицы в первой строке листа появятся имя полей и имя листа изменится.
Если же затруднит, буду признателен если вы об этом сообщите, чтобы не ожидал у моря погоды.
Спасибо.
P.S. Больше не буду прикреплять больше файлов, чем необходимо
Советчик
Профиль
Группа: Модератор
Сообщений: 20503
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 30
Всего: 453
Цитата(Ethex @ 3.7.2017, 17:40 ) |
Ошибка при выполнении кода на другом файле |
Ну там ошибка очевидная.
Очень странно, что Вы этого не увидели при трассировке кода.
Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.6.2017
Репутация: нет
Всего: нет
Увы, на данном этапе не очень.
Исчерпывающий ответ. Проблема решена.
Спасибо
1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.
[ Время генерации скрипта: 0.1189 ] [ Использовано запросов: 21 ] [ GZIP включён ] Последовательное переименование листовПриветствую! Работает корректно: переименовывает лист в книге2 как лист в книге1 и добавляет лист в книгу2. Однако при запуске с помощью макроса: выводится ошибка «1004»: Причём ошибка выходит после того как один раз выполнен макрос «переименовать». Что должно получиться: Просьба помочь решить данную проблему. Помощь в написании контрольных, курсовых и дипломных работ здесь. Переименование листов Переименование и сортировка листов Переименование листов во время выполнения макроса Переименование всех листов в книге Эксель по шаблону Нельзя присвоить листу имя совпадающее с именем другого листа библиотеки что делатьОднако, не идентичны. Мне нужно предоставить пользователю возможность предварительно выбрать нужные таблицы для экспорта, а не просто отправлять все разом. Колличество нужных таблиц может варьироваться. Имеется два списка. В первый нажатием кнопки выводятся имена всех таблиц. Во второй список кликом отправляются нужные. Соответственно, процедура экспорта обращается ко второму списку. Проблема: Изначально я забыл присвоить значение переменной cnt. Процедура проходила, но экспортируя только одну таблицу, чьё имя первое в списке. После того как присвоил, при попытке экспорта более одной таблицы выдаёт » ошибка 1004: Нельзя присвоить листу имя, совпадающее с именем другого листа, библиотеки объектов или книги, на которую ссылается Visual Basic » в строке: Позже пропала. Не смог понять её причину, т.к. если она пропала благодаря каким-то изменениям в коде, то изменения были крайне несущественными (во всяком случае на мой взгляд). Ошибка же приведённая выше актуальна до сих пор. Код процедуры экспорта:
‘ tblName = Me![Поле0] Set db = CurrentDb |
Код |
Private Sub Кнопка8_Click() Dim tblName() Dim cnt As Integer Dim i As Integer |
If Me!Список2.ListCount = 0 Then
MsgBox «blablabla»
Exit Sub
End If
ReDim tblName(0 To cnt)
For i = 0 To cnt
tblName(i) = Me.Список2.ItemData(i)
Next i
MultiExp tblName
End Sub
Сам код представлен в сообщении выше.
Если же в список выбрано одно имя таблицы, экспорт проходит. Но, собственно, всё затевалось для того, чтобы таблиц импортировать можно было более одной
Автор: Akina 3.7.2017, 15:35 | ||||||
Загрузил и распаковал БД (ту, где три таблицы и одна форма). Резюме: проблема не воспроизводится.
Агааась. Не работал ранее с такими методами. Пробую разобраться. Akina, если вас это не затруднит, посмотрите вторую форму. Если таблиц было три, то вы, скорее всего (если на форме не было списков, то точно) смотрели вариант со статическим массивом (т.е. не мой). И не удивительно что ошибки не возникло. Ошибка при выполнении кода на другом файле (там таблиц шесть).
Необязательно было утруждаться. После экспорта пустой таблицы в первой строке листа появятся имя полей и имя листа изменится. Если же затруднит, буду признателен если вы об этом сообщите, чтобы не ожидал у моря погоды. P.S. Больше не буду прикреплять больше файлов, чем необходимо |
Автор: Akina 4.7.2017, 08:17 | |
Цитата(Ethex @ 3.7.2017, 17:40 ) |
Ошибка при выполнении кода на другом файле |
Ну там ошибка очевидная.
- Как оборудовать место для ночлега собаки своими руками: практическое руководство
- посадить пихту на участке примета