我有一个列表框,当从 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
如果使用 ActiveSheet,则必须确保在启动代码之前已选择包含数据的工作表(在窗口中可见),并且稍后在代码运行时不会选择该工作表,或者在执行到 ActiveSheet 代码时激活另一个工作表部分。正因为如此,使用它们的名称更容易并且需要更少的跟踪实际单元格或工作表。
根据此(根据评论测试成功)替换此行
With ActiveSheet
有了这个
With Worksheets("the_sheet_name") 'where the data are