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