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

时间:2017-12-12 14:16:24

标签: excel vba excel-vba excel-formula excel-2010

在我的宏中,我将选择一个单元格并插入公式。我将在表格中插入。所以它可以自动缩小。但问题是我的工作表名称“十二月”将每月更改一次。下个月它将是“一月”,依此类推。如何更改公式。

SecureRandom sr = new SecureRandom(key.getBytes());
KeyGenerator kg = KeyGenerator.getInstance("twofish");
kg.init(sr);
SecretKey sk = kg.generateKey();

// create an instance of cipher
Cipher cipher = Cipher.getInstance("twofish");

// initialize the cipher with the key
cipher.init(Cipher.ENCRYPT_MODE, sk);

byte[] encrypted = cipher.doFinal(toEncrypt.getBytes());

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

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

4 个答案:

答案 0 :(得分:2)

将其放在工作表模块中:

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

因此,每次单击它时,工作表的名称都会更改,具体取决于当前月份。对于名称的简短版本,请使用Format(Date, "MMM")

如果要从Excel公式中获取ActiveSheet名称:

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

What Excel formula returns the sheet name?

答案 1 :(得分:2)

在您的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是一个易失性函数,因此可能会导致工作簿缓慢。

答案 2 :(得分:2)

由于您只需将月份作为日期的String,因此只需使用Format(Date, "mmmm")

在您的VBA代码中实施:

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

答案 3 :(得分:1)

您可以使用

获取当前/活动工作表的名称
wsname = ActiveSheet.Name

或者,如果你需要的纸张总是说第3张,那么

wsname = Sheets(3).Name

但你不能仅仅取代" 12月"使用此变量,您需要将公式构建为文本字符串。您的测试必须是引号,而变量不是。

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