如何在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