Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Диапазон для поля со списком - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Диапазон для поля со списком
Гость Дата: Вторник, 03.07.2012, 23:06 | Сообщение № 1
Группа: Гости
Здравствуйте!

Помогите, пожалуйста разобраться: как нужно присвоить диапазоны для ValidationList (с 1-го по 3-ий), что бы данные брались не с Листа2 (как сейчас), а брались бы с Листа3 ? Ещё не могу присвоить свойство MatchRequired = True (нельзя ввести значения, отличные от списка) для ComboBox1, куда нужно добавить строку со свойством ? Заранее Большое Спасибо за помощь!!!

Код:

Option Explicit

Const ValidationList1 = "n4:n17"
Const ValidationList2 = "p4:p13"
Const ValidationList3 = "q4:q13"

Public Events As Boolean

Sub ComboChange(cb As ComboBox)
If Not Events Then Exit Sub
ActiveCell.Value = cb.Value
HideCombo cb
End Sub

Private Sub ComboBox1_Change()
ComboChange Me.ComboBox1
End Sub

Private Sub ComboBox2_Change()
ComboChange Me.ComboBox2
End Sub

Private Sub ComboBox3_Change()
ComboChange Me.ComboBox3
End Sub

Sub FillCombo(cb As ComboBox, validList As String)
Dim cell As Range
cb.Clear
For Each cell In Range(validList).Cells
cb.AddItem cell
Next
cb.ListRows = Range(validList).Cells.Count
cb.Value = ActiveCell.Value: cb.Font.Size = 10
End Sub

Sub HideCombo(cb As ComboBox)
With cb
.Top = 0: .Left = 0: .Width = 0: .Height = 0
End With
End Sub

Sub ShowCombo(cb As ComboBox, Target As Range)
With cb
.Top = Target.Top: .Left = Target.Left
.Width = Target.Width + 16: .Height = Target.Height
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

HideCombo Me.ComboBox1
HideCombo Me.ComboBox2
HideCombo Me.ComboBox3

If Target.Cells.Count > 1 Then
Exit Sub
End If

If Not (Intersect(Target, [e4:e6]) Is Nothing) Then
Events = False
ShowCombo Me.ComboBox1, Target
FillCombo Me.ComboBox1, ValidationList1
Events = True
End If

If Not (Intersect(Target, [b4:b6]) Is Nothing) Then
Events = False
ShowCombo Me.ComboBox2, Target
FillCombo Me.ComboBox2, ValidationList2
Events = True
End If

If Not (Intersect(Target, [h4:h6]) Is Nothing) Then
Events = False
ShowCombo Me.ComboBox1, Target
FillCombo Me.ComboBox1, ValidationList3
Events = True
End If

End Sub
 
Ответить
СообщениеЗдравствуйте!

Помогите, пожалуйста разобраться: как нужно присвоить диапазоны для ValidationList (с 1-го по 3-ий), что бы данные брались не с Листа2 (как сейчас), а брались бы с Листа3 ? Ещё не могу присвоить свойство MatchRequired = True (нельзя ввести значения, отличные от списка) для ComboBox1, куда нужно добавить строку со свойством ? Заранее Большое Спасибо за помощь!!!

Код:

Option Explicit

Const ValidationList1 = "n4:n17"
Const ValidationList2 = "p4:p13"
Const ValidationList3 = "q4:q13"

Public Events As Boolean

Sub ComboChange(cb As ComboBox)
If Not Events Then Exit Sub
ActiveCell.Value = cb.Value
HideCombo cb
End Sub

Private Sub ComboBox1_Change()
ComboChange Me.ComboBox1
End Sub

Private Sub ComboBox2_Change()
ComboChange Me.ComboBox2
End Sub

Private Sub ComboBox3_Change()
ComboChange Me.ComboBox3
End Sub

Sub FillCombo(cb As ComboBox, validList As String)
Dim cell As Range
cb.Clear
For Each cell In Range(validList).Cells
cb.AddItem cell
Next
cb.ListRows = Range(validList).Cells.Count
cb.Value = ActiveCell.Value: cb.Font.Size = 10
End Sub

Sub HideCombo(cb As ComboBox)
With cb
.Top = 0: .Left = 0: .Width = 0: .Height = 0
End With
End Sub

Sub ShowCombo(cb As ComboBox, Target As Range)
With cb
.Top = Target.Top: .Left = Target.Left
.Width = Target.Width + 16: .Height = Target.Height
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

HideCombo Me.ComboBox1
HideCombo Me.ComboBox2
HideCombo Me.ComboBox3

If Target.Cells.Count > 1 Then
Exit Sub
End If

If Not (Intersect(Target, [e4:e6]) Is Nothing) Then
Events = False
ShowCombo Me.ComboBox1, Target
FillCombo Me.ComboBox1, ValidationList1
Events = True
End If

If Not (Intersect(Target, [b4:b6]) Is Nothing) Then
Events = False
ShowCombo Me.ComboBox2, Target
FillCombo Me.ComboBox2, ValidationList2
Events = True
End If

If Not (Intersect(Target, [h4:h6]) Is Nothing) Then
Events = False
ShowCombo Me.ComboBox1, Target
FillCombo Me.ComboBox1, ValidationList3
Events = True
End If

End Sub

Автор - Гость
Дата добавления - 03.07.2012 в 23:06
Hugo Дата: Вторник, 03.07.2012, 23:46 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
С второго листа так:

[vba]
Code
Sub FillCombo(cb As ComboBox, validList As String)
            Dim cell As Range
            cb.Clear
            For Each cell In Sheets(2).Range(validList).Cells
                cb.AddItem cell
            Next
            cb.ListRows = Range(validList).Cells.Count
            cb.Value = ActiveCell.Value: cb.Font.Size = 6
End Sub
[/vba]

С MatchRequired = True можно зайти в свойства комбобокса и добавить один раз вручную. Но что-то не срабатывает...


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеС второго листа так:

[vba]
Code
Sub FillCombo(cb As ComboBox, validList As String)
            Dim cell As Range
            cb.Clear
            For Each cell In Sheets(2).Range(validList).Cells
                cb.AddItem cell
            Next
            cb.ListRows = Range(validList).Cells.Count
            cb.Value = ActiveCell.Value: cb.Font.Size = 6
End Sub
[/vba]

С MatchRequired = True можно зайти в свойства комбобокса и добавить один раз вручную. Но что-то не срабатывает...

Автор - Hugo
Дата добавления - 03.07.2012 в 23:46
Гость Дата: Вторник, 03.07.2012, 23:53 | Сообщение № 3
Группа: Гости
Hugo, БЛАГОДАРЮ за помощь!
 
Ответить
СообщениеHugo, БЛАГОДАРЮ за помощь!

Автор - Гость
Дата добавления - 03.07.2012 в 23:53
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!