我有一张带有marco的表格(来自excel vba):
Rem Attribute VBA_ModuleType=VBADocumentModule
Option VBASupport 1
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
...
End Sub
它可以正常工作。
但是,在将工作表复制到新工作表后,新工作表将丢失宏。
所以我尝试写一个Double Click的Sheet事件,并写一个marco来复制工作表和事件。
Sub CopySheetWithEvents()
oSheets = ThisComponent.Sheets
oSheet = ThisComponent.CurrentController.ActiveSheet
sName = oSheet.Name
sNewName = oSheets.Count + 1
oSheets.CopyByName(sName, sNewName, oSheets.Count + 1)
oNewSheet = oSheets(oSheets.Count - 1)
aSheetEvents = oSheet.Events
sEventNames = aSheetEvents.ElementNames
aNewSheetEvents = oNewSheet.Events
For i = 0 To ubound(aSheetEvents.ElementNames)
aEvent = aSheetEvents.getbyname(sEventNames(i))
aNewSheetEvents.ReplaceByName(sEventNames(i), aEvent)
Next i
End Sub
没关系,但是Sheet Event没有"取消"我的宏需要的参数。
如何使用vba复制工作表?
答案 0 :(得分:0)
显然,工作表事件不接受参数。我右键单击工作表1选项卡,选择Sheet Events
,并将Worksheet_BeforeDoubleClick
分配给双击事件。然后,双击产生以下错误消息:
运行Basic脚本Standard.Module2.Worksheet_BeforeDoubleClick时发生了脚本框架错误。
消息:参数数量错误!
如果我们将其分配给不带参数的宏:
Sub DoDoubleClick
MsgBox "Double clicked"
End Sub
然后双击产生预期结果。此外,您的CopySheetWithEvents()
会创建一个新工作表,并将该事件正确地分配给新工作表。
所以,我认为你需要重写Worksheet_BeforeDoubleClick
以便它不需要参数。要获得范围,请阅读当前选择:
oSelect = ThisComponent.CurrentSelection.getRangeAddress