Top > OOobbs > 29

OOobbs/29 Edit

  • サマリ: BASICからセル位置を指定したい
  • 環境: Calc
  • 状態: 解決
  • 投稿者: 加ト?
  • 投稿日: 2004-08-10 (火) 17:02:47

質問 Edit

VBAアプリからの移植に苦労しています。 特定のセル位置に移動させたいのですが、VBAで ActiveSheet.Range(ActiveSheet.["入力StartCell"]).Select をOOoBASICでは、どう表記したら良いのでしょうか。

回答 Edit

  • 特定のセルにカーソルを移動させたいということでしょうか。

私には,ActiveSheet.["入力StartCell"] の部分が分からないのですが,たぶん「どこかのセルを文字列で指定して選択させたい」として説明します。

OOoBasic/Calc/selection のページが参考になると思います。

セル A1 を選択させるときには次のようにできます。(アクティブシートのセル A1 です)

Sub selection
Dim oDoc As Object, oController As Object
Dim oActiveSheet As Object, oCell As Object

  oDoc = ThisComponent
  oController = oDoc.getCurrentController()
  oActiveSheet = oController.getActiveSheet()
  oCell = oActiveSheet.getCellRangeByName("A1")
  
  oController.select(oCell)
End Sub

長々としたコードになっていますが,実際に必要な部分は最後の select メソッドです。

アクティブシートについては OOoBasic/Calc/activesheet

オブジェクトを指定して選択状態にさせるので,指定したセルがアクティブセルでなくても select メソッドを呼び出すことでそのセルがあるシートがアクティブシートになります。

変数を省略したりメソッドからプロパティーに変えて書くとこんな感じです。

Sub selection
  ThisComponent.CurrentController.select(ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("A1")
End Sub

よかったら ActiveSheet.["入力StartCell"] の部分について詳しく書いてもらえれば,より詳しく回答できるかもしれません。

  • はにゃ?? 2004-08-10 (火) 22:09:29
  • はにゃ?さん、有難うございます。"入力StartCell"はお察しの通りです。 -- 加ト? 2004-08-11 (水) 16:42:22
  • 私の理解力が足りなく、1つ目の文例を単純に切り貼りしたものと、2つ目の文例の構築方法の違いに首をかしげてしまいます。もっと勉強せねば(´Д`;) -- 加ト? 2004-08-11 (水) 16:50:09
  • 更に質問なのですが、これだと指定したセル位置が反転(?)していてすぐに入力体制に入れないのです。最初の質問で、かなり説明不足ですがボタンを押すことで、入力画面がクリアされ、カーソルも所定位置に戻るようになり、次々とデータを入力させたいのです。(分かりづらいですね) -- 加ト? 2004-08-11 (水) 16:57:55
  • マウスでセル上をクリックした状態にすることは出来ないでしょうか? -- 加ト? 2004-08-11 (水) 16:59:20
  • レスの方法が分からなく、コメントにて失礼しました(^^; -- 加ト? 2004-08-11 (水) 17:00:41
  • 練習用ページも変にしてしまいましたm(_'_)mごめんなさい -- 加ト? 2004-08-11 (水) 17:01:32
  • まず,編集の方法ですが,「回答」の右側にある [edit] をクリックしてもらったら編集できます。それと,簡単ヘルプ のページをみてもらえるといいと思います。 -- はにゃ?? 2004-08-11 (水) 22:06:37

選択状態の解除方法があったので,上記のコードで選択状態にした後で選択状態を解除する方法が使えそうです。

Sub selection
Dim oDoc As Object, oController As Object
Dim oActiveSheet As Object, oCell As Object
Dim oFrame As Object

  oDoc = ThisComponent
  oController = oDoc.getCurrentController()
  oFrame = oController.getFrame()
  oActiveSheet = oController.getActiveSheet()
  oCell = oActiveSheet.getCellRangeByName("A1")
  
  oController.select(oCell)
  'Deselect		SID_SELECT_NONE	26549
  SlotCommand( 26549, oFrame )
End Sub

Sub SlotCommand( nSlotID As Integer, oLocFrame As Object )
Dim aArg() As New com.sun.star.beans.PropertyValue
Dim oURL As New com.sun.star.util.URL
Dim oTrans As Object
Dim oDisp As Object
  oTrans = createUnoService( "com.sun.star.util.URLTransformer" )
  oURL.Complete = "slot:" & CStr( nSlotID )
  oTrans.parsestrict( oURL )
  oDisp = oLocFrame.queryDispatch( oURL, "_self", 0 )
  oDisp.dispatch( oURL, aArg() )
End Sub

上記のコードと同じ select メソッドでまずセルを選択状態にした後で,次の行の SlotCommand( 26549, oFrame ) で選択状態を解除します。

この選択状態の解除にはすこし特殊な方法を使っています。SlotCommand で与えた slot コマンドを実行させています。新しく oFrame 変数を使用しています。

ここで使っている slot コマンドは http://api.openoffice.org/servlets/ProjectDocumentList にある slot.sxc ファイルに記載されています。

選択状態でもセルに入力はできると思うのですが,入力後に Enter を押してもセルのカーソルが移動しないことが問題でしょうか。

  • はにゃ?? 2004-08-15 (日) 13:47:45
  • はにゃ?さんの云う通り「入力後にEnterを押しても移動できない」がネックになってます。フォームアイコンのボタンを押すと、セル上でマウスクリックを行わない限りは、カーソル移動が出来ないようです。もっと早く気づくべきでした。重ね重ね失礼しました。OOoとMS-officeとの違いの壁は、大きいですね。 -- 加ト? 2004-08-16 (月) 15:08:52


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