Приветствую участников форума! Вопрос состоит в следующем: Возможно ли организовать ввод в ячейку (F2) значения из выпадающего списка так, чтобы предыдущее значение не удалялось? Если возможно, то как?
Приветствую участников форума! Вопрос состоит в следующем: Возможно ли организовать ввод в ячейку (F2) значения из выпадающего списка так, чтобы предыдущее значение не удалялось? Если возможно, то как?Мур
правой кнопкой по ярлыку листа "Лист1" - Исходный текст. Туда это: [vba]
Code
Option Explicit Private vCurr As Variant
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$2" Then Application.EnableEvents = False Target.Value = vCurr & " " & Target.Value Application.EnableEvents = True vCurr = Target.Value End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$F$2" Then vCurr = Target.Value End If End Sub
[/vba]
ps если не сработает, включи макросы
правой кнопкой по ярлыку листа "Лист1" - Исходный текст. Туда это: [vba]
Code
Option Explicit Private vCurr As Variant
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$2" Then Application.EnableEvents = False Target.Value = vCurr & " " & Target.Value Application.EnableEvents = True vCurr = Target.Value End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$F$2" Then vCurr = Target.Value End If End Sub
Вопрос: Для чего это нужно? Человек иногда склонен к созданию для самого себя трудностей, чтобы в последствии их героически преодолевать. Здесь не тот же случай?
Вопрос: Для чего это нужно? Человек иногда склонен к созданию для самого себя трудностей, чтобы в последствии их героически преодолевать. Здесь не тот же случай?kim
Сцяна - гэта тая ж прыступка. Проста трэба дарасьці да яе.
Уважаемый kim, Не тот же случай! Попытаюсь объяснить. Есть система взаимосявзанных таблиц, часть которых составляет несколько баз данных. Переделывать их очень затратно по времени. При их проектировании не были учтены все необходимые для занесения типы и виды данных. Если обычными средствами добавлять в таблицу столбцы под данные (причем добавлять необходимо в определенном месте), все остальное слетает. Я вижу выход в организации множественного поля, как в некоторых СУБД. Если подскажете другое решение, буду благодарен. Вариант Сани, еще на разбирал.
Уважаемый kim, Не тот же случай! Попытаюсь объяснить. Есть система взаимосявзанных таблиц, часть которых составляет несколько баз данных. Переделывать их очень затратно по времени. При их проектировании не были учтены все необходимые для занесения типы и виды данных. Если обычными средствами добавлять в таблицу столбцы под данные (причем добавлять необходимо в определенном месте), все остальное слетает. Я вижу выход в организации множественного поля, как в некоторых СУБД. Если подскажете другое решение, буду благодарен. Вариант Сани, еще на разбирал.Мур
Уважаемый Саня, Ваш вариант решения работает как часы. Большое спасибо. Прошу Вас добавить пару комментов (для чайника), как ,например, задать эти свойства всему столбцу F? Уважаемый Serge_007, Вам тот же вопрос, плюс, почему можно не объявлять As Variant? Заранее благодарен за ответы.
Уважаемый Саня, Ваш вариант решения работает как часы. Большое спасибо. Прошу Вас добавить пару комментов (для чайника), как ,например, задать эти свойства всему столбцу F? Уважаемый Serge_007, Вам тот же вопрос, плюс, почему можно не объявлять As Variant? Заранее благодарен за ответы.Мур
Действительно неприятность. Как же быть если надо будет подредактировать? Нет,.... можно, конечно, удалить исходный код, внести изменения в ячейку, а потом опять вставить исходный код, но это как-то неправльно что ли.
Действительно неприятность. Как же быть если надо будет подредактировать? Нет,.... можно, конечно, удалить исходный код, внести изменения в ячейку, а потом опять вставить исходный код, но это как-то неправльно что ли.Мур
Option Explicit ' т.к. идет речь о конкатенации, то это строковая переменная Private sCurr As String ' переменная нужна для хранения значения ячейки ПЕРЕД изменением (запись осуществляется обеими процедурами)
Private Sub Worksheet_Change(ByVal Target As Range) ' это событие происходит при изменениях в ячейках (непосредственно ПОСЛЕ), таргет - тот самый потерпевший If Target.Count > 1 Then Exit Sub ' изменяется за раз ОДНА ячейка
If Len(Target.Value) = 0 Then ' эта строка означает, что после изменения ячейки длина ее содержимого стала равна 0, т.е. ее того... Delete sCurr = "" ' соответственно очищаем переменную Exit Sub End If
If Target.Column = 6 Then sCurr = sCurr & " " & Target.Value ' прицепляем НОВОЕ значение в ячейке к ТЕКУЩЕМУ Stop ' посмотри на ячейку, потом удали эту строку Application.EnableEvents = False ' вырубаем события, ибо след. строка вызовет этот же обработчик (бесконечн. цикл) Target.Value = sCurr Application.EnableEvents = True End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' отслеживается хождение по ячейкам, попробуй закомментировать этот обработчик, посмотри, что выйдет If Target.Column = 6 Then sCurr = CStr(Target.Value) End If End Sub
[/vba]
Quote (Мур)
Может на досуге объясните как?
не понял, особенно вопросительное слово
объясню свой код [vba]
Code
Option Explicit ' т.к. идет речь о конкатенации, то это строковая переменная Private sCurr As String ' переменная нужна для хранения значения ячейки ПЕРЕД изменением (запись осуществляется обеими процедурами)
Private Sub Worksheet_Change(ByVal Target As Range) ' это событие происходит при изменениях в ячейках (непосредственно ПОСЛЕ), таргет - тот самый потерпевший If Target.Count > 1 Then Exit Sub ' изменяется за раз ОДНА ячейка
If Len(Target.Value) = 0 Then ' эта строка означает, что после изменения ячейки длина ее содержимого стала равна 0, т.е. ее того... Delete sCurr = "" ' соответственно очищаем переменную Exit Sub End If
If Target.Column = 6 Then sCurr = sCurr & " " & Target.Value ' прицепляем НОВОЕ значение в ячейке к ТЕКУЩЕМУ Stop ' посмотри на ячейку, потом удали эту строку Application.EnableEvents = False ' вырубаем события, ибо след. строка вызовет этот же обработчик (бесконечн. цикл) Target.Value = sCurr Application.EnableEvents = True End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' отслеживается хождение по ячейкам, попробуй закомментировать этот обработчик, посмотри, что выйдет If Target.Column = 6 Then sCurr = CStr(Target.Value) End If End Sub