• ベストアンサー

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

エクセル vba クリック~離した位置へ直線の挿入 エクセルの図形挿入の、左クリックした位置(x1,y1)から始まり、離した位置(x2,y2)で終わる『直線』のようなマクロをご教示頂けないでしょうか? マクロの記録では何も出てきません。。。 それを応用してCADの寸法線のような絵を描くマクロを作成したく考えております。 どなたか宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.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

Def67890
質問者

お礼

御親切にマクロの例文も頂きありがとうございます。 ダブルクリックイベントと組み合わせることで、かなり希望に近いものが作成できました。 ありがとうございました。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

バージョンは2007or2010でしょうか。 Sub test()   Application.CommandBars.FindControl(ID:=1042).accDoDefaultAction End Sub こんなマクロで可能です。 直線コネクタのボタンを押すようなマクロです。 なので、左上のクイックアクセスツールバーに[直線コネクタ]を登録するのがマクロ要らずで簡単ですけど。 クイックアクセスツールバー登録手順は、 左上▼[クイックアクセスツールバーのユーザー設定][その他のコマンド]を選択します。 「Excelのオプション」ダイアログウィンドウが開きます。 よくわからなければ[Alt][f][t]で開いて[クイックアクセスツールバー]タブを選択しても良いです。 「コマンドの選択」ドロップダウンで「すべてのコマンド」を表示させ [直線コネクタ]を探して、中央の[追加]ボタンクリック。 [OK]で閉じます。

Def67890
質問者

お礼

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

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

オートシェイプの線でよいのでしょうか? マクロの自動記録で   Set myLine = ActiveSheet.Shapes.AddLine(130#, 250, 350, 430) みたいなのができると思いますが?

Def67890
質問者

お礼

早々に回答頂きありがとうございました。 addlineメソッドも参考にしながらマクロを組んでみます!

Def67890
質問者

補足

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

関連するQ&A