如何在Excel VBA中自动更改工作表名称

在我的macros中,我将select一个单元格并插入公式。 我会插入一个表内。 所以可以自动拖拽 但问题是我的表名“十二月”将每月更改。 下个月将会是“一月”,依此类推。 如何改变公式

=INDEX(Product!$L:$L; MATCH(December!$A3; Product!$I:$I; 0);COLUMNS($A:A)) 

工作表名称将被手动更改。 帮我

 Sub Macro1() Range("Q3").Value = "=INDEX(Product!C12, MATCH(December!RC1, Product!C9, 0),COLUMNS(C1:C[-16]))" End Sub 

由于所有你需要的是作为date的String的月份,只需使用Format(Date, "mmmm")

在你的VBA代码中实现:

 Range("Q3").Value = "=INDEX(Product!C12, MATCH(" & Format(Date, "mmmm") & "!RC1, Product!C9, 0),COLUMNS(C1:C[-16]))" 

把它放在工作表模块中:

 Private Sub Worksheet_Activate() Me.Name = Format(Date, "MMMM") End Sub 

因此,根据当前月份的不同,每次点击工作表的名称都会被更改。 对于名称的简短版本,请使用Format(Date, "MMM")


如果您想从Excel公式中获取ActiveSheet的名称:

 =MID(CELL("filename",A1),FIND("]",CELL("filename",A1)) 

什么Excel公式返回表名称?

在你的vba中使用MonthName(Month(Date))

 Range("Q3").Value = "=INDEX(Product!C12, MATCH(" & MonthName(Month(Date)) & "!RC1, Product!C9, 0),COLUMNS(C1:C[-16]))" 

目前这将产生:

 =INDEX(Product!C12, MATCH(December!RC1, Product!C9, 0),COLUMNS(C1:C[-16])) 

或者你可以在你的Excel公式中使用INDIRECT

 =INDEX(Product!C12, MATCH(INDIRECT(TEXT(NOW(), "mmmm")& "!RC1",False), Product!C9, 0),COLUMNS(C1:C[-16])) 

这样它就会自动更新而不必运行任何vba。 但是, INDIRECT是一个易失性函数,因此可能会导致工作簿变慢。

您可以使用当前/活动工作表的名称

 wsname = ActiveSheet.Name 

或者,如果你需要的表格总是说第三张表格

 wsname = Sheets(3).Name 

但是你不能用这个variablesreplace“12月”,你需要build立你的公式作为文本string。 你的testing必须在引号中,而variables不是。

 Sub Macro1() wsname = ActiveSheet.Name Range("Q3").Value = "=INDEX(Product!C12, MATCH(" & wsname & "!RC1, Product!C9, 0),COLUMNS(C1:C[-16]))" End Sub