0

我有一张带有 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

它可以正常工作。

但是在我将工作表复制到新工作表后,新工作表将丢失宏。

所以我尝试编写双击的工作表事件,并编写一个宏来复制工作表和事件。

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

没关系,但是工作表事件没有我的宏需要的“取消”参数。

如何使用 vba 复制工作表?

4

1 回答 1

0

显然工作表事件不带参数。我右键单击 Sheet 1 选项卡,选择Sheet Events并分配Worksheet_BeforeDoubleClick给 Double click 事件。然后,双击产生以下错误消息:

运行基本脚本 Standard.Module2.Worksheet_BeforeDoubleClick 时出现脚本框架错误。

消息:参数数量错误!

如果我们将其分配给不带参数的宏:

Sub DoDoubleClick
    MsgBox "Double clicked"
End Sub

然后双击产生预期的结果。您CopySheetWithEvents()还将创建一个新工作表并将事件正确分配给新工作表。

所以,我认为你需要重写Worksheet_BeforeDoubleClick,以便它不需要参数。要获取范围,请阅读当前选择:

oSelect = ThisComponent.CurrentSelection.getRangeAddress
于 2016-04-12T21:56:01.237 回答