[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/04/16(Sun) 15:08
投稿者名:ダンボ
URL :
タイトル:
セルの座標がずれる?
Excel2000のVBAです。
セルとセルの間を線で結ぶ処理を作っていますが、対象としているワークシートで
下記テストコードを実行すると、だんだん線がずれてきます。Cells(1,1)の場合は全く
そのセルの左上点から右下点まで線が引かれますが、Cells(30,1)あたりではちょうど
ひとつ上のセルに対して斜め線が引かれます(セルの高さは13.5pt)右のほうの列に
ついても、右に行けば行くほど斜め線は左にずれて表示されます。

全く新規のワークシートを作って下記コードを実行した場合は、仕様どおりにクリックした
セルの左上点から右下点まで線が引かれますので、問題はロジックではなくワークシートに
あると思われますが。。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim X1 As Double, X2 As Double, Y1 As Double, Y2 As Double
With Target
    .Copy
    Debug.Print .Left, .Top, .Width, .Height
    Y1 = .Top
    X1 = .Left
    Y2 = .Top + .Height
    X2 = .Left + .Width
End With
ActiveSheet.Lines.Add X1, Y1, X2, Y2
End Sub

投稿時間:2006/04/19(Wed) 14:23
投稿者名:ダンボ
URL :
タイトル:
Re: セルの座標がずれる?
Shapes.AddLineメソッドに変えたら同じシートでもずれなくなりました。
わけわからん。図形オブジェクトについて、もっと勉強します。
(きっとLinesオブジェクトとShapesオブジェクトは違うんだろうな?)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim X1 As Double, X2 As Double, Y1 As Double, Y2 As Double
With Target
     .Copy
     Debug.Print .Left, .Top, .Width, .Height
     Y1 = .Top
     X1 = .Left
     Y2 = .Top + .Height
     X2 = .Left + .Width
End With
ActiveSheet.Shapes.AddLine X1, Y1, X2, Y2  'ずれない
> ActiveSheet.Lines.Add X1, Y1, X2, Y2    'これだとずれる
End Sub

投稿時間:2006/04/19(Wed) 16:27
投稿者名:
Eメール:
URL :
タイトル:
Re^2: セルの座標がずれる?
>右に行けば行くほど斜め線は左にずれて表示されます。
調べてはいませんが、
罫線の太さが影響されているのかなっと思いました。

右に行くほど罫線の数が増えるので
罫線の太さが蓄積されている。のかな?

投稿時間:2006/04/19(Wed) 17:56
投稿者名:ダンボ
URL :
タイトル:
Re^3: セルの座標がずれる?
星さん、どうも有り難うございます。

> 罫線の太さが蓄積されている。のかな?

う〜ん、着眼点は良いと思いますが、各セルについてその座標を貰い直しているので
誤差の蓄積って考えづらいです。ShapesオブジェクトとLineオブジェクトで結果が違うのも
その説では説明できないし。

関係無いけど推測:
Lineオブジェクト=VBAになる前のExcel4/5時代の遺跡
Shapesオブジェクト=VBA時代の、現在の仕様(だからこっちの方がうまく行く)