[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『押したボタンの右側にセル挿入』(とし)
フォームボタンを押すと、ボタンの位置を取得し、ボタンを置いているセルの右側のセルを挿入させたいと思っています。
現在作成中の表が、J6〜J107までボタンを置き、そのボタンを押すと、
ボタンの右隣3つのセル(ボタンと同じ行の列KLMのセル)が挿入されるというものです。
まずはボタンが置かれている位置を取得できるコードからと思い
検索したところこちらの掲示版で、下記のコードを見つけましたので
使わせてもらったのですが
「指定したアイテムの名前が見つかりませんでした。」
とエラーが出てしまい、つまづいてしまいました。
みなさまのアドバイスを頂けたらと思います。
Sub ボタン1_Click()
MsgBox ActiveSheet.Shapes(Application.Caller).Top MsgBox ActiveSheet.Shapes(Application.Caller).Left End Sub
< 使用 Excel:Excel2013、使用 OS:Windows8 >
フォームボタンを使うことの是非はさておいて、 こんなことでしょうか? Sub ボタン1_Click() Dim r As Range Set r = ActiveSheet.Shapes(Application.Caller).TopLeftCell r.Offset(, 1).Resize(1, 3).Insert Shift:=xlToRight, _ CopyOrigin:=xlFormatFromLeftOrAbove End Sub
例えばダブルクリックのイベントプロシージャも考えられます。
(γ) 2016/10/22(土) 22:03
Application.Caller は、シート上のボタンを含む図形に、実行すべきマクロが登録されていて その図形がクリックされたときに、図形名が格納されて、そのマクロが実行されます。 で、そのマクロ内で、Application.Callerを参照することで、その図形が取得できるわけです。
このマクロを、単独で動かした場合は、Application.Callerは、エラー値になっています。
したがって ActiveSheet.Shapes(エラー値) ですから、そんな図形はないよと叱られます。
ボタンに、このマクロを マクロ登録し、ボタンをクリックしてみてください。
(β) 2016/10/22(土) 22:03
一部のセルをダブルクリックしたときだけマクロを実行する http://www.relief.jp/itnote/archives/013874.php
(マナ) 2016/10/22(土) 22:07
(γ) 2016/10/22(土) 22:46
ボタン配置は、その数が 102個ですから、 シートも重くなるでしょうし、シート作成も大変でしょう。 また、追加時にも、(あたりまえですが)ボタンの追加が必要。 ボタンの配置位置が、ちょっとずれると、正しい位置の取得ができなくなるリスクもあります。
メリットとしては、ボタンを追加するだけで、コードはそのまま変更しなくてもいいということはありますが。
γさん、マナさんがいわれるように、是非、ダブルクリック処理を検討願います。 そうしておけば、コードで、ダブルクリックされたセル領域を判定しているところの、セル領域記述をなおせばいいので 保守性ということでは、むしろ、コード変更が不要なボタン方式よりベターかも。 その領域に、たとえば、特殊な色の背景色をつけておけば、コードでは領域規定をせず、ダブルクリックされたセルの色を判定して 処理することもできます。
つまり、ダブルクリック方式でも、領域の変更時、コード変更なしで、シートの色をつけたり消したりするだけで OKになります。 また、操作者も、ダブルクリックする領域が視覚的にわかるので、操作性も、ボタン方式と比較して遜色はないと思いますね。
(β) 2016/10/23(日) 00:00
つぎのようなのをお勧めします。
表の、J1にボタンを置き、そのボタンを押すと、 カーソルのある行の
ボタンの右隣3つの列(カーソルの行の列KLMのセル)が挿入されるというもの。
(表の行数が多い場合は、ウィンドウ枠の固定を行ってください)
理由は、ボタンが1つで済むことと
セルのダブルクリックには、エクセル標準で他の機能が割り当てられているので
できれば、その機能をつぶしたくないからです(自分ひとりだけで使っている分には
割り切って使うのはアリですが、将来、ほかのひとにも使ってもらおうかと
なったときに、ユーザーさんの負担が少し増える 可能性があります)。
( 佳 ) 2016/10/23(日) 08:56
(γ) 2016/10/23(日) 09:54
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myTarget As Range Set myTarget = Application.Intersect(Target, Range("J6:J107"))
If myTarget Is Nothing Then Exit Sub Else myTarget.Offset(, 1).Resize(1, 3).Insert Shift:=xlToRight, _ CopyOrigin:=xlFormatFromLeftOrAbove
End If End Sub
このようなセルの挿入の表をつくっているのが、
定期的に行わないといけない仕事の期間を記録していまして、
列 J K L M
列K、L、Mのセルを最新の日付にしたいのでセルを挿入して日付をずらそうと考えました。
分かりにくくて申し訳ないです。
この後、挿入したセルの罫線を引くコードをいれようと思います。
たくさんのアドバイスありがとうございました。
(とし) 2016/10/23(日) 19:10
この設定を変えて試してみてはどうでしょうか。
あと,End Ifの前に、
Cancel=true
を入れるのが普通かと思います。
(マナ) 2016/10/23(日) 19:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.