Top > OOobbs2 > 62
** [[OOobbs2/62]] [#w590dbe7]
-''サマリ'': moveByNameメソッドの引数について
-''環境'': Calc
-''状態'': 解決
-''投稿者'': [[岡龍]]
-''投稿日'': 2007-08-15 (水) 00:22:06
*** 質問 [#o0f3f57d]
moveByNameメソッドを使用して同一ブック内でシートの移動を行う際に、下の二つの構文で違った結果が発生します。

例:同一ブック内に「表1」〜「表8」と連番のシートがあります。
※シートの並びは「表1」→「表8」の順番

 Sub Main()
  sSheetName = "表1"
  oDoc = ThisComponent
  oSheets = oDoc.getSheets()
  oSheets.moveByName( sSheetName, 3 )
 end Sub

 Sub Main()
  sSheetName = "表8"
  oDoc = ThisComponent
  oSheets = oDoc.getSheets()
  oSheets.moveByName( sSheetName, 3 )
 end Sub

上記の構文を実行した結果は添付の画像に表示してあります。

全く同じ「引数」を使用しているのに、
なぜこの様な動作になるのかご教授願います。

&ref(同じ引数でのシート位置.jpg);

*** 回答 [#ld203a2e]
- moveByName メソッドの二番目の引数は、移動するシートの移動先のインデックスをしていします。シートを実行後にシートインデックスが付け直されるために起きているようです。

表8 (index 7) を index 3 (左から四番目のシート) に移動すると、index 3 に挿入された後で表8 がなくなり、残りのシートにインデックスが再度付与されます。

表1 (index 0) を同じように移動すると、index 0 の表がなくなってしまうので、それを埋めるためにすべての表に再度インデックスが付け直されます (表1が index 0に)。移動先よりも前の表がなくなるのでインデックスが一つ前にずれてしまいます。

-- [[はにゃ?]] &new{2007-08-15 (水) 03:01:15};
- 挿入先とインデックスを無理やり合わせるのであれば、RangeAddress からシートのインデックスを取得して調整するといった感じでしょうか。

 Sub Main()
  sSheetName = "表1"
  oDoc = ThisComponent
  oSheets = oDoc.getSheets()
  aRangeAddress = oSheets.getByName( sSheetName ).RangeAddress
  nNewIndex = 3
  If aRangeAddress.Sheet < nNewIndex Then nNewIndex = nNewIndex + 1
  oSheets.moveByName( sSheetName, nNewIndex )
 end Sub

-- [[はにゃ?]] &new{2007-08-15 (水) 22:28:02};

#comment
*** 感想,コメント,メモ [#m76435b9]
- なるほど、そういう理屈だったんですね。 それと「If」を使用しての構文はこうするしかなさそうですね。ありがとうございました!! -- [[岡龍]] &new{2007-08-16 (木) 23:53:09};

#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