【问题标题】:Could not set the RowSource Property. Invalid Property Value无法设置 RowSource 属性。无效的属性值
【发布时间】:2016-01-13 08:24:09
【问题描述】:

我有一个 Excel,我在“A”列中填充了少量数据,我希望数据出现在我的用户表单中的列表框中。但我反复收到运行时错误 380,说明“无法设置 RowSource 属性。无效的属性值” 下面是代码。

Private Sub ComboBox1_Change()

Dim wb123 As Workbook, TempFile As Workbook
Dim Tempsheet As Worksheet
Dim Last_Row As Integer


 Set wb123 = ThisWorkbook
Set TempFile = Workbooks.Open("C:\Users\inkapb\AppData\Local\Temp\EPC AutoTool\Projects\" & Me.ComboBox1.Text & "\Template.xlsm")

 Set Tempsheet = TempFile.Worksheets("Sheet2")
Last_Row = Tempsheet.Cells(Tempsheet.Rows.count, "A").End(xlUp).Row

     With ListBox1

    .ColumnCount = 1
    .ColumnWidths = "50"
    .RowSource = Tempsheet.Range("A2:A" & Last_Row).Address
End With


End Sub

这是我的包含数据的 Excel 表。

【问题讨论】:

  • Tempsheet.Range("A2:A" & Last_Row).Address 应该是 "tempsheet!A2:A" & last_row
  • 错误出现在哪一行?
  • @Nathan_Sav - 我改了但还是一样的错误
  • @Gareth - 错误发生在 --> .RowSource = Tempsheet.Range("A2:A" & Last_Row).Address
  • 您是否尝试过 ListBox1.List = Worksheets("Sheet1").Range("A1:A5").Value 之类的列表属性

标签: vba excel listboxitem


【解决方案1】:

作为一种快速修复,您可以替换

.RowSource = Tempsheet.Range("A2:A" & Last_Row).Address

与

.RowSource = "=Sheet2!A2:A" & Last_Row

另一种方法是使用For 循环遍历单元格并一次添加一个。如果我想在将项目添加到组合框之前执行一些附加操作,我通常使用以下方式,例如有一个If 语句来判断我是否要添加该单元格值。

For i = 2 to Last_Row 'Start from row 2 to Last_Row
     .AddItem Tempsheet.Cells(i,1).Value 'Add the item in the first column
Next i

【讨论】:

  • 是的,这种特殊的 for 循环方法也可以正常工作。万分感谢!现在我有更多的方法来实现最终结果:)
【解决方案2】:

代码对我有用,当您在用户窗体模块中时,按 F8 单步执行代码,这将单步执行代码的每一行。看看这些变量是否在收集值。

如果单步执行时没有值,则“TempFile”可能有问题,例如错误的工作表或其他问题。

还要确保列表框属性中的 Rowsource 为空白。

您也可以使用 List Properties 代替 rowsource,例如:

    Private Sub ComboBox1_Change()

    Dim wb123 As Workbook, TempFile As Workbook
    Dim Tempsheet As Worksheet
    Dim Last_Row As Long, rng As Range


    Set wb123 = ThisWorkbook
    Set TempFile = Workbooks.Open("C:\Users\Dave\Downloads\" & ComboBox1)

    Set Tempsheet = TempFile.Worksheets("Sheet2")

    With Tempsheet
        Last_Row = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set rng = .Range("A2:A" & Last_Row)
    End With


    With ListBox1
        .ColumnCount = 1
        .ColumnWidths = "50"
        .List = rng.Value
    End With

    TempFile.Close True

End Sub

【讨论】:

  • 非常感谢,我一定会尝试这种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多