Я записал макрос и сохранил его в своей личной книге, следуя инструкциям Microsoft . Затем я добавил этот макрос на панель быстрого доступа. Однако, когда я нажимаю на нее, ничего не происходит. Странная часть в том, что если я назначу точно такой же код нажатию кнопки, все будет хорошо.
Код, вероятно, не имеет значения сейчас, но я просто включил его на случай, если он может стать актуальным.
Вот код:
Option Explicit
Public Sub test(metric, greenNum, orangeNum, ws)
Dim metricName As Range
Dim rowsCounter As Long ' Rows loop counter
Dim numOfRows As Long ' Number of rows
Dim numOfColumns As Long ' Number of columns
Dim baseline As Double ' Baseline to compute against
Dim newCellValue As Double ' Each cell after baseline to make computations on
Dim columnsCounter As Long ' Columns loop counter
Dim greenCell As Double
Dim orangeCell As Double
Dim regEx As New RegExp
Dim strPattern As String: strPattern = "[^0-9.]"
Dim strReplace As String: strReplace = ""
With regEx
.Global = True
.Pattern = strPattern
End With
numOfRows = Range("A" & Rows.Count).End(xlUp).Row
numOfColumns = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
For rowsCounter = 1 To numOfRows
Set metricName = Range("A" & rowsCounter)
If metricName.Value = metric Then
For columnsCounter = 3 To numOfColumns
If IsNumeric(ws.Cells(rowsCounter, 2)) Then
baseline = Math.Abs(ws.Cells(rowsCounter, 2))
Else
If ws.Cells(rowsCounter, 2) <> "NA" And Not IsEmpty(ws.Cells(rowsCounter, 2)) Then
baseline = Math.Abs(regEx.Replace(ws.Cells(rowsCounter, 2), strReplace))
End If
End If
If IsNumeric(ws.Cells(rowsCounter, columnsCounter)) Then ' Check if cell value is number
newCellValue = Math.Abs(ws.Cells(rowsCounter, columnsCounter))
Else
If ws.Cells(rowsCounter, columnsCounter) <> "NA" And Not IsEmpty(ws.Cells(rowsCounter, columnsCounter)) Then
newCellValue = Math.Abs(regEx.Replace(ws.Cells(rowsCounter, columnsCounter), strReplace))
End If
End If
greenCell = baseline * greenNum
orangeCell = baseline * orangeNum
If newCellValue >= 0 And newCellValue < greenCell And Not IsEmpty(ws.Cells(rowsCounter, columnsCounter)) Then
ws.Cells(rowsCounter, columnsCounter).Interior.Color = RGB(0, 255, 0)
ElseIf newCellValue >= greenCell And newCellValue <= orangeCell Then
ws.Cells(rowsCounter, columnsCounter).Interior.Color = RGB(255, 165, 0)
ElseIf IsEmpty(ws.Cells(rowsCounter, columnsCounter)) Then
ws.Cells(rowsCounter, columnsCounter).Interior.Color = RGB(255, 255, 255)
Else
ws.Cells(rowsCounter, columnsCounter).Interior.Color = RGB(255, 0, 0)
End If
Next columnsCounter
End If
Next rowsCounter
End Sub
Затем я вызываю этот код в другом подпункте:
Public Sub runAll()
Application.EnableEvents = False
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
Const a = "test"
Const b = 1.05
Const c = 1.2
Call test(a, b, c, ws)
Next ws
Application.EnableEvents = True
End Sub
Когда я пытаюсь запустить этот макрос, ничего не происходит - ни ошибок, ни вывода.
Однако, когда я копирую этот код в модуль данной Рабочей книги и нажимаю кнопку test()
, все работает отлично.
Как запустить макрос, сохраненный в личной книге, без кнопки?