Top > OOobbs > 29
  • The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to OOobbs/29.

** [[OOobbs/29]] [#s9c1a1ac]
-''サマリ'': BASICからセル位置を指定したい
-''環境'': Calc
-''状態'': 解決
-''投稿者'': [[加ト]]
-''投稿日'': 2004-08-10 (火) 17:02:47

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

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

私には,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"] の部分について詳しく書いてもらえれば,より詳しく回答できるかもしれません。

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

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


#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