【发布时间】:2016-08-17 18:11:34
【问题描述】:
我想参考这个进度条示例。 http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/
关于我的 vb 工作,我将生成一个在整个工作表中使用 ADO 的报告。由于报告生成时间太长(1分钟),我想在报告生成过程中实现一个进度条。顺便说一句,报告将在一个新的excel文件中生成。
Private Sub CommandButton3_Click()
Dim sSQLQry As String
Dim ReturnArray
Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String
DBPath = ThisWorkbook.FullName
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
Conn.Open sconnect
sSQLSting = "..."
Set rs = Conn.Execute(sSQLSting)
j = 6
Do While Not rs.EOF
with thisworkbook.worksheets("report")
.Cells(j, 1) = rs.Fields(0).Value
.Cells(j, 3) = rs.Fields(2).Value
.Cells(j, 4) = rs.Fields(3).Value
.Cells(j, 7) = rs.Fields(6).Value
End with
j = j + 1
rs.MoveNext
Loop
rs.Close
Dim wb As Workbook
Set wb = Workbooks.Add
ThisWorkbook.Sheets("report").Copy Before:=wb.Sheets(1)
...copy Sheets("report") to wb ...
strFileName = "c:\Users\" & Environ("Username") & "\Desktop\" & ThisWorkbook.Sheets("report").Cells(1, 1) & ".xlsx"
'End With
wb.SaveAs strFileName
我阅读了进度条码。它需要使用循环变量PctDone = Counter / (RowMax * ColMax)。对于我的代码,它包括不同的工作——SQL 计算、粘贴到工作表(“报告”)、将工作表(“报告”)复制到新工作簿。因此,我不知道如何使我的代码与这个进度条应用程序相匹配。
如果在我的情况下无法实现进度条,我该怎么做才能让用户知道“请耐心等待大约 1 分钟”?
【问题讨论】:
-
如果不知道 a) 您要处理的项目总数(数据库中的行数)和 b) 您已处理的行数的计数器,您将无法计算完成百分比加工完毕。第二个很简单 - 添加一个变量,每次通过循环时递增。只有在开始循环之前可以确定有多少行时,第一个才是可能的 - 你能做到吗?
-
@Ken White 我不知道每个报告的确切行,因为我使用
End(xlUp).row完成新工作簿中的最终报告。另外,我不知道 SQL 所在的行将产生,以及花费在制作和编写新工作条上的时间。 -
您不需要使用进度条本身,因为@KenWhite 提到您无法计算百分比。话说回来。有一个替代方案。让我搜索我的项目数据库。我有一个样本,如果我找到它,我会发布它。它涉及列表框和用户窗体
-
@Siddharth Rout 我尝试使用显示“请稍等一分钟”的用户表单,但我发现它需要花费一些时间来加载新的用户表单。这使得整个应用程序的加载时间很长。
-
如果您不知道这两件事,就无法显示显示完成百分比的进度条。您可以显示一个选取框样式的进度条(只是与小绿色部分来回移动,但不显示您走了多远);您可能可以通过 Google 在 VBA 中找到这样做的示例。