プロが教える店舗&オフィスのセキュリティ対策術

エクセル vba クリック~離した位置へ直線の挿入

エクセルの図形挿入の、左クリックした位置(x1,y1)から始まり、離した位置(x2,y2)で終わる『直線』のようなマクロをご教示頂けないでしょうか?

マクロの記録では何も出てきません。。。

それを応用してCADの寸法線のような絵を描くマクロを作成したく考えております。
どなたか宜しくお願い致します。

gooドクター

A 回答 (3件)

そういえば..昔、書いた事があるコードです。


シートモジュールに置いて、ダブルクリックで描画開始、
どこかのセルを選択するとWidthかHeightをテキストボックスで追加、というものでした。
何かの参考になるようでしたらどうぞ。

'SheetModule
Option Explicit
Dim flg As Boolean
'-----------------------------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
                    Cancel As Boolean)
  Cancel = True
  Application.CommandBars.FindControl(ID:=1042).accDoDefaultAction
  flg = True
End Sub
'-----------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If flg Then
    Call LINETXT(Me.Lines(Me.Lines.Count))
    flg = False
  End If
End Sub
'-----------------------------------------------------------
Private Sub LINETXT(ByRef LX As Line)
  Const x As Single = 1 'scale
  Dim Lp As Single
  Dim Tp As Single
  Dim Wp As Single
  Dim Hp As Single
  Dim St As String

  With LX
    Lp = .Left
    Tp = .Top
    Wp = .Width
    Hp = .Height
  End With
  If Wp > Hp Then
    St = "W " & Wp * x
  Else
    St = "H " & Hp * x
  End If
  With Me.TextBoxes.Add(0, 0, 0, 0)
    .ShapeRange.Line.Visible = msoFalse
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .AutoSize = True
    .Font.Size = 9
    .Text = St
    .Left = Lp + (Wp - .Width) / 2
    .Top = Tp + (Hp - .Height) / 2
  End With
End Sub
'-----------------------------------------------------------
Sub sampletest() 'Textのみ追加。Lineを任意選択して実行。
  If TypeName(Selection) = "Line" Then
    Call LINETXT(Selection)
  End If
End Sub
    • good
    • 0
この回答へのお礼

御親切にマクロの例文も頂きありがとうございます。

ダブルクリックイベントと組み合わせることで、かなり希望に近いものが作成できました。

ありがとうございました。

お礼日時:2010/10/06 09:23

バージョンは2007or2010でしょうか。



Sub test()
  Application.CommandBars.FindControl(ID:=1042).accDoDefaultAction
End Sub
こんなマクロで可能です。
直線コネクタのボタンを押すようなマクロです。
なので、左上のクイックアクセスツールバーに[直線コネクタ]を登録するのがマクロ要らずで簡単ですけど。

クイックアクセスツールバー登録手順は、
左上▼[クイックアクセスツールバーのユーザー設定][その他のコマンド]を選択します。
「Excelのオプション」ダイアログウィンドウが開きます。
よくわからなければ[Alt][f][t]で開いて[クイックアクセスツールバー]タブを選択しても良いです。
「コマンドの選択」ドロップダウンで「すべてのコマンド」を表示させ
[直線コネクタ]を探して、中央の[追加]ボタンクリック。
[OK]で閉じます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

コマンドバーのコントロールが可能ということが解り大変参考になりました!
ID番号で他のコマンドも制御可能なようで、今後色々使えそうです。

ありがとうございました!!

お礼日時:2010/10/06 09:21

オートシェイプの線でよいのでしょうか?



マクロの自動記録で
  Set myLine = ActiveSheet.Shapes.AddLine(130#, 250, 350, 430)
みたいなのができると思いますが?

この回答への補足

早速の回答ありがとうございます!

当方の説明が悪くて申し訳ございません。
(beginx:=x1, beginy:=y1, endx:=x2, endy:=y2)のように座標を数値で指定するのではなく、マウスで任意の位置からクリックしながら線を引っ張り、離した位置で線が終わる、というイベント(?)にしたく考えています。

補足日時:2010/10/04 17:56
    • good
    • 0
この回答へのお礼

早々に回答頂きありがとうございました。

addlineメソッドも参考にしながらマクロを組んでみます!

お礼日時:2010/10/06 09:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング