[解決] "Sheet1.A1:B5" からセルオブジェクト

スプレッドシート (Calc) について
返信する
K.Tsunoda
記事: 71
登録日時: 11月 2, 2008, 6:44 pm
連絡する:

[解決] "Sheet1.A1:B5" からセルオブジェクト

投稿記事 by K.Tsunoda »

こんにちは。

"Sheet1.A1:B5" といったセル範囲の文字列からセルオブジェクトを一発で設定する簡単な方法はありますか?

Excel/VBA の場合は Evaluate メソッドで一発変換できます。

コード: 全て選択

Dim MyRng As Range
Set MyRng = Nothing
On Error Resume Next
Set MyRng = Application.Evaluate("Sheet1!A1:B5")
On Error GoTo 0
If (MyRng Is Nothing) Then
  MsgBox "Range Error"
End if
とりあえず、今は、シートとセルを分離して、こんな風にしてみましたが、
VBA のように一発でできる方法は無いでしょうか?

コード: 全て選択

Public Function RefEditRange2Object(ByVal argRangeString As String) As Object
' RangeString's pattern is "Sheet1.A1:B5"(The $ mark is already removed.)
' When Cell-Range-String is not right, [Nothing] returns.

Dim oSheets As Object
Dim oSheet As Object
Dim oRange As Object
Dim vntRangeString As Variant

  vntRangeString = Split(argRangeString, ".")   
  if (UBound(vntRangeString) <> 1) Then
    RefEditRange2Object = Nothing
  Else
    If (vntRangeString(0) = "") or (vntRangeString(1) = "") Then
      RefEditRange2Object = Nothing
    Else
      oSheets = ThisComponent.getSheets()
      If oSheets.hasByName(vntRangeString(0)) Then
        oSheet = oSheets.getByName(vntRangeString(0))
        On Error Resume Next
        oRange = Nothing
        oRange = oSheet.getCellRangeByName(vntRangeString(1))
        On Error Goto 0
        If (oRange is Nothing) Then
          RefEditRange2Object = Nothing
        Else
          RefEditRange2Object = oRange  'OK
        End If
      Else
        RefEditRange2Object = Nothing  
      End If
    End If
  End If
End Function
最後に編集したユーザー K.Tsunoda [ 6月 19, 2009, 11:47 am ], 累計 1 回
tani
記事: 60
登録日時: 6月 13, 2008, 10:12 am

Re: "Sheet1.A1:B5" からセルオブジェクト

投稿記事 by tani »

とりあえず、今は、シートとセルを分離して、こんな風にしてみましたが、
VBA のように一発でできる方法は無いでしょうか?
とりあえずここでやられておられる例が一番良いやり方のように思えます。
一応以下のようなコードだと「Sheet1.A1:B5」という文字列をそのまま使用したいという要件は満たしているように思いますが、シンプルには程遠いですね。

コード: 全て選択

sub Main
  dim oFrame as object, oRange as object
  dim dispatcher as object

  oFrame = ThisComponent.getCurrentController().getFrame()
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "ToPoint"
  args1(0).Value = "Sheet1.A1:B5"

  dispatcher.executeDispatch(oFrame, ".uno:GoToCell", "", 0, args1())

  oRange = ThisComponent.getCurrentController().getSelection()
  Msgbox oRange.AbsoluteName
end sub
K.Tsunoda
記事: 71
登録日時: 11月 2, 2008, 6:44 pm
連絡する:

Re: "Sheet1.A1:B5" からセルオブジェクト

投稿記事 by K.Tsunoda »

こんにちは。
>「Sheet1.A1:B5」という文字列をそのまま使用したいという要件は満たしているように思いますが、シンプルには程遠いですね。
そうですね。
これを使い易いようにユーザー関数にと思うと、逆に、敢えて、この方法に拘る必要性が無くなってしまいますしね。
Split のユーザー関数で対応することにします。

> AbsoluteName
これは知らなかったです(謝々)
Prind1980
記事: 1
登録日時: 12月 23, 2024, 7:50 pm

Re: [解決] "Sheet1.A1:B5" からセルオブジェクト

投稿記事 by Prind1980 »

space waves is a fascinating journey of space exploration.
OpenOffice 3.1
返信する

“Calc”に戻る