【问题标题】:How to run macros only the first time the excel file opens如何仅在第一次打开 Excel 文件时运行宏
【发布时间】:2020-07-02 21:09:38
【问题描述】:

我已经为我的 Excel 工作表编写了一些 VBA 代码。问题是我希望它只运行一次,即当用户第一次打开它时。

如果第二次或更多次打开,我希望 Excel 能够正常打开而不运行该 VBA 代码。如何使用 VBA 或有任何 excel 功能?

【问题讨论】:

  • 每天一次还是仅一次?如果是后者,为什么还要将其设为工作簿打开事件?
  • 只有一次。你有什么建议?
  • 如果您只是想运行一次,这听起来不像是工作簿打开事件的工作,因为这里的目的是每次打开书本时它都会运行......代码完全正确
  • 用户从 Web 应用程序下载 Excel 表。下载后,将一个工作表1中的数据过滤并复制到新创建的工作表2中,工作表1被隐藏。在此之后,用户只能看到 WS2。因此,发生这种情况后,当用户下次打开文件时,他应该能够编辑和保存 WS2 文件。现在,整个宏再次运行,由于过滤过程再次发生,他无法保存任何新数据。
  • 所以只需在某处存储一个标志并在工作簿打开时检查它。

标签: excel vba


【解决方案1】:

简单,给工作表 2 一个特定的名称,并让宏检查该名称作为其第一个任务,如果找到则结束,如果未找到则运行其余代码...

【讨论】:

    【解决方案2】:

    在excel的单元格中添加一个标志,当excel每次打开时,宏代码都会检查该单元格中的值是否为“1”。如果为“1”,则第一次打开excel,否则该单元格的值会改变。

    以下是代码:

    Sub Workbook_Open()
    
    Worksheets("your_wsname").Activate
    
    'to check if it the file is being opened for the first time
    If Cells(100, 100).Value = "1" Then
    'value is blank if opening file for the first time
    'if for first time then following happens
    Else
        'call your methods here
        'set flag value 1 in one of the methods
    End If
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      将您的代码存储在 XLSM 中(其中有代码是必要的)。

      • 用户从您的网站下载该代码并打开它
      • On_Open 着火了
        • 代码执行当前执行的操作
        • 代码然后将文件保存为 XLSX,由于代码无法以 XLSX 格式存储,因此会自动删除所有代码
      • 擦手,大功告成。

      【讨论】:

        【解决方案4】:

        下面的代码将每天运行一次,创建另一个工作表来记录事件,就像我在一个名为事件记录的工作表中创建一个时间线,然后让我的宏检查该特定日期以下的值,如果值>0,那么宏将不执行。

        Private Sub Workbook_Open()
            Dim Sh As Worksheet, i As Long, Cl As Long, Cntr As Long
            Set Sh = ThisWorkbook.Worksheets("Event Recording")
        
            Cl = Sh.UsedRange.Cells.Find(What:=Date).Column
            Cntr = Sh.Cells(2, Cl)
        
            If Cntr = 0 Then
                MsgBox "Hi"
            End If
        
            Sh.Cells(2, Cl) = Cntr + 1
        End Sub
        

        【讨论】:

        • OP 想要“每天一次”吗?我知道这是“只有一次”......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多