есть проблема, решение которой не могу найти, гугл не дал желаемых результатов. Есть комбобокс с диапазоном А1:А20, который частично заполнен позициями и будет дальше заполнятся по мере надобности. Нужно по средствам vba заставить комбобокс отображать только заполненные позиции без пустых строк. Заранее спасибо.
есть проблема, решение которой не могу найти, гугл не дал желаемых результатов. Есть комбобокс с диапазоном А1:А20, который частично заполнен позициями и будет дальше заполнятся по мере надобности. Нужно по средствам vba заставить комбобокс отображать только заполненные позиции без пустых строк. Заранее спасибо.Skynet
св-во ListFillRange очистить и в модуль листа "Лист1" (на котором находится комбобокс): [vba]
Код
Option Explicit
Private Sub Worksheet_Activate() Dim c As Range, n As Integer, aList() For Each c In Sheets("Лист2").Range("A1:A20") If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c ComboBox1.List = aList End Sub
[/vba]
св-во ListFillRange очистить и в модуль листа "Лист1" (на котором находится комбобокс): [vba]
Код
Option Explicit
Private Sub Worksheet_Activate() Dim c As Range, n As Integer, aList() For Each c In Sheets("Лист2").Range("A1:A20") If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c ComboBox1.List = aList End Sub
Private Sub Worksheet_Activate() Dim c As Range, n As Integer, aList() For Each c In Sheets("лист2").Range("A1:A20") If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c ComboBox1.List = aList
Dim d As Range, o As Integer For Each d In Sheets("лист2").Range("A21:A40") If Len(d.Value) > 0 Then o = o + 1 ReDim Preserve aList(1 To o) aList(o) = d.Value End If Next d ComboBox2.List = aList
End Sub
[/vba]
выдает рантайм ерор 9
преобразовал в
[vba]
Код
Option Explicit
Private Sub Worksheet_Activate() Dim c As Range, n As Integer, aList() For Each c In Sheets("лист2").Range("A1:A20") If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c ComboBox1.List = aList
Dim d As Range, o As Integer For Each d In Sheets("лист2").Range("A21:A40") If Len(d.Value) > 0 Then o = o + 1 ReDim Preserve aList(1 To o) aList(o) = d.Value End If Next d ComboBox2.List = aList
Skynet, вставь перед вторым куском кода (скопированным) [vba]
Код
Dim aList()
[/vba]или используй другой массив...
Впрочем... [vba]
Код
Option Explicit
Private Sub Worksheet_Activate() MakeList Sheets("Лист2").Range("A1:A20"), ComboBox1 MakeList Sheets("Лист2").Range("A21:A40"), ComboBox2 End Sub
Sub MakeList(ByVal Sour As Range, ByRef Dest As Object) Dim c As Range, n As Integer, aList() For Each c In Sour.Cells If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c Dest.List = aList End Sub
[/vba]
Skynet, вставь перед вторым куском кода (скопированным) [vba]
Код
Dim aList()
[/vba]или используй другой массив...
Впрочем... [vba]
Код
Option Explicit
Private Sub Worksheet_Activate() MakeList Sheets("Лист2").Range("A1:A20"), ComboBox1 MakeList Sheets("Лист2").Range("A21:A40"), ComboBox2 End Sub
Sub MakeList(ByVal Sour As Range, ByRef Dest As Object) Dim c As Range, n As Integer, aList() For Each c In Sour.Cells If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c Dest.List = aList End Sub
AndreTM твой код в файле примера тоже работает, а в основном файле та же ошибка
основной файл, код:
[vba]
Код
Option Explicit
Private Sub Worksheet_Activate() MakeList Sheets("База данных 1").Range("S3:S99"), ComboBox6 MakeList Sheets("База данных 1").Range("S100:S199"), ComboBox8 MakeList Sheets("База данных 1").Range("S200:S299"), ComboBox9 MakeList Sheets("База данных 1").Range("S200:S299"), ComboBox12 End Sub
Sub MakeList(ByVal Sour As Range, ByRef Dest As Object) Dim c As Range, n As Integer, aList() For Each c In Sour.Cells If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c Dest.List = aList End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' скрытие строк второго листа на вкладке "Загружения в СКАД"
If Target.Address = [V1].Address Then Select Case Target Case 0 Sheets("Загружения в SCAD").Rows("53:105").Hidden = True Case 1 Sheets("Загружения в SCAD").Rows("53:105").Hidden = False End Select End If
' скрытие элементов в зависимости от норм расчета (ПУЭ 6, ПУЭ 7)
If Target.Address = [Y7].Address Then Select Case Target Case 0 Sheets("Нагрузки на опору").ComboBox4.Visible = False Sheets("Нагрузки на опору").ComboBox15.Visible = True Sheets("Нагрузки на опору").ComboBox10.Visible = False Sheets("Нагрузки на опору").ComboBox11.Visible = False Case 1 Sheets("Нагрузки на опору").ComboBox4.Visible = True Sheets("Нагрузки на опору").ComboBox15.Visible = False Sheets("Нагрузки на опору").ComboBox10.Visible = True Sheets("Нагрузки на опору").ComboBox11.Visible = True End Select End If
End Sub
[/vba]
AndreTM твой код в файле примера тоже работает, а в основном файле та же ошибка
основной файл, код:
[vba]
Код
Option Explicit
Private Sub Worksheet_Activate() MakeList Sheets("База данных 1").Range("S3:S99"), ComboBox6 MakeList Sheets("База данных 1").Range("S100:S199"), ComboBox8 MakeList Sheets("База данных 1").Range("S200:S299"), ComboBox9 MakeList Sheets("База данных 1").Range("S200:S299"), ComboBox12 End Sub
Sub MakeList(ByVal Sour As Range, ByRef Dest As Object) Dim c As Range, n As Integer, aList() For Each c In Sour.Cells If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c Dest.List = aList End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' скрытие строк второго листа на вкладке "Загружения в СКАД"
If Target.Address = [V1].Address Then Select Case Target Case 0 Sheets("Загружения в SCAD").Rows("53:105").Hidden = True Case 1 Sheets("Загружения в SCAD").Rows("53:105").Hidden = False End Select End If
' скрытие элементов в зависимости от норм расчета (ПУЭ 6, ПУЭ 7)
If Target.Address = [Y7].Address Then Select Case Target Case 0 Sheets("Нагрузки на опору").ComboBox4.Visible = False Sheets("Нагрузки на опору").ComboBox15.Visible = True Sheets("Нагрузки на опору").ComboBox10.Visible = False Sheets("Нагрузки на опору").ComboBox11.Visible = False Case 1 Sheets("Нагрузки на опору").ComboBox4.Visible = True Sheets("Нагрузки на опору").ComboBox15.Visible = False Sheets("Нагрузки на опору").ComboBox10.Visible = True Sheets("Нагрузки на опору").ComboBox11.Visible = True End Select End If
Господа, прошу меня понять и простить, оба варианта рабочие, просто я из нужных комбобоксов в окне свойств ListFillRange не удалил старую ссылку на диапазон.
Господа, прошу меня понять и простить, оба варианта рабочие, просто я из нужных комбобоксов в окне свойств ListFillRange не удалил старую ссылку на диапазон.Skynet