Excel VBA列表框显示新选择后的上一条记录

时间:2015-12-30 20:58:52

标签: forms excel-vba listbox vba excel

所以我在用户表单上有listbox1。当用户单击列表框中的项目时,我将使用列表框选择的值填充工作表上的单元格C20。

Private Sub frmListBox1_Click()
Worksheets("CONTROLSRFDS").Range("C20").Value = frmListBox1.Value

For i = 1 To 53 ' Non Multipage Controls
    Me.Controls("Label" & i).Caption = Worksheets("CONTROLSRFDS").Range("RBSLabels").Cells(i, 1).Value
    Me.Controls("TextBox" & i).Value = Worksheets("CONTROLSRFDS").Range("RBSOutput").Cells(i, 1).Value
Next i

End Sub

根据单元格C20中的选择,工作表将使用基于单元格C20中的这一个值的公式重新计算超过30个数据范围。 对这30个数据范围进行编码,以将其新值传输到用户表单中包含的标签标题上。

正在发生的是表单将正确初始化,但是一旦为新选择选择了列表框,用户表单上的所有值都显示属于上一个选择的值,但是在工作表上公式正在计算,只是新值不会使用正确的信息填充用户表单上的标签标题。我试图通过使用工作表模块和表单本身中的更改事件和单击事件来解决这个问题,但没有成功。我无法解决这个问题。每次点击,显示的数据都会显示上一条记录。

ListBox更改事件的代码:

Private Sub frmListBox1_Change()

If Application.CalculationState = done Then

Worksheets("CONTROLSRFDS").Range("C20").Value = frmListBox1.Value

For i = 1 To 53 ' Non Multipage Controls
Me.Controls("Label" & i).Caption = Worksheets("CONTROLSRFDS").Range("RBSLabels").Cells(i, 1).Value
Me.Controls("TextBox" & i).Value = Worksheets("CONTROLSRFDS").Range("RBSOutput").Cells(i, 1).Value
Next i

ii = 1 'Antenna Labels
For i = 54 To 75
Me.Controls("Label" & i).Caption = Worksheets("CONTROLSRFDS").Range("AntennaLabels").Cells(ii, 1).Value
        ii = ii + 1
Next i
End If
End sub

有人可以帮忙吗?怎么了?是否有我没有引用的索引属性?提前谢谢!

1 个答案:

答案 0 :(得分:0)

解决。在运行所有过程之前,将以下代码插入到列表框的click事件中:

Application.Calculate
If Not Application.CalculationState = xlDone Then
    DoEvents
End If

感谢所有努力查看我的帖子的人。

新年快乐。