单击启用宏的按钮时,列表框不显示条目

Listbox not showing entries when macro-enabled button is clicked

提问人:Shiela 提问时间:9/9/2023 最后编辑:Shiela 更新时间:9/9/2023 访问量:33

问:

我有一个列表框,当从 excel 工作表中单击按钮时,它应该在初始化中显示条目。

button

该按钮正在调用一个模块来显示窗体。

模块代码:

Option Explicit

Sub Show_Form()
  UserForm1.Show
End Sub

窗体显示,但列表框显示为空白。我一直在将列表框的属性设置为不同的多选,但是当单击上面的绿色按钮时仍然显示空白。

blank listbox

但是当我在VBA Developer中单击“运行”按钮时:

run button

有时显示,有时不显示。

entries

这是一个错误吗?

这是我的简单表单的代码。下面的代码用于保存条目并显示最后 10 个条目。没问题。只是列表框不显示,但有时会显示。

Private Sub CommandButton1_Click()

Dim sh As Worksheet

Set sh = ThisWorkbook.Sheets("ExcelEntryDB")

Dim n As Long

n = sh.Range("C" & Application.Rows.Count).End(xlUp).Row

    sh.Range("C" & n + 1).Value = Format(Date, "mm/dd/yyyy")

    sh.Range("D" & n + 1).Value = Format(Time, "hh:nn:ss AM/PM")

    sh.Range("E" & n + 1).Value = Me.txtColor.Value

    sh.Range("F" & n + 1).Value = Me.txtName.Value

    sh.Range("G" & n + 1).Value = Me.txtShape.Value

   

Me.txtName.Value = ""

Me.txtColor.Value = ""

Me.txtShape.Value = ""



showListBoxEntries

End Sub

Private Sub UserForm_Initialize()

    showListBoxEntries

End Sub

Sub showListBoxEntries()

'showing 10 entries only in listbox

Dim arr(10, 5), lastRow As Long, i As Integer 'get last column number using index

With ActiveSheet

arr(0, 0) = .Cells(1, 3)

arr(0, 1) = .Cells(1, 4)

arr(0, 2) = .Cells(1, 5)

arr(0, 4) = .Cells(1, 7)

arr(0, 5) = .Cells(1, 8)

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

    If lastRow > 10 Then

        For i = 1 To 10

            arr(i, 0) = .Cells(lastRow - 10 + i, 3).Text

            arr(i, 1) = .Cells(lastRow - 10 + i, 4).Text

            arr(i, 2) = .Cells(lastRow - 10 + i, 5).Text

            arr(i, 3) = .Cells(lastRow - 10 + i, 6).Text

            arr(i, 4) = .Cells(lastRow - 10 + i, 7).Text

        Next

    Else

        For i = 1 To lastRow - 1

            arr(i, 0) = .Cells(i + 1, 3).Text

            arr(i, 1) = .Cells(i + 1, 4).Text

            arr(i, 2) = .Cells(i + 1, 5).Text

            arr(i, 3) = .Cells(i + 1, 6).Text

            arr(i, 4) = .Cells(lastRow - 10 + i, 7).Text

        Next

    End If

End With

With Me.ListBox1

.ColumnHeads = True

.ColumnCount = 6

.ColumnWidths = "75,75,75,75,75,75"

.List = arr()

End With

End Sub
Excel VBA 显示 初始值设定项列表

评论

2赞 Black cat 9/9/2023
试试这个:而是用 ActiveSheet 定义工作表的名称。.With Worksheets("name_of_sheet")
1赞 VBasic2008 9/9/2023
若要显示标头,需要使用 RowSource 属性。若要使用 RowSource 属性,需要一个包含标头的范围。将此视为替代方案。
0赞 Shiela 9/9/2023
@VBasic2008 是的,谢谢。在我之前的问题中,我仍在尝试在该链接中应用您的代码。我快到了。
0赞 Shiela 9/9/2023
@Blackcat好吧,让我试试
1赞 VBasic2008 9/9/2023
从来没有注意到这是你的问题。这是 VBA,因此您可能应该使用基于一个的 VBA 来简化。您是否检查过数组是否包含正确的值?正如我在之前的回答中所说,要获取标头,您需要将数组写入一个范围,例如 然后将 RowSource 属性与例如 .请注意,不包括标头,而不是 .A1:F11lbx.RowSource = ActiveSheet.Range("A2:F11").Address(External:=True)A2A1

答:

1赞 Black cat 9/9/2023 #1

如果使用 ActiveSheet,则必须确保在开始代码之前,带有数据的工作表被选中(在窗口中可见),稍后在代码运行时,没有选择或在执行到达 ActiveSheet 代码部分时激活另一个工作表。正因为如此,它更容易,并且需要更少的实际单元格或工作表来使用它们的名称。

根据此(根据评论测试成功)替换此行

With ActiveSheet

有了这个

With Worksheets("the_sheet_name")   'where the data are