Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Excel 如何在宏已经运行或特定单元格中有值时停止宏_Excel_Excel 2007_Excel 2003_Vba - Fatal编程技术网

Excel 如何在宏已经运行或特定单元格中有值时停止宏

Excel 如何在宏已经运行或特定单元格中有值时停止宏,excel,excel-2007,excel-2003,vba,Excel,Excel 2007,Excel 2003,Vba,我正在使用Excel模板(.xlt)上的Auto_Open来运行一个宏,该宏将一些数据导入到速度表,添加一些forula,然后创建一些透视表和图表。其结果是一份最终报告,该报告可保存为.xls 我在Auto_Open sub的顶部添加了以下IF语句,以检查单元格A2是否包含“服务活动报告”(这是来自A2:N2的合并单元格),以及是否包含,以退出宏。这样,宏在生成报告后不会再次运行 If ActiveSheet.Range("A2").Text = "Service Activity Report

我正在使用Excel模板(.xlt)上的Auto_Open来运行一个宏,该宏将一些数据导入到速度表,添加一些forula,然后创建一些透视表和图表。其结果是一份最终报告,该报告可保存为.xls

我在Auto_Open sub的顶部添加了以下IF语句,以检查单元格A2是否包含“服务活动报告”(这是来自A2:N2的合并单元格),以及是否包含,以退出宏。这样,宏在生成报告后不会再次运行

If ActiveSheet.Range("A2").Text = "Service Activity Report" Then
Exit Sub
Else
两个问题:

这是第二次停止宏运行并覆盖最终报告的最佳方法吗

由于图表的性质,宏只能在Excel2007中工作,但在Excel2003中跳过了上面的代码

有什么想法吗

  • 我不太确定你在检查什么。
    ActiveSheet
    是指Excel模板还是最终报告?如果这个单元格是为最终报告创建的,并且只是检查它是否存在,从而表明最终报告已经完成,那么我不一定要更改它。这可能不是完成该任务的“最佳”方式,但在使用VBA和Office时,通常很难找到“最佳”方式来完成棘手的事情
  • 我以前从未在Excel2007中使用过
    Auto_Open
    ,所以我不能说它在Excel2003中是否可用。但是,我以前使用过
    Workbook\u Open()
    在工作簿启动时运行代码。如果在Visual Basic资源管理器窗口中导航到
    此工作簿
    ,则应该能够看到该方法。在右侧窗口中,将(常规)更改为工作簿,现在应该可以看到
    Workbook\u Open()
    方法

  • 这里没有专家,但是

  • 如果你没有在“自动打开”子节点后调用另一个子节点,那么我将使用“结束”而不是“退出子节点”。这将确保在“ActiveSheet.Range(“A2”).Text=“Service Activity Report”=True时不会执行进一步的代码

  • 调查显示,Excel 2003中的“自动打开”被“工作簿打开”取代,所以它可能不再受支持


  • 欢呼!

    你也可以考虑比“Active SeeGET”更具体一些,以防工作簿被另一个活动表保存。你可以给A2一个名字,比如说“RePress标题”——这意味着什么表是活动的:< /P>
    If Range("ReportTitle").Text = "Service Activity Report" Then 
        Exit Sub
    Else
       ' Code to do whatever you are doing...
    End if
    
    如果你的测试是真的,你实际上什么都不想做,如果是假的,你可能想考虑:

    If Not (Range("ReportTitle").Text = "Service Activity Report") Then 
       ' Code to do whatever you are doing...
    End if
    

    如果不需要每次打开文件时都执行代码,为什么要使用Auto\u Open宏?谢谢,Auto\u Open函数在2003年确实可以工作,尽管它似乎忽略了检查单元格是否已填充。我将尝试工作簿\u Open()。太好了,我也将尝试一下。