При создании выпадающего списка в ячейке D7 листа 1 на этапе проверка данных (ДВССЫЛ) выдает "При вычислении Источник возникает ошибка" Что делать?
При создании выпадающего списка в ячейке D7 листа 1 на этапе проверка данных (ДВССЫЛ) выдает "При вычислении Источник возникает ошибка" Что делать?Анжелика
Pelena, А вы не могли бы рассказать в чем была ошибка? Я столкнулся с похожей проблемой. Попробовал вашим способом список добавить но все равно не получается Подскажите пожалуйста в чем дело? В файле примера в Ячейке С2
Pelena, А вы не могли бы рассказать в чем была ошибка? Я столкнулся с похожей проблемой. Попробовал вашим способом список добавить но все равно не получается Подскажите пожалуйста в чем дело? В файле примера в Ячейке С2Kamikadze_N
Kamikadze_N, насколько я увидела (под рукой только Mac Excel) у Вас имена Рудаков и прочие действуют только в пределах листа dbDiap, а надо, чтобы они были общие для книги. Попробуйте изменить или пересоздать через диспетчер имён Ctrl+F3
Kamikadze_N, насколько я увидела (под рукой только Mac Excel) у Вас имена Рудаков и прочие действуют только в пределах листа dbDiap, а надо, чтобы они были общие для книги. Попробуйте изменить или пересоздать через диспетчер имён Ctrl+F3Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Pelena, Да действительно область действия Только лист dbDiap , дело в том что именованный диапазон создается макросом, не могли бы вы подсказать что именно нужно дописать что бы Диапазон создавался на всю книгу. По идее макрокодер создает диапазон на всю книгу вот так вот[vba]
если я все правильно понял вот эта строка и описывает облать действия диапазона [vba]
Код
ActiveWorkbook.Names("апр").Comment = ""
[/vba] Но у меня при ее добавлении VBA начинает ругаться...
Pelena, Да действительно область действия Только лист dbDiap , дело в том что именованный диапазон создается макросом, не могли бы вы подсказать что именно нужно дописать что бы Диапазон создавался на всю книгу. По идее макрокодер создает диапазон на всю книгу вот так вот[vba]
Посмотрите вариант вообще без макросов В диспетчере имен. имя Диап для простоты использует еще два имени стр и кол, в имени диап_1 сделано сразу без них. Если так делать, то Вам не нужна эта куча имен, достаточно двух - ФИО и ДИАП_1
А по коду - во второй строке уберите лист ActiveWorkbook.Worksheets("dbDiap").Names.Add
Посмотрите вариант вообще без макросов В диспетчере имен. имя Диап для простоты использует еще два имени стр и кол, в имени диап_1 сделано сразу без них. Если так делать, то Вам не нужна эта куча имен, достаточно двух - ФИО и ДИАП_1
А по коду - во второй строке уберите лист ActiveWorkbook.Worksheets("dbDiap").Names.Add_Boroda_
_Boroda_, Без макросов не вариант. Ибо в этом и суть их использования. В выпадающем списке если раннее Водителя не было то он автоматически добавляется. А уже за этим водителем закрепляется транспорт и прочее. При том у транспорта есть два критерия Рег номер И Наименование модели. Ну и там другие завязки к этим данным идут. Есть аналог исходнику. Где уже все давно работает и связи все используются. Егшо я пол года назад гдет сделал. Единственный его минус. Именованные диапазоны нужно создавать самому и в них вносить все данные, перед работой с основной программой. Когда работало два-три человека и относительно опытные юзеры ПК, они сами и добавляли диапазоны (по мере необходимости) и удаляли их, и если в диапазоне не хватало место сами могли его расширить. Но сейчас ввиду реструктуризации организации и приеме новых сотрудников, не очень компитентных (банально с экселем то на вы) Для них слово то Диапазон что то иноплонетное, не говоря уже о его редактировании. А бегать за каждым и постоянно что то редактировать нет возможности. Вот и возникла необходимость эти диапазоны создавать макросом... Но это все лишнее суть в чем. Еще раз приложу шаблон. И вот код.[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B:B")) Is Nothing Then UserForm1.Show
'если у нас отсутствует значение в именованом диапазоне мы его добавим
If IsEmpty(Target) Then Exit Sub 'если нажата клавиша эскейп то заканчиваем работу с выделеной ячейкой
If WorksheetFunction.CountIf(Worksheets("dbTresh").Range("ФИО"), Target) = 0 Then 'выполняем поиск в диапазоне на наличие там имеющегося значения lReply = MsgBox("Добавить новое значение " & _ Target & " в БД?", vbYesNo + vbQuestion) If lReply = vbYes Then
'вставляем в именованый диапазон новое значение
sch = 4 Do While Worksheets("dbTresh").Cells(sch, 1) <> "" 'Находим первую пустую строку в именованом диапазоне sch = sch + 1 Loop
Worksheets("dbTresh").Cells(sch, 1) = Target 'присваиваем этой строке значение из комбобокс
'создаем именованный диапазон для этого найдем его местоположение в БД Sheets("dbDiap").Select schI = 1 Do While Worksheets("dbDiap").Cells(3, schI) <> "" 'Находим первый пустой столбец schI = schI + 2 Loop
'собственно как заставить создаваться Диапазон в зависимости от Толбца?
Worksheets("dbDiap").Cells(3, schI) = Target.Value ActiveWorkbook.Worksheets("dbDiap").Names.Add Name:=Target.Value, _ 'так если я удалю эту чать то и диапазон не создасться , тут же его имя создается, разве нет? RefersTo:=ActiveWorkbook.Worksheets("dbDiap").Cells(4, schI).Resize(9)
End If End If End If End Sub
[/vba]
Цитата
А по коду - во второй строке уберите лист ActiveWorkbook.Worksheets("dbDiap").Names.Add
Так если я это удалю ошибку выдает... Или я чего то не понимаю?
_Boroda_, Без макросов не вариант. Ибо в этом и суть их использования. В выпадающем списке если раннее Водителя не было то он автоматически добавляется. А уже за этим водителем закрепляется транспорт и прочее. При том у транспорта есть два критерия Рег номер И Наименование модели. Ну и там другие завязки к этим данным идут. Есть аналог исходнику. Где уже все давно работает и связи все используются. Егшо я пол года назад гдет сделал. Единственный его минус. Именованные диапазоны нужно создавать самому и в них вносить все данные, перед работой с основной программой. Когда работало два-три человека и относительно опытные юзеры ПК, они сами и добавляли диапазоны (по мере необходимости) и удаляли их, и если в диапазоне не хватало место сами могли его расширить. Но сейчас ввиду реструктуризации организации и приеме новых сотрудников, не очень компитентных (банально с экселем то на вы) Для них слово то Диапазон что то иноплонетное, не говоря уже о его редактировании. А бегать за каждым и постоянно что то редактировать нет возможности. Вот и возникла необходимость эти диапазоны создавать макросом... Но это все лишнее суть в чем. Еще раз приложу шаблон. И вот код.[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B:B")) Is Nothing Then UserForm1.Show
'если у нас отсутствует значение в именованом диапазоне мы его добавим
If IsEmpty(Target) Then Exit Sub 'если нажата клавиша эскейп то заканчиваем работу с выделеной ячейкой
If WorksheetFunction.CountIf(Worksheets("dbTresh").Range("ФИО"), Target) = 0 Then 'выполняем поиск в диапазоне на наличие там имеющегося значения lReply = MsgBox("Добавить новое значение " & _ Target & " в БД?", vbYesNo + vbQuestion) If lReply = vbYes Then
'вставляем в именованый диапазон новое значение
sch = 4 Do While Worksheets("dbTresh").Cells(sch, 1) <> "" 'Находим первую пустую строку в именованом диапазоне sch = sch + 1 Loop
Worksheets("dbTresh").Cells(sch, 1) = Target 'присваиваем этой строке значение из комбобокс
'создаем именованный диапазон для этого найдем его местоположение в БД Sheets("dbDiap").Select schI = 1 Do While Worksheets("dbDiap").Cells(3, schI) <> "" 'Находим первый пустой столбец schI = schI + 2 Loop
'собственно как заставить создаваться Диапазон в зависимости от Толбца?
Worksheets("dbDiap").Cells(3, schI) = Target.Value ActiveWorkbook.Worksheets("dbDiap").Names.Add Name:=Target.Value, _ 'так если я удалю эту чать то и диапазон не создасться , тут же его имя создается, разве нет? RefersTo:=ActiveWorkbook.Worksheets("dbDiap").Cells(4, schI).Resize(9)
End If End If End If End Sub
[/vba]
Цитата
А по коду - во второй строке уберите лист ActiveWorkbook.Worksheets("dbDiap").Names.Add
Так если я это удалю ошибку выдает... Или я чего то не понимаю?Kamikadze_N
[/vba] А по поводу вообще принципа создания кучи именованных диапазонов - когда-нибудь нарветесь на запрещенные в них символы и работать перестанет. Например, будут однофамильцы и Вы захотите ввести "Елькин А". А уж если Вы написали код для кучи имен, то для моего способа засунуть все это в макросы вообще труда не составит, там имен-то создавать не нужно, там достаточно только новую фамилию в список ввести (сам я сейчас не могу, занят)
Вот так должно быть Я ж синим специально покрасил [vba]
[/vba] А по поводу вообще принципа создания кучи именованных диапазонов - когда-нибудь нарветесь на запрещенные в них символы и работать перестанет. Например, будут однофамильцы и Вы захотите ввести "Елькин А". А уж если Вы написали код для кучи имен, то для моего способа засунуть все это в макросы вообще труда не составит, там имен-то создавать не нужно, там достаточно только новую фамилию в список ввести (сам я сейчас не могу, занят)_Boroda_
_Boroda_, Я не спорю ваш вариант очень даже хорош . Но он подходит для простых диапазонов. А в моем случае, если вы заметили под каждым диапазоном 2 столбца остается (и это я так минимум взял) на самом деле параметров будет больше. В данном случае сложная иерархия зависимых выпадающих списков. Т.е. именованный диапазон зависимый от еще одного именованного диапазона связанный с еще одним именованным диапазоном. И имеющий конечный уникальный идентификатор. Притом данные диапазоны используются на нескольких листах и на нескольких формах. Да я понимаю что есть риск некорректного ввода, но для этого фильтр настрою. А что касается уникальности Имен ФИО, тут тоже, шаблон для примера без заморочек выложил что бы суть понять, а так есть табельный номер и он уникален, а уже табельный номер связывается с ФИО, даже если будет несколько однофамильцев, то просто индекс добавлю (что то типа префикса). По хорошему то все уже давно на акссес пора переносить, но пока нет технической возможности.
_Boroda_, Я не спорю ваш вариант очень даже хорош . Но он подходит для простых диапазонов. А в моем случае, если вы заметили под каждым диапазоном 2 столбца остается (и это я так минимум взял) на самом деле параметров будет больше. В данном случае сложная иерархия зависимых выпадающих списков. Т.е. именованный диапазон зависимый от еще одного именованного диапазона связанный с еще одним именованным диапазоном. И имеющий конечный уникальный идентификатор. Притом данные диапазоны используются на нескольких листах и на нескольких формах. Да я понимаю что есть риск некорректного ввода, но для этого фильтр настрою. А что касается уникальности Имен ФИО, тут тоже, шаблон для примера без заморочек выложил что бы суть понять, а так есть табельный номер и он уникален, а уже табельный номер связывается с ФИО, даже если будет несколько однофамильцев, то просто индекс добавлю (что то типа префикса). По хорошему то все уже давно на акссес пора переносить, но пока нет технической возможности.Kamikadze_N
Это Вы меня так склоняете к тому, чтобы я продемонстрировал Вам, что ничего подобного? Не, я Вас насильно шоколадом кормить не буду. Хотите использовать свой метод - пожалуйста. Успехов!
Это Вы меня так склоняете к тому, чтобы я продемонстрировал Вам, что ничего подобного? Не, я Вас насильно шоколадом кормить не буду. Хотите использовать свой метод - пожалуйста. Успехов!_Boroda_
_Boroda_, Я вот что хотел сделать, и более менее добился этого. Если заполнять файл. Пример выложил ниже. Что касается его работы. Из выпадающего списка с поиском ищем нужную Фамилию, если ее нет, добавляем новую. Далее по фамилии ищем описание модели, если техники нет никакой вводим новое описание, добавляем марку трактора (притом она может быть не уникальна, уникально только описание модели) и добавляем гос номер. При последующем выборе если данная модель уже есть в базе данные подставляются автоматически. Это так пример для разработки логики был. Щас прикрутил к этому шаблону фильтр и проверку на наличие ошибок доделал. И ваш вариант не совсем мне подходил как видно в приложении ниже. То есть получилось сделать поиск по базе данных и добавление новых элементов через рабочую форму с выпадающим списком. В конечном файле (скорее всего не самым оптимальным путем) допили изменение ячейки описание, в данном примере изменить элемент таблицы нельзя, только добавлять новую строку в базу данных.
_Boroda_, Я вот что хотел сделать, и более менее добился этого. Если заполнять файл. Пример выложил ниже. Что касается его работы. Из выпадающего списка с поиском ищем нужную Фамилию, если ее нет, добавляем новую. Далее по фамилии ищем описание модели, если техники нет никакой вводим новое описание, добавляем марку трактора (притом она может быть не уникальна, уникально только описание модели) и добавляем гос номер. При последующем выборе если данная модель уже есть в базе данные подставляются автоматически. Это так пример для разработки логики был. Щас прикрутил к этому шаблону фильтр и проверку на наличие ошибок доделал. И ваш вариант не совсем мне подходил как видно в приложении ниже. То есть получилось сделать поиск по базе данных и добавление новых элементов через рабочую форму с выпадающим списком. В конечном файле (скорее всего не самым оптимальным путем) допили изменение ячейки описание, в данном примере изменить элемент таблицы нельзя, только добавлять новую строку в базу данных.Kamikadze_N