如何在Excel中动态更新工作表的名称?

时间:2009-02-22 14:29:24

标签: excel vba excel-vba

我有一个Excel电子表格,用于为我们的Unix团队指定文件系统构建信息。

根据要构建的系统,此工作表将具有不同的信息。例如,生产系统将拥有许多文件系统,而开发系统只有一个或两个。

因此,根据用户输入,我们将填充两种输入工作表格式(“dev”,“prod”)中的一种或另一种,但目标工作表将始终相同。在任何给定时间,只有一个dev或prod工作表可供用户显示和激活。

我们如何告诉Excel使用特定的输入工作表来计算另一个输出工作表?

我最初的想法是,为了简单起见,“输出”工作表将从“输入”工作表中获取数据,并且我们将动态地使“dev”或“prod”模板成为“输入”工作表。这是正确的方法,还是有更好的方法?

3 个答案:

答案 0 :(得分:1)

根据工作表的复杂程度,有几种方法:

  • 如果您只有一些工作表,并且用户只需选择“生产”或“测试”,您可以在公式中设置条件逻辑。例如:= if(A1 =“Test”,TestSheet!A1 + TestSheet!A2,ProdSheet!A1 + ProdSheet!A2)
  • 您可以使用与上述相同类型的想法,但使用vlookup表添加更多复杂性
  • 您的VBA代码可以根据用户输入动态创建整个Excel电子表格

答案 1 :(得分:1)

如果您可以像LuckyLindy建议的那样使用VBA代码,那么您几乎可以做任何事情。我过去常做的是记录各种操作的宏,例如添加或重命名工作表并获取生成的代码并使其适应所需的工作。

简单宏代码的一个例子:

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "My Sheet"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Sheet5").Select
    Sheets("Sheet5").Name = "My Sheet 2"
End Sub

您可以记录非常复杂的操作并操纵生成的代码并将其置于特定事件之后。因此,如果您希望代码在工作表加载或激活工作表时触发,您可以将其插入相关块中:即

'in Sheet1 - code behind (alt+F11 shortcut)
Private Sub Worksheet_Activate()
    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "My Sheet"
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Sheet5").Select
    Sheets("Sheet5").Name = "My Sheet 2"
End Sub

HTH

答案 2 :(得分:0)

另一种方法是使用INDIRECT公式。

假设您在单元格A1中有要查找输入的工作表的名称,则以下内容将从该工作表中查找单元格B7的值:

=INDIRECT($A$1,"!B7")