宏只能手动运行

时间:2019-02-27 09:45:00

标签: excel vba

我对VBA的了解非常基础,因此这似乎是一个愚蠢的问题。

我已经编写了一个代码,以便如果sheet2中的单元格B1中有一个值,则sheet1中的单元格A1将读为“ XX”。该代码有效,但前提是我选择它并从VBA手动运行它。如果sheet2中的单元格B1中有一个值,则sheet1中的单元格A1不会自动更新。这是代码

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

sheet2中的单元格B2是仅在选择另一个单元格时才会生成数字的公式。我不确定这是否相关,但是正如我提到的那样,代码工作正常,只是不能自动运行。

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要更改代码。例如,从Sheet1 A1定义并调用了正确的UDF,并将引用传递给Sheet2 A1

功能

Function IsNumeric2(rngCheck As Excel.Range)

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

End Function

该呼叫在单元格A1 =IsNumeric2(Sheet2!A1)

答案 1 :(得分:0)

如果您希望宏基于工作簿中的事件自动工作,则可以在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