Top > OOobbs3 > 56
** [[OOobbs3/56]] [#na123a1c]
-''サマリ'': マクロで自動的に作成したドキュメントにマクロを持たせる
-''環境'': Calc
-''状態'': 解決
-''投稿者'': [[saka]]
-''投稿日'': 2011-07-04 (月) 13:54:34
*** 質問 [#na93b7ab]
初めまして。よろしくお願いします。
マクロによって新たに作成されたドキュメントに、自動的にマクロを持たせることは可能でしょうか。
例としてa.odsのマクロでb.odsという新たなドキュメントを作成し
そのb.odsが既にマクロを持っている状態にできるのでしょうか?
ということです。
以上、宜しくお願い致します。
*** 回答 [#v4de96fe]
- 次のようにすれば可能です。


 Sub Cdre
  aArg = CreateUnoStruct("com.sun.star.beans.PropertyValue")
  aArg.Name = "MacroExecutionMode"
  aArg.Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE
  oDoc = StarDesktop().loadComponentFromURL("private:factory/scalc", "_blank", 0, Array(aArg))
  SaveToModule(oDoc, "NewLib", "Module1", "Sub hello" & chr(10) & " msgbox ""hello""" & chr(10) & "End Sub")
 End Sub


 Sub SaveToModule(oDoc As Object, sLocLibName As String, sLocModule As String, sLocSaveLine As String)
  Dim oBasicLib As Object, oLib As Object
 
  oBasicLib = oDoc.BasicLibraries
  If NOT oBasicLib.hasByName( sLocLibName ) Then
    oBasicLib.createLibrary(sLocLibName)
  End If
  
    If NOT oBasicLib.isLibraryPasswordProtected( sLocLibName ) Then
      If NOT oBasicLib.isLibraryReadOnly( sLocLibName ) Then
        oLib = oBasicLib.getByName( sLocLibName )
        If oLib.hasByName( sLocModule ) Then
          oLib.removeByName( sLocModule )
          oLib.insertByName( sLocModule, sLocSaveLine )
        Else
          oLib.insertByName( sLocModule, sLocSaveLine )
        End If
      Else
        MsgBox "This library is readonly!", 0, "Save Error"
      End If
    Else
      MsgBox "This library is password prtected!", 0, "Save Error"
    End If
 End Sub

-- はにゃ? &new{2011-07-04 (月) 18:16:00};
- ありがとうございました。上記サンプルを加工してうまくいきました。 -- saka &new{2011-07-05 (火) 11:40:34};

#comment
*** 感想,コメント,メモ [#c5a31a98]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes