在工作表上刷新功能

时间:2017-04-20 11:49:05

标签: excel vba excel-vba

我有一个收集工作表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表4不是6抱歉

2 个答案:

答案 0 :(得分:1)

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

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

此外,您可以使您的功能始终返回最后一个工作表的名称,而不是加密的Worksheets(4),即

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

答案 1 :(得分:0)

这样的事情有用吗?我确定你试图把'Worksheets(4).Name'放在哪张表上,所以我使用了Sheet1。我把它放在'Workbook_NewWorksheet'事件中。

当工作表添加到工作簿时,它获取工作簿中第四个工作表的名称并将其添加到Sheet1的单元格A1。从工作簿中删除工作表时,这不会处理。删除woksheet时,Sheet1 Cell 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