简单的动态用户表单

Simple Dynamic UserForm

我想创建 ComboBox,它列出从 C5 到“C”行中最后一个非空列的动态更改范围内的非空值。感谢 我构建了以下解决方案,但在使用两个代码块时出现错误“权限被拒绝”:ComboBox1.RowSource 和 ComboBox.List.

Private Sub UserForm_Initialize()
    Dim wsRoadmap As Worksheet
    
    Set wsRoadmap = Sheets("Roadmap")
    
    With wsRoadmap
        ComboBox1.RowSource = .Range("C5", .Range("DJ5").End(xlToLeft)).Address
    End With
    
    With wsRoadmap
        ComboBox1.List = .Range("C5", .Range("DJ5").End(xlToLeft)).Value
    End With

End Sub

如果您想从列中向组合框添加项目,请使用此代码 -

选项显式

私人订阅 UserForm_Initialize()

Dim TCol As Long, CCol As Long
Dim wsRoadmap As Worksheet

Set wsRoadmap = Sheets("Roadmap")

TCol = wsRoadmap.Cells(5, Columns.Count).End(xlToLeft).Column

Me.ComboBox1.Clear

'loop from column C to the last used column of 5th row
For CCol = 3 To TCol
    
    If VBA.Trim(wsRoadmap.Cells(5, CCol).Value) <> "" Then
    
        Me.ComboBox1.AddItem wsRoadmap.Cells(5, CCol).Value
    
    End If
    
Next CCol

结束子

但是如果你想从行中添加项目到组合框然后使用这个代码-

私人订阅 UserForm_Initialize()

Dim TRow As Long, CRow As Long
Dim wsRoadmap As Worksheet

Set wsRoadmap = Sheets("Roadmap")

TRow = wsRoadmap.Cells(Rows.Count, 3).End(xlUp).Row

Me.ComboBox1.Clear

For CRow = 5 To TRow
    
    If VBA.Trim(wsRoadmap.Cells(CRow, 3).Value) <> "" Then
    
        Me.ComboBox1.AddItem wsRoadmap.Cells(CRow, 3).Value
    
    End If
    
Next CRow

结束子