提问人:Shiela 提问时间:9/9/2023 最后编辑:Shiela 更新时间:9/9/2023 访问量:33
单击启用宏的按钮时,列表框不显示条目
Listbox not showing entries when macro-enabled button is clicked
问:
我有一个列表框,当从 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
答:
1赞
Black cat
9/9/2023
#1
如果使用 ActiveSheet,则必须确保在开始代码之前,带有数据的工作表被选中(在窗口中可见),稍后在代码运行时,没有选择或在执行到达 ActiveSheet 代码部分时激活另一个工作表。正因为如此,它更容易,并且需要更少的实际单元格或工作表来使用它们的名称。
根据此(根据评论测试成功)替换此行
With ActiveSheet
有了这个
With Worksheets("the_sheet_name") 'where the data are
评论
With Worksheets("name_of_sheet")
A1:F11
lbx.RowSource = ActiveSheet.Range("A2:F11").Address(External:=True)
A2
A1