Top > OOobbs3 > 91

OOobbs3/91 Edit

  • サマリ: マクロにパスワードを設定すると設定前と違う結果になる?
  • 環境: Calc
  • 状態: 解決
  • 投稿者: いしみず?
  • 投稿日: 2012-04-27 (金) 19:33:15

質問 Edit

いつもお世話になっております。 マクロのパスワードは、マクロの管理のライブラリで設定しました。

1.非表示にしたシート内のデータを現在表示されているシートにデータコピーするマクロで、
・パスワード設定前は、正しくコピーされる。
・パスワード設定後は、表示されている最後のシートのセル内容がコピーされてくる。
2.マクロでセルに文字(日本語)を入力するマクロで、
・パスワード設定前は、正しく入力される。
・パスワード設定後は、漢字部分が??となる。

どうしてこんなふうになるのでしょうか? 環境:Windows7 OpenOffice3.3.0 OOO330m20(Build9567) 以上、よろしくお願いいたします。

回答 Edit

  • 1 はどのようにコピーしているのでしょうか?メソッドを見ないとちょっと分かりません。2 パスワードを設定すると、内部の形式に変換されたものから実行されます。このとき、文字列は 1byte のエンコードしか利用できません。https://issues.apache.org/ooo/show_bug.cgi?id=65372 そのため、日本語はすべて ? になります。1 は 2 のマルチバイト文字が化けることと関係があるかもしれません。
  • はにゃ? 2012-04-27 (金) 21:00:41
  • 2.については了解しました。回避策はないのでしょうか? -- いしみず 2012-04-28 (土) 12:03:04
  • 1.については、パスワードに関係なくシートを非表示にするとコピーできないようです。 -- いしみず 2012-04-28 (土) 12:04:14
  • 1.は、もう少しいじってみます。ありがとうございました。一応メソッド上げておきます。 -- いしみず 2012-04-28 (土) 12:05:16
  • 2 の回避策についてですが、設定を変えたら~といった方法はありません。 文字列を外部のファイルやパスワードを設定していないライブラリから読み込む、または 1byte で表します。OOobbs2/19 参照。 -- はにゃ? 2012-04-28 (土) 12:55:43
  • ありがとうございました。とりあえず解決ということで。また、よろしくお願いします。 -- いしみず 2012-05-02 (水) 11:12:02

感想,コメント,メモ Edit


Sub copyFromPageToSheet(startRow As Long)
	' Pageシートを別シートのstartRow行へコピーする
	On Error Goto ErrorHandler
	Dim oDoc As Object
	Dim oSheet As Object
	Dim oSheetP As Object
	Dim oController As Object
	Dim oTransferable As Object
	Dim oNewController As Object
	
 	oDoc = ThisComponent
  	oSheet = getSheetObj()
 	oSheetP = getSheetObj("Page")
  
  	oController = oDoc.getCurrentController()
 	' コピーする範囲を選択
 	oController.Select(oSheetP.getCellRangeByPosition(0, 0, PG_CVAL - 1, PG_RVAL - 1))
 	oTransferable = oController.getTransferable()
	
	' コピー先を選択
   	oNewController = oDoc.getCurrentController()
   	oNewController.Select(oSheet.getCellByPosition(0, startRow - 1) )
  	oNewController.insertTransferable(oTransferable)

	On Error Goto 0 
	Exit Sub

ErrorHandler:
	' エラー処理
	Call errMsgShow(Err, Erl, Error$, "mdlBiz.copyFromPageToSheet")
	On Error Goto 0

End Sub
Function getSheetObj(Optional val As Variant) As Object
 	' シートのオブジェクトを取得 val はシート名か番号で指定する
	On Error Goto ErrorHandler
   	Dim oDoc As Object
   	Dim valx As Variant
   	
   	oDoc = ThisComponent
   	If IsMissing(val) Then
  		' パラメータがないときアクティブシート名にする
  		valx = oDoc.CurrentController.ActiveSheet.Name
  	Else
  		valx = val
  	End If 

	Select Case TypeName(valx)
     	    Case "String"
      		getSheetObj = oDoc.Sheets.getByName(valx)
    	    Case "Integer"
      		getSheetObj = oDoc.Sheets.getByIndex(valx)
    	    Case Else
      		getSheetObj = Nothing
   	End Select

	On Error Goto 0 
	Exit Function

ErrorHandler:
	' エラー処理
	Call errMsgShow(Err, Erl, Error$, "mdlALib.getSheetObj")
	On Error Goto 0
 
End Function

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