|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.02.2015, 05:39 | #1 |
Регистрация: 05.04.2014
Сообщений: 5
|
значение списка Combobox из динамического диапозона листа эксель
Всем добрый день!
Имеется Combobox список которого черпается из динамического диапозона листа эксель. Содержимое динамического диапозона регулируется при помощи Combobox и двух CommandButton "Удалить" и "Добавить" (код ниже) При удалении последней строки содержащей значение выскакивает ошибка "Run-time error 1004: mehtod Range of object Global failed т.к. VBA не может найти по существу исчезнувший диапозон Вопрос: 1. Как в моем коде (добавить или что-то убавить) можно избежать данной ошибки 2. Можно ли через переменную сделать ссылку на диапозон и уже в коде перебора диапозона прописывать саму переменную 3. Можно ли часть кода где определяются граници диапозона вынести в отдельный модуль и отрабатывать через вызов модуля. Private Sub Добавить_Click() ' Dim b As Range Dim x As Variant Dim y As Variant For Each b In [Диапозон1] ' перебираем диапозон на листе If b.Value = Combobox1.Text Then MsgBox Combobox1.Text & " уже есть всписке" Exit Sub Else End If Next ' Определяем граници дипозона вставляем новое значение и сортируем x = Range("Диапозон1").Column y = Range("Диапозон1").CurrentRegion.Ro ws.Count + 1 Sheets("Лист1").Cells(y, x).Value = Combobox1.Text ActiveWorkbook.Worksheets("Лист1"). Sort.SortFields.Clear ' ActiveWorkbook.Worksheets("Лист1"). Sort.SortFields.Add Key:=Range(Cells(1, x), Cells(y, x)) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1"). Sort .SetRange Range(Cells(1, x), Cells(y, x)) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Combobox1.RowSource = "Диапозон1" End Sub Private Sub Удалить_Click() ' Удаляем из списка Dim b As Range Dim x As Variant Dim y As Variant For Each b In [Диапозон1] ' сортируем диапозон If b.Value = Combobox1.Text Then b.Clear ' Определяем граници дипозона и сортируем x = Range("Диапозон1").Column y = Range("Диапозон1").CurrentRegion.Ro ws.Count + 1 ActiveWorkbook.Worksheets("Лист1"). Sort.SortFields.Clear ' ActiveWorkbook.Worksheets("Лист1"). Sort.SortFields.Add Key:=Range(Cells(1, x), Cells(y, x)) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1"). Sort .SetRange Range(Cells(1, x), Cells(y, x)) .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Combobox1.RowSource = "Диапозон1" Exit Sub Else End If Next End Sub |
02.02.2015, 06:37 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
02.02.2015, 15:12 | #3 |
Регистрация: 05.04.2014
Сообщений: 5
|
Вставил ваш код и все равно при удаление последней строки выдает ошибку
|
02.02.2015, 15:27 | #4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
не давайте возможности удалять последнюю строку - не будет ошибки.
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
02.02.2015, 15:53 | #5 |
Регистрация: 05.04.2014
Сообщений: 5
|
Игорь подскажите, имеется форма на которой куча комббоксов, данные из которого необходимо переносить на лист эксель последовательно и в одну строку. Я это реализую по такому принципу
ActiveCell.Value = box1.Text ActiveCell.Offset(0, 1).Select ActiveCell.Value = box2.Text ActiveCell.Offset(0, 1).Select ActiveCell.Value = box3.Text ActiveCell.Offset(0, 1).Select ActiveCell.Value = box4.Text ActiveCell.Offset(0, 1).Select ActiveCell.Value = box5.Text при наличии около 100 комбобоксов на форме получается ну просто длино я интуитивно понимаю что можно как то сделать более компактно, но как? |
02.02.2015, 17:12 | #6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
как-то так:
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с созданием динамического списка | gvilon | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 06.10.2011 23:08 |
отловить выбранный ItemIndex, а также значение динамического ComboBox (Delphi) | Иаковъ | Помощь студентам | 2 | 06.09.2011 16:41 |
Сортировка двунаправленного динамического списка | lacost | Общие вопросы C/C++ | 3 | 08.05.2009 10:32 |
сортировка динамического списка | new_sergei | Помощь студентам | 1 | 19.12.2008 00:36 |
Заполнение динамического списка из файла | KORT | Помощь студентам | 2 | 01.05.2007 22:28 |