如果我打开一个Excel工作簿,然后手动删除“ Sheet2”和“ Sheet3”,则当我下次单击“插入工作表”按钮时,它将把新工作表命名为“ Sheet4”。
但是,删除“ Sheet2”和“ Sheet3”后,如果我保存并重新打开工作簿,则当我下次单击“插入工作表”按钮时,它将命名为新工作表“ Sheet2”。
因此,Excel在某个位置存储了“最高工作表编号”变量,并且在工作表关闭时将重置此变量。我想用VBA重置它。
非常感谢和最良好的祝愿。
好了,您可以尝试修改它,我正在检查内存,它看起来好像有两个整数可以保持工作表计数。但是,如果您删除一些工作表,则计数也会减少,因此您可能需要扩大搜索范围以找到所需的工作表
找到正确的内存地址后,请尝试将其清零(它可能是4个字节,但我会尝试仅将重要的字节清零)。
这是我用来查看内存的函数(它获取worksheets.count的内存地址之后的前100个字节,然后添加工作表,然后再次获取100个字节)
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub test2()
'void ZeroMemory(
' [in] PVOID Destination,
' [in] SIZE_T Length
');
'void CopyMemory(
' _In_ PVOID Destination,
' _In_ const VOID *Source,
' _In_ SIZE_T Length
');
Dim b(0 To 99) As Byte
Call CopyMemory(b(0), VarPtr(ActiveWorkbook.Worksheets.Count), 100)
Dim output
Dim i
For Each i In b
output = output & " " & Hex(i)
Next i
ActiveWorkbook.Worksheets.Add
output = output & vbNewLine
output = output & vbNewLine
DoEvents
Call CopyMemory(b(0), VarPtr(ActiveWorkbook.Worksheets.Count), 100)
For Each i In b
output = output & " " & Hex(i)
Next i
MsgBox output
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句