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

问题描述 投票:0回答:1

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

按钮正在调用模块来显示表单。

模块代码:

Option Explicit

Sub Show_Form()
  UserForm1.Show
End Sub

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

但是当我单击 VBA Developer 中的运行按钮时:

有时显示,有时不显示。

这是一个错误吗?

这是我的简单表单的代码。下面的代码用于保存条目并显示最后 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 listbox display initializer-list
1个回答
0
投票

如果使用 ActiveSheet,则必须确保在启动代码之前已选择包含数据的工作表(在窗口中可见),并且稍后在代码运行时不会选择该工作表,或者在执行到 ActiveSheet 代码时激活另一个工作表部分。正因为如此,使用它们的名称更容易并且需要更少的跟踪实际单元格或工作表。

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

With ActiveSheet

有了这个

With Worksheets("the_sheet_name")   'where the data are
© www.soinside.com 2019 - 2024. All rights reserved.