Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
m_yuka_r
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 40
1

Как работать с выпадающими списками

06.12.2012, 18:53. Просмотров 1143. Ответов 8

Добрый день! Прошу помочь со следующим кодом.
Есть книга, что-то типа формирования сметы на изделие с ценами, артикулами и т.д. Для этого используются выпадающие списки. Фрагмент кода, где судя по моим предположениям идет превышение количества символов:
(Excel 2010)
Visual Basic
1
2
3
4
5
6
 Dim s As String
Dim Taget As Range
 With Taget.Validation
        Taget.Delete
        If s <> vbNullString Then .Add Type:=xlValidateList, Formula1:=s
  End With
Возможно, данную проблему можно решить комбобоксами, но 1) я с ними не работала еще вообще, т.е. сформировать код я сама навряд ли смогу; 2) Количество этих выпадающих строк неограниченное количество. Т.е. я могу добавить строку с выпадающим списком, а комбобокс? Вручную прописывать и добавлять?
Можно ли избежать того, чего я не знаю? И еще... бывает такое, что когда-то это длинная строка записывается в Formula1:, когда-то нет. Как будто происходит заполнение памяти, может ее как-то чистить, чтобы не использовать комбобоксы?
Всем, заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2012, 18:53
Ответы с готовыми решениями:

Непонятная ситуация с выпадающими списками
Программно создаю N количество в разных ячейках одного столбца выпадающие...

Создание простейшей формы с чекбоксами и выпадающими списками
Уважаемые знатоки, подскажите, как лучше реализовать средствами VBA в MS Word...

Как в VBA работать с нумерованными списками Ворда?
Если сразу к делу, то проблема в следующем: не могу нигде найти как в VBA...

Как работать с ComboBox?
Такая проблема, есть в ячейке раскрывающийся список (через проверку данный)....

Как работать со скрытой книгой?
Есть много вычислений, которые грузят активный лист, делая его недоступным для...

8
Скрипт
5446 / 1127 / 49
Регистрация: 15.09.2012
Сообщений: 3,420
06.12.2012, 19:31 2
m_yuka_r, в сообщении #1 в коде в строке 4 что вы удаляете с помощью Delete?

Я опытным путём проверил в Excel 2010, у меня 8 тысяч символов поместилось в Formula1.
0
m_yuka_r
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 40
06.12.2012, 22:04  [ТС] 3
Цитата Сообщение от Скрипт Посмотреть сообщение
в строке 4 что вы удаляете с помощью Delete?
возвращаю ячейке ее начальное значение. И делаю ее пустой, или такой, как обычно)) [без выпадающих списков]. Команда, которая написана чуть раньше и которую я не прописала здесь
Visual Basic
1
Taget.Validation.Value = ""
она чистит значение списка. Т.е. по сути все правильно прописано в коде. Кстати, 8 тыс. знаков... это очень много)) Думаю, у меня столько не получается.... хотя...))
...
Еще добавлю. Ошибка срабатывает не сразу, а после нескольких проходов через макрос, причем в строку грузится большой объем данных, точно больше 255 символов без проблем)). При перезагрузке файла (сохраненного ранее после ошибочного завершения макроса), Excel начинает его восстанавливать аварийно. После восстановления, при запуске макроса ошибка возникает сразу же. А вот если файл пересохранить в другой версии и еще желательно открыть на другом компьютере, то макрос работает какое-то время безошибочно, затем происходит та же ерунда.
0
Скрипт
5446 / 1127 / 49
Регистрация: 15.09.2012
Сообщений: 3,420
06.12.2012, 22:15 4
m_yuka_r, в сообщении #1 в коде в строке 4 вы удаляете саму ячейку - т.е. ячейки ниже поднимаются вверху, чтобы заполнить пустоту.
Если вам нужно очистить содержимое ячейки, то можно так сделать:
Visual Basic
1
Taget.ClearContents
Напишите фрагмент кода, где вы привязываете диапазон к переменной Taget.
0
m_yuka_r
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 40
07.12.2012, 09:53  [ТС] 5
Я лучше выложу весь код, может где-то в коде ошибка:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lValidation As Long
    On Error Resume Next
      lValidation = ActiveCell.Validation.Type
    On Error GoTo 0
    If lValidation <> 3 Then
        Exit Sub
    End If
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("B5:E1000")) Is Nothing Then Exit Sub
If Target.Column = 5 Then Exit Sub
If Target.Value = vbNullString Then Exit Sub
Dim r As Range, s$
Set r = Sheets("Прайс").Columns(Target.Column - 1).Find(Target.Value, LookAt:=xlWhole)
Sheets("Прайс").Outline.ShowLevels RowLevels:=4
If r Is Nothing Then
With Target.Next
     Target.Value = ""
     Target.Validation.Delete
End With
Exit Sub
End If
Set r = Intersect(Sheets("Прайс").UsedRange, Sheets("Прайс").Range(r, r.End(xlDown))).Offset(, 1)
 
s = F_conc_col_noblanks_sep_snb(r, ",")
 
With Target.Next
    .Value = ""
    With .Validation
     .Delete
        If s <> vbNullString Then .Add Type:=xlValidateList, Formula1:=s
  End With
End With
End Sub
 
Public Function F_conc_col_noblanks_sep_snb(c01 As Range, c03 As String) As String
F_conc_col_noblanks_sep_snb = Replace(Join(Filter(Split("~" & Join(Application.Transpose(c01.Value), "~|~") & "~", "|"), "~~", False), c03), "~", "")
End Function
К сожалению я не могу организовать наглядный файл с примером, т.к. это прайс. Могу на почту выслать оригинал файла.
0
Скрипт
5446 / 1127 / 49
Регистрация: 15.09.2012
Сообщений: 3,420
07.12.2012, 10:44 6
m_yuka_r, ошибка у вас осталась или код стал нормально работать?
0
m_yuka_r
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 40
07.12.2012, 11:14  [ТС] 7
Цитата Сообщение от Скрипт Посмотреть сообщение
m_yuka_r, ошибка у вас осталась или код стал нормально работать?
Я сейчас методом "научного" тыка искала причину возникновения ошибки. Благо, у меня был резервный файл, где я могла экспериментировать. Нашла...)) Дело в самих данных, а не в коде макроса. Данные книги у меня создаются формулами. При копировании: ->Копировать->Специальная вставка->Значения, формулы в пустых ячейках где-то в контентах остаются. И даже если после пошагового очищения этих "пустых" ячеек, суть работы не меняется.
Что я сделала: сначала я очистила от "видимых" формул данные (т.е. пустые ячейки с формулами), а только после этого скопировала. Вот тогда у меня все стало работать без ошибок и без "заяв" на то, что длинный текст.

Все ничего, но то, что при специальной вставке вставляются значения, с "признаками" формул в пустых ячейках (а может и не в пустых тоже), я не ожидала.
Спасибо огромное за участие в моей проблеме! Надеюсь, недоработки исправятся в дальнейшей разработке Excel и никто не попадется на те же "грабли" что и я.
0
Скрипт
5446 / 1127 / 49
Регистрация: 15.09.2012
Сообщений: 3,420
07.12.2012, 11:26 8
Сейчас попробовал, действительно какой-то сбой в работе Excel.
Если в ячейке есть формула, то такой код:
Visual Basic
1
2
3
4
5
Sub Procedure_3()
 
    ActiveCell.Clear
    
End Sub
удаляет содержимое ячейки, но в строке формул видно формулу. Если сделать активной другую ячейку, а затем вернуться обратно, то уже формулы нет в строке формул.

Вот такой код решает эту проблему:
Visual Basic
1
2
3
4
5
Sub Procedure_4()
 
    ActiveCell.Formula = ""
    
End Sub
0
m_yuka_r
0 / 0 / 0
Регистрация: 06.05.2012
Сообщений: 40
07.12.2012, 11:38  [ТС] 9
Цитата Сообщение от Скрипт Посмотреть сообщение
что за "контент" вы имеет ввиду?
Сейчас попробовал, действительно какой-то сбой в работе Excel.
возможно я не так выразилась... В том смысле, что ячейка хоть выглядит пустой, но на самом деле где-то в программе в ней что-то содержится. Кстати код
Visual Basic
1
ActiveCell.Value
я не проверяла. Возможно он возвращает реально пустое значение ячейки по формуле.

Добавлено через 4 минуты
Цитата Сообщение от Скрипт Посмотреть сообщение
Сейчас попробовал, действительно какой-то сбой в работе Excel.

Вот такой код решает эту проблему:
Visual Basic
1
2
3
4
5
Sub Procedure_4()
 
    ActiveCell.Formula = ""
    
End Sub
это кстати надо иметь ввиду... И... свои формулы я удаляла
Visual Basic
1
ActiveCell.ClearContents
0
07.12.2012, 11:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 11:38

Как работать с таблицами FireBird
Уважаемые Гуру, обращаюсь к Вам со своей проблемой, так как других вариантов...

Как в VBA работать с файлами ?
Есть двоичный фаил нужно его прочитать(кусками или сразу целиком) используя...

Как правильно работать с Recordset
Здравствуйте. Сейчас данные получаю так: SQLText = &quot;select t.znach from...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru