by moriwake » 2月 17th, 2012, 12:28 am
おーくぼさん
ご教示ありがとうございました。あれから他にもいくつかのサンプルプログラムがみつかり、それらを参考にプロシー
ジャを作って試していました。知識の浅い私なのでかなりの時間がかかりましたが、何とかソートキー2つでソートでき
るものができました。
しかし、いまだうまくいっていない点があります。sheetの指定をプロシージャの引数でしたいのですがうまくいかず、
sheet1がソートされます。データ型がおかしいのでしょうか? 分かる方ご教示をお願いいたします。また、他にも私の
プログラムにおかしい点があれば何でもアドバイスをお願いいたします。
サンプルプログラムの切り貼りで何とか簡単なマクロが作ってみましたが、一行一行の意味が理解できてないので、
イメージしたマクロをサクサク作れるようになれるのは気の遠くなるほどさきのように思えてきます。皆さまはOpen-
Officeのマクロの記述方法の有効な情報を何から得ているのでしょうか? いいものがあればアドバイスを待ってい
ます。
Sub test
sort_150( "B1:F10", "d", "e", 2 )' sheet3の"B1:F10"をソートキー1-d列,ソートキー2-e列でソートする
End Sub
Sub sort_150( hani As String, srtkey1 As String, srtkey2 As String, shtnm As Integer )'sortキーが2つのsortプロシージャ
' hani:ソート対象範囲 , srtkey1:ソートキー1 , srtkey2:ソートキー2 , shtnm:対象sheet番号
Dim oSheet As Object, oCellRange As Object
Dim aSortDesc(1) As New com.sun.star.beans.PropertyValue
Dim aSortFields(1) As New com.sun.star.util.SortField
DIm sd1, sd2, sdb As String
oSheet = ThisComponent.Sheets( shtmn ) 'testからSheet3を指定してるつもりがSheet1がソートされる
oCellRange = oSheet.getCellRangeByName( hani )
sd1 = LCase( srtkey1 )
sd2 = LCase( srtkey2 )
sdb = LCase( hani )
aSortFields(0).Field = Asc( sd1 ) - Asc( Left( sdb, 1 ) ) '第1ソートキー列の指定
aSortFields(0).SortAscending = True
aSortFields(1).Field = Asc( sd2 ) - Asc( Left( sdb, 1 ) ) '第2ソートキー列の指定
aSortFields(1).SortAscending = True
aSortDesc(0).Name = "SortFields"
aSortDesc(0).Value = aSortFields()
aSortDesc(1).Name = "ContainsHeader"
aSortDesc(1).Value = False
ThisComponent.getCurrentController().select( oCellRange )
oCellRange.sort( aSortDesc() )
End Sub
OpenOffice 3.3.0 on Windows XP SP2