Пользовательская кнопка ленты открывает файл макроса, но затем переключает фокус - PullRequest
0 голосов
/ 21 января 2019

Я написал макрос Excel, который анализирует список URL-адресов, сохраняя информацию из рабочего листа для каждого URL-адреса.

Я создал кнопку на ленте для запуска макроса.

Макрос хранится в отдельном файле, поскольку файлы с URL-адресами каждый раз генерируются уникальным образом.

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

Затем он запустит макрос во вновь открытом файле макроса, а не в URL-файле, где я запустил макрос.

Фактически, одна или две первые строки в файле URL будут обрабатываться макросом, прежде чем он переключит фокус, как я полагаю.

Можно ли это исправить, чтобы я мог правильно запустить макрос с кнопки, даже если файл макроса не был загружен первым?Или, во втором варианте, файл макроса открывается, если его еще не было, но затем останавливается, не выполняя ни одной из строк?

Спасибо, Томас

1 Ответ

0 голосов
/ 21 января 2019

@ Luuklag

Я нашел способ с помощью Workbook Activate.Код показан ниже, включая «исправление».Но это не похоже на хороший или надежный способ сделать это.

Sub cmdParsePartsList()
Dim iRow As Long
Dim Count As Long
Dim pctCmpl As Integer
Dim TotalCnt As Long

Dim Wb As Workbook
Set Wb = ActiveWorkbook
Wb.Activate    'To move focus back to the TIKA list if pressing the button to start the macro
               'automatically opened the macro file and switched focus to the macro file.
               ' This method does not feel robust. But it is what I came up with.

iRow = 2  'Start at second row, as first row is Heading.
Count = 0 'Counting number of parts written back
pctCmpl = 1

TotalCnt = Application.WorksheetFunction.Subtotal(3, Range("C:C"))

ProgressForm.LabelProgress.Width = 0
ProgressForm.Show

Do Until IsEmpty(Cells(iRow, 3))
    If Not Cells(iRow, 3).Rows.Hidden Then
        Application.StatusBar = iRow
        Call cmdSaveToTika(HLink(Cells(iRow, 3)), Cells(iRow, 5).Text)
        Count = Count + 1

        pctCmpl = ((100 * Count) / TotalCnt)
        With ProgressForm
            .LabelCaption.Caption = "Processing Row " & iRow & " - " & pctCmpl & "%"
            .LabelProgress.Width = (Count / TotalCnt) * (.FrameProgress.Width)
        End With

        DoEvents

    End If
    iRow = iRow + 1
    Wb.Activate         'To move focus back to the TIKA list if pressing the button to start the macro,
                        'automatically opened the macro file and switched focus to the macro file.
                        ' This method does not feel robust. But it is what I came up with.
Loop

Application.StatusBar = "Done with " & Count & " comments saved back to TIKA! :)"
Unload ProgressForm

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...