VBA Excel-使用按钮调用宏
我编写了以下宏,如果我确认要运行它,它将调用私有子工作表_Calculate()。请查看以下代码的第一部分:VBA Excel-使用按钮调用宏,vba,button,Vba,Button,我编写了以下宏,如果我确认要运行它,它将调用私有子工作表_Calculate()。请查看以下代码的第一部分: Sub test() Dim result As VbMsgBoxResult result = MsgBox("Run Macro?", vbYesNo, "Excel VBA") If result = vbYes Then Call Worksheet_Calculate End If End Sub Private Sub Worksheet_Calculate(
Sub test()
Dim result As VbMsgBoxResult
result = MsgBox("Run Macro?", vbYesNo, "Excel VBA")
If result = vbYes Then
Call Worksheet_Calculate
End If
End Sub
Private Sub Worksheet_Calculate()
Dim lastrow As Long
lastrow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets(1).Cells(lastrow, 2)
.Offset(1, 0) = Cells(2, 1).Value
.Offset(1, 1) = FormatDateTime(Now, vbLongTime)
End With
End Sub
第二个代码是私有子工作表_Calculate(),它应复制B2中执行的计算结果,并将其粘贴到C2中,并向D2添加时间戳。列C和D作为B2更改中的值填充,因此我得到了C3和D3、C4和D4等中的结果和时间戳列表。下面是代码:
Sub test()
Dim result As VbMsgBoxResult
result = MsgBox("Run Macro?", vbYesNo, "Excel VBA")
If result = vbYes Then
Call Worksheet_Calculate
End If
End Sub
Private Sub Worksheet_Calculate()
Dim lastrow As Long
lastrow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
With Worksheets(1).Cells(lastrow, 2)
.Offset(1, 0) = Cells(2, 1).Value
.Offset(1, 1) = FormatDateTime(Now, vbLongTime)
End With
End Sub
我面临的问题与以下事实有关:我的公共子工作表_Calculate()只被调用一次,并且每当我重新计算B2的值时,都不会发生任何事情
有没有办法a)保持第二个代码激活或b)有一个按钮或一个勾选框来激活/停用第二个代码
希望它有意义,提前谢谢 工作表计算事件
这是您放入模块1的内容,或者您将称之为模块的内容。这是使用Add module创建的普通模块。我保留了测试程序的名称,但我更改了另一个,因为它用于工作表事件,特别是工作表计算事件。test程序和变量blnCalculation
启用或禁用整个过程,因此在启用之前,一开始不会发生任何事情。您可以为它创建一个按钮,并在其单击事件中只需添加模块1。测试
,或从宏运行它
Option Explicit
Public TargetValue As Variant
Public blnCalculation As Boolean
Sub test()
Dim result As VbMsgBoxResult
result = MsgBox("Run Macro?", vbYesNo, "Excel VBA")
If result = vbYes Then
blnCalculation = True
ActiveSheet.Calculate
Else
blnCalculation = False
End If
End Sub
Sub SheetCalculate()
Dim lastrow As Long
With ActiveSheet
lastrow = .Cells(Rows.Count, 2).End(xlUp).Row
With .Cells(lastrow, 2)
.Offset(1, 0) = .Parent.Cells(2, 1).Value
.Offset(1, 1) = FormatDateTime(Now, vbLongTime)
End With
End With
End Sub
下面是您在每个工作表代码(也称为对象模块)中输入的内容,通过在VBE中双击它可以获得这些内容。每次Excel“决定”计算工作表时,都会发生工作表计算事件,在您的情况下,这可能是有保证的,因为您说在B2
中有一个公式,所以每次计算B2
时都会发生。但是它不会运行SheetCalculate
程序,除非值已更改,该值已通过TargetValue
变量进行检查。
工作表激活事件发生在工作表上,例如每次您在选项卡中选择它时。在这种情况下,它用于将新的B2
值从新选择的工作表传递到TargetValue
变量
Option Explicit
Private Sub Worksheet_Activate()
If Module1.blnCalculation Then _
Module1.TargetValue = Me.Range("B2").Value
End Sub
Private Sub Worksheet_Calculate()
If Module1.blnCalculation Then
If Me.Range("B2").Value <> Module1.TargetValue Then
Module1.SheetCalculate
End If
End If
End Sub
选项显式
专用子工作表_Activate()
如果模块1.BLN计算,则_
Module1.TargetValue=Me.Range(“B2”).值
端接头
专用子工作表_Calculate()
如果模块1.BLN计算,则
如果Me.Range(“B2”).值Module1.TargetValue,则
模块1.1计算
如果结束
如果结束
端接头
在工作表代码模块或常规代码模块中,您在哪里有工作表\u Calculate
代码?@BigBen,我在常规代码模块中有这两个代码,因为我希望我的代码在我打开的任何工作簿中都可用。我的目的是在缎带上有一个按钮。谢谢@BigBen,我以前从未使用过它,但我会做一些研究,试图理解它背后的想法,谢谢!通过“激活第二个代码”,您希望在工作簿计算时执行第二个代码,对吗?非常感谢!很抱歉,我最近几天没有上网,我会查看您的解决方案并尝试了解它,一定会让您知道,再次感谢!