- ベストアンサー
エクセル vba クリック~離した位置へ直線の挿入
エクセル vba クリック~離した位置へ直線の挿入 エクセルの図形挿入の、左クリックした位置(x1,y1)から始まり、離した位置(x2,y2)で終わる『直線』のようなマクロをご教示頂けないでしょうか? マクロの記録では何も出てきません。。。 それを応用してCADの寸法線のような絵を描くマクロを作成したく考えております。 どなたか宜しくお願い致します。
- みんなの回答 (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
その他の回答 (2)
- end-u
- ベストアンサー率79% (496/625)
バージョンは2007or2010でしょうか。 Sub test() Application.CommandBars.FindControl(ID:=1042).accDoDefaultAction End Sub こんなマクロで可能です。 直線コネクタのボタンを押すようなマクロです。 なので、左上のクイックアクセスツールバーに[直線コネクタ]を登録するのがマクロ要らずで簡単ですけど。 クイックアクセスツールバー登録手順は、 左上▼[クイックアクセスツールバーのユーザー設定][その他のコマンド]を選択します。 「Excelのオプション」ダイアログウィンドウが開きます。 よくわからなければ[Alt][f][t]で開いて[クイックアクセスツールバー]タブを選択しても良いです。 「コマンドの選択」ドロップダウンで「すべてのコマンド」を表示させ [直線コネクタ]を探して、中央の[追加]ボタンクリック。 [OK]で閉じます。
お礼
回答ありがとうございます! コマンドバーのコントロールが可能ということが解り大変参考になりました! ID番号で他のコマンドも制御可能なようで、今後色々使えそうです。 ありがとうございました!!
- fujillin
- ベストアンサー率61% (1594/2576)
オートシェイプの線でよいのでしょうか? マクロの自動記録で Set myLine = ActiveSheet.Shapes.AddLine(130#, 250, 350, 430) みたいなのができると思いますが?
お礼
早々に回答頂きありがとうございました。 addlineメソッドも参考にしながらマクロを組んでみます!
補足
早速の回答ありがとうございます! 当方の説明が悪くて申し訳ございません。 (beginx:=x1, beginy:=y1, endx:=x2, endy:=y2)のように座標を数値で指定するのではなく、マウスで任意の位置からクリックしながら線を引っ張り、離した位置で線が終わる、というイベント(?)にしたく考えています。
お礼
御親切にマクロの例文も頂きありがとうございます。 ダブルクリックイベントと組み合わせることで、かなり希望に近いものが作成できました。 ありがとうございました。