Панель макросов Excel Mac

У меня есть сводка консолидации, с которой я изо всех сил пытался работать (хотя и занимает некоторое время), и хотел добавить в Progress Bar, чтобы пользователи знали, что excel действительно работает. Мне сложно сделать это. 1. Добавьте в необходимый VBA для правильной работы бара и 2.) Невозможно выяснить, как сохранить окно формы открытым, пока мой фоновый макрос работает, чтобы действительно увидеть прогрессию.

Немного фона: сводный лист обновляется путем сопоставления заголовков из 50 + листов всех из одной и той же книги. Объединяется около 700 тыс. Строк (я предположил, что это так долго), поэтому я недавно изменил .copy, чтобы просто переносить данные.

Мои строки – это как текст, так и цифры, и именно там я испытываю самое сложное время, чтобы выяснить, как заставить индикатор выполнения работать. Как и все примеры, я вижу ссылку на цифры (например, 1 – 1000).

Я попытался как индикатор выполнения формы (framing & Labels), так и даже строку состояния. Я бы взял, если бы я мог заставить его работать!

Вот мой текущий (нерабочий) код. Без кода Progress Bar макрос работает нормально.

Я включаю все связанные модели / формы, поскольку поток в настоящее время также не является правильным.

Это команда кнопок на листе excel:

Sub Openform() Main.Show End Sub 

Это приводит к появлению «основной» формы с помощью двух кнопок «Run Consolidation» и «Cancel»

Этот следующий бит кода – это то место, где я думаю, что цепочка сломана. Код будет перемещаться в макрос консоли, если он выбран, но форма исчезает.

 Private Sub CommandButton2_Click() 'Cancel Button Unload Me End Sheet2.Activate End Sub Private Sub Consolidation_Click() 'Run Consolidation Button Consolidate End Sub Private Sub ProgressBar_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS) End Sub 

Я не уверен, как здесь привязан частный Sub ProgressBar. Вот где мои вводные уровни vba показывают.

 Option Compare Text Option Explicit Sub Consolidate() Dim DemandData As Worksheet Dim DestSh As Worksheet Dim aRow As Range Dim aCol As Range Dim myInCol As Range Dim myOutCol As Range Dim cell As Range Dim iLoop As Long, jLoop As Long Dim nextrow As Long Dim i As Long, rowMaximum As Long, colMaximum As Long Dim r As Long, c As Integer Dim Percent As Single Dim wordcount As Long Application.ScreenUpdating = False ProgressBar2.Min = 0 ProgressBar2.Max = 1 ProgressBar2.Visible = True i = 0 rowMaximum = 10 colMaximum = 26 For r = 1 To rowMaximum For c = 1 To colMaximum Cells(r, c).Select Next c Percent = i / (rowMaximum * colMaximum) PregressBar2.Value = Percent Next r jLoop = 2 ' loop through the worksheets For Each DemandData In ActiveWorkbook.Worksheets ' pick only the worksheets of interest If LCase(Left(DemandData.Name, 6)) = "Demand" Then ProgressBar2.Max = CountA(Sheet3!range1) + CountA(Sheet4!range1) ' find the columns of interest in the worksheet For Each aCol In DemandData.UsedRange.Columns Set myOutCol = Nothing If aCol.Cells(1, 1).Value = "Region Name" Then Set myOutCol = Sheets("Consolidation").Range("B:B") If aCol.Cells(1, 1).Value = "location_code" Then Set myOutCol = Sheets("Consolidation").Range("C:C") If aCol.Cells(1, 1).Value = "location_name" Then Set myOutCol = Sheets("Consolidation").Range("D:D") If aCol.Cells(1, 1).Value = "dealer_code" Then Set myOutCol = Sheets("Consolidation").Range("E:E") If aCol.Cells(1, 1).Value = "order_type_code" Then Set myOutCol = Sheets("Consolidation").Range("F:F") If aCol.Cells(1, 1).Value = "pick_up" Then Set myOutCol = Sheets("Consolidation").Range("G:G") If aCol.Cells(1, 1).Value = "create_date" Then Set myOutCol = Sheets("Consolidation").Range("H:H") If aCol.Cells(1, 1).Value = "invoice_date" Then Set myOutCol = Sheets("Consolidation").Range("I:I") If aCol.Cells(1, 1).Value = "item_number" Then Set myOutCol = Sheets("Consolidation").Range("J:J") If aCol.Cells(1, 1).Value = "long_part" Then Set myOutCol = Sheets("Consolidation").Range("K:K") If aCol.Cells(1, 1).Value = "part_description" Then Set myOutCol = Sheets("Consolidation").Range("L:L") If aCol.Cells(1, 1).Value = "item_product_code" Then Set myOutCol = Sheets("Consolidation").Range("M:M") If aCol.Cells(1, 1).Value = "inv_acct_type" Then Set myOutCol = Sheets("Consolidation").Range("N:N") If aCol.Cells(1, 1).Value = "serial_number" Then Set myOutCol = Sheets("Consolidation").Range("O:O") If aCol.Cells(1, 1).Value = "price_group" Then Set myOutCol = Sheets("Consolidation").Range("P:P") If aCol.Cells(1, 1).Value = "sell_price" Then Set myOutCol = Sheets("Consolidation").Range("Q:Q") If aCol.Cells(1, 1).Value = "package_weight_in_pounds" Then Set myOutCol = Sheets("Consolidation").Range("R:R") If aCol.Cells(1, 1).Value = "cost" Then Set myOutCol = Sheets("Consolidation").Range("S:S") If aCol.Cells(1, 1).Value = "quantity_sold" Then Set myOutCol = Sheets("Consolidation").Range("T:T") If aCol.Cells(1, 1).Value = "invoice_total" Then Set myOutCol = Sheets("Consolidation").Range("U:U") If aCol.Cells(1, 1).Value = "ship_to_city" Then Set myOutCol = Sheets("Consolidation").Range("V:V") If aCol.Cells(1, 1).Value = "ship_to_state" Then Set myOutCol = Sheets("Consolidation").Range("W:W") If aCol.Cells(1, 1).Value = "ship_to_postal_code" Then Set myOutCol = Sheets("Consolidation").Range("X:X") If aCol.Cells(1, 1).Value = "vendor_number" Then Set myOutCol = Sheets("Consolidation").Range("Y:Y") If aCol.Cells(1, 1).Value = "vendor_name" Then Set myOutCol = Sheets("Consolidation").Range("Z:Z") If Not myOutCol Is Nothing Then ' don't move the top line, it contains the headers - no data Set myInCol = aCol Set myInCol = myInCol.Offset(1, 0).Resize(myInCol.Rows.Count - 1, myInCol.Columns.Count) ' transfer data from the project tab to the consolidated tab iLoop = jLoop ProgressBar2.Value = ProgressBar2.Min For r = 1 To rowMaximum For c = 1 To colMaximum For Each aRow In myInCol.Rows myOutCol.Cells(iLoop, 1) = aRow.Cells(1, 1).Value If Sheet2.Cells(Rows.Count, "A").End(xlUp).Row <> Sheet2.Cells(Rows.Count, "B").End(xlUp).Row Then nextrow = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row + 1 Sheet2.Range("A" & nextrow) = DemandData.Name End If Next aRow End If Next aCol End If If iLoop > jLoop Then jLoop = iLoop Next DemandData Sheet2.Columns.AutoFit MsgBox "Consolidation of Demand Completed" Sheet2.Activate Application.ScreenUpdating = True End Sub 

У меня есть строки кода, которые я считаю правильными, но они все равно не будут работать !!!! Пожалуйста, любая и вся поддержка более чем оценена! Не стесняйтесь предлагать и другие средства улучшения.

Благодаря!!

Давайте будем гением компьютера.