我正在尝试使用excel vba教程中的以下代码,但它失败了:ProgressBat没有更新,加上UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1
行被高亮显示错误`运行时错误380.无效的属性值“。
Sub ShowProgressBar()
Dim lAllCnt As Long
Dim rc As Range
lAllCnt = Selection.Count
UserForm1.Show
UserForm1.ProgressBar1.Min = 1
UserForm1.ProgressBar1.Max = lAllCnt
For Each rc In Selection
UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1
Next
Unload UserForm1
End Sub
可能有什么问题?
答案 0 :(得分:3)
那是因为你超过了最大值。试试这个
For Each rc In Selection
If UserForm1.ProgressBar1.Value < UserForm1.ProgressBar1.Max Then
UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1
End If
Next
BTW我想您忘记在vbModeless
UserForm1.Show
<强>解释强>
当您设置进度条的最小值或最大值时,您无法为其指定不属于该范围的值。例如,如果最小值= 1且最大值= 5,则在分配小于1且大于5的值时,您将收到错误。
这是经过测试的代码
Sub ShowProgressBar()
Dim lAllCnt As Long
Dim rc As Range
lAllCnt = Selection.Count
With UserForm1
.Show vbModeless
With .ProgressBar1
.Min = 1
.Max = lAllCnt
For Each rc In Selection
If .Value < .Max Then
.Value = .Value + 1
End If
Next
End With
End With
'~~> I have uncommented it so that you can see the
'~~> Userform with the progress bar with it's values
'Unload UserForm1
End Sub
答案 1 :(得分:1)
如前所述,您应该尝试查看最小值和最大值。我在一个单独的函数中完成了它。通常,在迭代之间等待,以查看进度条更新可能是个好主意。
calc
一般来说,如果您熟悉面向对象编程并希望更好地编写代码,请尝试将整个表单重建为一个类。
答案 2 :(得分:-1)
我不确定你的进度表看起来如何以及你正在使用什么类型的代码(可能粘贴一个链接?)但是当我使用进度条时我只改变了用户表单栏的宽度属性而不是它的值,即G。像这里http://www.excel-easy.com/vba/examples/progress-indicator.html。