VBA:如何在没有按钮的情况下自动触发宏
我制作了一个宏,每当sheet2的行号发生变化时,它会自动填充sheet1上的公式 当我在sheet2上有任何更新时,是否可以不使用按钮自动触发它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 =
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