【问题标题】:Refresh funtion on worksheet工作表上的刷新功能
【发布时间】:2017-04-20 21:57:55
【问题描述】:

我有一个收集工作表 4 名称的函数

Function LastSheetName()

Application.Volatile True
LastSheetName = Worksheets(4).Name

End Function

然后我想在我的工作表的单元格中输出这个名字

=LastSheetName()

这按预期工作。

但是,工作表 4 将被删除、添加,并且每次都会使用不同的名称。

现在,当我希望添加新的工作表 4 时,工作表上的公式不会更新。它保持为 #VALUE!,显然它正在查看旧的工作表 4,然后在新的工作表 4 到位之前删除了工作表。

我需要在“添加工作表”按钮的代码末尾添加一些内容,该按钮在添加新工作表 4 后刷新此公式 =LastSheetName()

我尝试将application.Volatile 添加到我的函数的开头,就像上面一样,但没有成功。

我已经尝试添加

Worksheets(4).EnableCalculation = False
Worksheets(4).EnableCalculation = True

到我的代码结束,也没有成功。

EDITL Sheet 4 not 6 抱歉

【问题讨论】:

  • Worksheets(6) 与您所说的 sheet 4 有什么关系?不清楚你在说什么。
  • 也许this answer 和其中的参考资料很有帮助
  • 函数名称看起来像是在查找最后一张工作表的名称,而不是 sheet 4 或工作簿中的第六张工作表。考虑到这一点,不妨试试LastSheetName = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name - 这不包括图表。仅使用 Sheets 而不是 Worksheets 来包含图表。
  • 另一种方法是清除Sheet 4 上的单元格内容,然后将新数据复制到其中。您不必删除工作表,您的参考资料也不会丢失。

标签: vba excel


【解决方案1】:

要在添加新工作表时刷新计算(此操作默认不会触发计算),您可以将其添加到代码模块Thisworkbook

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Application.Calculate
End Sub

此外,您可以让您的函数始终返回最后一个工作表的名称,而不是硬编码的Worksheets(4),即

LastSheetName = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name

【讨论】:

    【解决方案2】:

    这样的东西有用吗?我完全确定您要在哪个表上放置“Worksheets(4).Name”,所以我使用了 Sheet1。我把它放在“Workbook_NewWorksheet”事件中。

    它获取工作簿中第四个工作表的名称,并在将工作表添加到工作簿时将其添加到 Sheet1 的单元格 A1。当从工作簿中删除工作表时,这不会引起注意。删除 woksheet 时,Sheet1 单元格 A1 不会更新

    Private Sub Workbook_NewSheet(ByVal Sht As Object)
    
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Worksheets("Sheet1")
    
        Dim ws4 As Worksheet
        Set ws4 = ThisWorkbook.Worksheets(4)
    
        ws.Range("A1").Value = ws4.Name
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 2020-12-02
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 2020-06-23
      相关资源
      最近更新 更多