Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA:如何在没有按钮的情况下自动触发宏_Vba_Excel - Fatal编程技术网

VBA:如何在没有按钮的情况下自动触发宏

VBA:如何在没有按钮的情况下自动触发宏,vba,excel,Vba,Excel,我制作了一个宏,每当sheet2的行号发生变化时,它会自动填充sheet1上的公式 当我在sheet2上有任何更新时,是否可以不使用按钮自动触发它 Sub Autofill() Dim sg As Sheets Dim Row As Long Dim fillRow As Integer Application.EnableEvents = False Row = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row fillRow =

我制作了一个宏,每当sheet2的行号发生变化时,它会自动填充sheet1上的公式

当我在sheet2上有任何更新时,是否可以不使用按钮自动触发它

Sub Autofill()
Dim sg As Sheets
Dim Row As Long
Dim fillRow As Integer

Application.EnableEvents = False
Row = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
fillRow = Row - 1

Sheets("Sheet1").Select
Range("A1:E1").Select
Selection.Autofill Destination:=Range("A1:E" & fillRow), Type:=xlFillDefault

Application.EnableEvents = True

End Sub

您可以尝试创建类似以下内容的子对象:

粘贴以下代码。和变化: 1) “D4”和要“监视”的单元格 2) 将宏粘贴到“做事”行中

问题是,每次焦点更改到另一个单元格时,代码都会运行。 但如果这足够的话,也可以在双击之前使用工作表_。然后,每次单击两次,代码都将运行

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
    If Not Intersect(Target, Range("D4")) Is Nothing Then
        'Do things
    End If
End If
端接头


您可以尝试创建一个子系统,如下所示:

粘贴以下代码。和变化: 1) “D4”和要“监视”的单元格 2) 将宏粘贴到“做事”行中

问题是,每次焦点更改到另一个单元格时,代码都会运行。 但如果这足够的话,也可以在双击之前使用工作表_。然后,每次单击两次,代码都将运行

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
    If Not Intersect(Target, Range("D4")) Is Nothing Then
        'Do things
    End If
End If
端接头


使用工作表。选择更改事件

在图纸2的工作表VBA中添加:

专用子工作表\u选择更改(ByVal目标作为范围) 调用自动填充() 端接头


(如果单元格发生更改,即使用户没有离开该行,也会触发此操作,因此请检查参数目标。)

使用工作表。SelectionChange-Event

在图纸2的工作表VBA中添加:

专用子工作表\u选择更改(ByVal目标作为范围) 调用自动填充() 端接头

(如果单元格发生更改,即使用户未离开该行,也会触发此操作,因此请检查参数目标。)

在屏幕底部的“工作表”选项卡上单击鼠标右键,然后单击“查看” “代码”,然后在其中插入以下代码

如果A列不是当前的列,则下一行将退出代码 在纸上改变了。如果要触发代码,请将其删除 通过对工作表的任何单元格进行任何更改

在屏幕底部的“工作表”选项卡上单击鼠标右键,然后单击“查看” “代码”,然后在其中插入以下代码

如果A列不是当前的列,则下一行将退出代码 在纸上改变了。如果要触发代码,请将其删除 通过对工作表的任何单元格进行任何更改


请在发布问题之前进行研究:)当我在google上放置excel vba宏事件时,这是第一个链接。我尝试了这个方法,但在这种情况下不起作用,因为我通常会更改sheet2中的单元格值,我只是在其中添加越来越多的行…:(是的,这是可能的。查找excel vba应用程序和工作表事件处理。这是mdsn@Kinghin245,您的评论(我尝试过…),让我觉得你想做的比你在问题中提出的更多。你在谈论更改单元格和添加行。你的问题中应该有更多信息吗???请在发布问题之前进行研究:)当我在google上放置excel vba宏事件时,这是第一个链接。我尝试了这个方法,但在这种情况下不起作用,因为我通常会更改sheet2中的单元格值,我只是向其中添加越来越多的行…:(是的,这是可能的。查找excel vba应用程序和工作表事件处理。这是mdsn@Kinghin245,您的评论(我尝试过…),让我觉得你想做的比你在问题中提出的更多。你在谈论更改单元格和添加行。你的问题中应该包含更多信息吗???问题是我不会更改以前输入的任何值,我只会向行中添加更多,因此监视单元格对我不起作用:(幸运的是,您可以监视更大的范围。例如,您可以监视范围(“D:D”)(整个D列)或更大的区域,如范围(“A:Z”).
工作表\u SelectionChange
很酷但很危险。如果触发事件,excel很容易崩溃。我建议在执行任何操作之前调用
Application.EnableEvents=false
,并在退出之前重置事件。问题是我不会更改以前输入的任何值,我只会向行中添加更多值,因此监视单元格是可行的esnt为我工作:(幸运的是,你可以监控更大的范围。例如,你可以监控范围(“D:D”)(整个D列)或者更大的区域,比如范围(“A:Z”).
工作表\u selection change
很酷但很危险。如果触发事件,excel很容易崩溃。我建议在执行任何操作之前调用
Application.EnableEvents=false
,并在退出之前重置事件。
if InRange(Target,Worksheets("Sheet2").range("A:A") = false then exit sub
Row = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
fillRow = Row - 1

Sheets("Sheet1").Select
Range("A1:E1").Select
Selection.Autofill Destination:=Range("A1:E" & fillRow), Type:=xlFillDefault

End Sub

Function InRange(Range1 As Range, Range2 As Range) As Boolean
InRange = Not (Application.Intersect(Range1, Range2) Is Nothing)
End Function