Макрос запускается только вручную

Мои знания VBA довольно базовые, поэтому этот вопрос может показаться глупым.

Я написал код, так что ячейка A1 на листе 1 будет читать «XX», если в ячейке B1 на листе 2 есть значение. Код работает, но только если я выберу его и запущу вручную из VBA. если в ячейке B1 на листе 2 есть значение, ячейка A1 на листе 1 не обновляется автоматически. Вот код

Sub IsNumeric()
If Sheets ("Sheet2").Range("B2) > 0 Then
Sheets("Sheet1").Range("A1").Value = "XX"
End If
End Sub

Ячейка B2 на листе2 — это формула, которая будет генерировать число только в том случае, если выбрана другая ячейка. я не уверен, что это актуально, но, как я уже говорил, код работает нормально, просто не автоматически.

Спасибо!

Почему бы просто не использовать формулу IF на Листе 1 A1? Вы также можете посмотреть на использование событий изменения Sheet2

Nathan_Sav 27.02.2019 10:53

Кроме того, IsNumeric существует как функция в VBA, поэтому лучше использовать другое имя.

Nathan_Sav 27.02.2019 10:59
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
2
241
2

Ответы 2

Если вы хотите, чтобы макрос работал автоматически на основе события в рабочей книге, вы можете добавить макрос события рабочей книги в ThisWorkbook. В этом случае вы можете использовать, например, событие Workbook_SheetChange, которое запускается каждый раз, когда вы вносите изменения в лист: https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.sheetchange

Private Sub Workbook_SheetChange(ByVal Sh As Object,ByVal Source As Range) 
 Application.EnableEvents = False 'Switch off events because otherwise it gets triggered again for the changes made in this macro
 'First make sure that it only triggers when you change B2 of sheet 2
 If Source.Address = "$B$2" and Source.Parent.Name = "Sheet2" then
     If Source.Value > 0 Then
         ThisWorkbook.sheets("Sheet1").Range("A1").Value = "XX"
     End If
 end if
 Application.EnableEvents = True 'Turn the events back on again.
End Sub

Вам нужно немного изменить свой код. Определите правильную пользовательскую функцию и вызовите ее из Sheet1 A1 со ссылкой, переданной, например, в Sheet2 A1.

Функция

Function IsNumeric2(rngCheck As Excel.Range)

If rngCheck.Value > 0 Then
    IsNumeric2 = "XX"
Else
    IsNumeric2 = ""
End If

End Function

Звонок, в ячейке А1, =IsNumeric2(Sheet2!A1)

Другие вопросы по теме