如何通过宏

时间:2016-04-12 01:31:31

标签: libreoffice-calc libreoffice-basic

我有一张带有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复制工作表?

1 个答案:

答案 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