• ベストアンサー

【Excel VBA】コマンドボタンの選択&移動

Excel2003を使用しています。 以前、こちらで教えていただいて、1クリックで1ページ分移動するコマンドボタンを作成しました。 左クリックでDown、右クリックでUpし、Sheet2モジュールに下記のコードを記述しています。 このコマンドボタン自体を選択して、現在配置している場所(セル上)から移動させたい場合、どのように操作すればいいでしょうか? 右クリック、左クリック両方にページ移動が設定されているため、コマンドボタン自体を選択することができません…。 マクロが動作しないよう、一旦、コードを削除して、ボタンをクリックしてみたのですが、選択状態になりませんでした。 よろしくお願いします。 ------------------------------------------------------- Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  '左クリック-進む-Down  '右クリック-戻る-Up   CommandButton1.Caption = "左-Down, 右-Up"   Dim WinTop As Long   Dim i As Long   i = Int((ActiveCell.Row) / 26) + 1   If Button = 1 Then     Application.Goto Cells(i * 26 + 1, 1), True   ElseIf Button = 2 Then     If i > 1 Then       Application.Goto Cells((i - 2) * 26 + 1, 1), True     End If   End If    WinTop = ActiveWindow.VisibleRange.Top + 2 '(2は縦の位置調整)    CommandButton1.Top = WinTop End Sub

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

  • ベストアンサー
回答No.1

デザインモードに切り替えると 移動できます。 「表示」-「ツールバー」-「VisualBasic」 で開いたツールバーの中にデザインモードに するボタンがあります。

rx-z5815
質問者

お礼

アドバイスありがとうございます。 デザインモードに切り替えて、移動させることができました。 ありがとうございました!

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >クリックイベントにも何か記述が必要ということなのでしょうか? もともと、そのコマンドボタンは、何をするためでしょうか? 単に動くだけではなくて、クリックして何をするか、ということですね。 移動するだけではないと思いますけれど……。 私の場合は、最下行にデータを貼り付けるようにしています。 ただ、移動の方法が、ボタンクリックではなくて、 Private Sub Worksheet_SelectionChange で動くようにしています。

rx-z5815
質問者

お礼

おはようございます。 お礼が遅くなり、申し訳ありません。 >もともと、そのコマンドボタンは、何をするためでしょうか? コマンドボタンをクリックすると1ページ分移動するというもので、教えていただいた動くボタンで、そのページ移動にコマンドボタンもついてきます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >デザインモードに切り替えて、移動させることができました。 そういうことでしたか。 コントロールツールやVBEのツールバーの「青い三角定規と鉛筆と定規」のアイコンをオンにすれば、デザインモードになりますから、移動や加工は可能になります。 そのコードの元は、私の書いたものだと思いますが、右クリックも、左クリックもあるけれども、Clickイベントとして、動かすマクロが生きていないのではありませんか? Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  '左クリック-進む-Down  '右クリック-戻る-Up   CommandButton1.Caption = "左-Down, 右-Up"   Dim WinTop As Long   Dim i As Long    If Shift = 0 Then Exit Sub  '←ここに一行加える   ・   ・ Shift キーかControl キーを押さえながら、右クリック・左クリックで、動くようになります。 そうすれば、 Private Sub CommandButton1_Click() を使えます。

rx-z5815
質問者

お礼

Wendy02 さん、こんにちは。 お久しぶりです。 1年程前になりますが、Wendy02 さんから、この“動くボタン”を教えていただいて、大変便利に使わせていただいていましたが、最近、ボタンの位置を少し変えようかなと思い、試してみたところ、上記の質問のような状態で…というわけです。 どうしても移動させたいといけないわけでもなかったのですが、できないことが逆に気になって、質問させていただいた次第です。 >Clickイベントとして、動かすマクロが生きていないのではありませんか? 恥ずかしながら、ちょっと意味がわからなかったのですが、アドバイスをいただいたように、  If Shift = 0 Then Exit Sub ↑1行加えてみたところ、右クリック・左クリックしてもページ移動しなくなりました。 >そうすれば、 Private Sub CommandButton1_Click() を使えます。 とのことで、クリックイベントにも何か記述が必要ということなのでしょうか? もし、お時間が取れましたら、教えていただけると嬉しいです。

関連するQ&A

  • エクセル2010のvbaについて

    押されたコマンドボタンの名前を取得したいです (調べてみましたがエラーになり取得できませんでした) 後コマンドボタンがたくさんあり、コードも長く とても邪魔なので省略したいのですができますか? (左クリックと右クリックで違う処理をした後       MouseDown コマンドボタンの名前で少し処理を変えるコードです) MouseUp (下のコードのような感じです) 回答お願いします Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 2 End Select End Sub Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) If (コマンドボタンの名前を取得) = "aaa" Then Range("A1") = Range("A1") + 1 Else Range("A1") = Range("A1") - 1 End If End Sub

  • エクセル2010のコマンドボタンついて

    MouseDownイベントでループ(Doなど)をさせた後 MouseUpイベントでStopさせるコードを作りましたが MouseUpイベントまで行かずずっとループしてしまいます (押されている間はボタンが凹んでいますが このコードにすると凹まず中断しないと 動かせないようになってしまいます) 何が原因がわからないので回答お願いします 下はコードです Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 3 End Select Do Range("A1") = Range("A1") + Range("A1") Loop End Sub Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Stop End Sub (Select Case Button Case 1...にしても変わりませんでした)

  • 同じコマンドボタンからマウスカーソルがはなれたら

    フォーム上のコマンドボタンにマウスカーソルが触れたら色を付ける、 同じコマンドボタンからマウスカーソルがはなれたら 、また色を変える、 という動きをvbaで行いたいのですが、 Private Sub cmd_test_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Me.cmd_test.BackColor = RGB(255, 180, 200) End Sub で、マウスカーソルが触れたら色を付けることはできたのですが、 マウスカーソルがそのコマンドボタンから離れたら色を変えるという動きができません。 Private Sub cmd_test_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Me.cmd_test.BackColor = RGB(255, 255, 255) End Sub Private Sub cmd_test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Me.cmd_test.BackColor = RGB(255, 255, 255) End Sub Private Sub cmd_test_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Me.cmd_test.BackColor = RGB(255, 255, 255) End Sub をしても、マウスカーソルが離れても色が白になりませんでした。

  • EXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

    すいません、EXCEL VBAで教えていただきたいことがあります。 EXCEL VBAでユーザーフォームを作る。 フォーム内にはTextBox1とCommandButton1を設置。 TextBox1に書き込んだ文字をドラッグ →CommandButton1を押す →ドラッグした文字を消去 という機能をコマンドボタンに持たせたいのですが 可能でしょうか。 下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim i As Integer With Me.TextBox1 i = .SelStart If i > 0 Then .Text = Left(.Text, i - 1) & Mid(.Text, i + 1) .SelStart = i - 1 End If End With TextBox1.SetFocus End Sub

  • [Excel VBA]コマンドボタンの入力待ち方法

    コマンドボタンの入力を待つ方法についてご教示願います、 以下に詳しい状況と、具体的な質問を記載します。 【構成】 ・ユーザーフォーム上に5つのコマンドボタン(CommandButton1~CommandButton5) 【やりたいこと】 ・CommandButton1を押したらスタート ・1ラウンドにつき1回、CommandButton2~CommandButton5のいずれかのボタンが押せる。  そして、押されたボタンが何かを毎ラウンド判定する。  これを10ラウンドまで繰り返す。 (つまり、どのボタンが押されたかを10回判定する) なお、「ボタンが押されるまでは勝手にループしないこと」。 【コード】(UserFrom1に記載。質問用として、変数名は仮に日本語にしてあります) Public 押された As Long Dim 現在のラウンド As Long Dim 最終ラウンド As Long Private Sub ラウンド処理() 最終ラウンド = 10 For 現在のラウンド = 1 To 最終ラウンド ボタン判定 Next 現在のラウンド End Sub Private Sub ボタン判定() MsgBox 現在のラウンド & ":" & 押された End Sub Private Sub CommandButton1_Click() ラウンド処理 End Sub Private Sub CommandButton2_Click() 押された = 2 End Sub Private Sub CommandButton3_Click() 押された = 3 End Sub Private Sub CommandButton4_Click() 押された = 4 End Sub Private Sub CommandButton5_Click() 押された = 5 End Sub 【詰まっている点】 ボタンの入力待ちになるような文が入っていないため、 「1:0」「2:0」「3:0」…「10:0」とmsgboxが出るだけの状態です。 (当然ですが…) VBAの 【質問】 毎ラウンドごとにボタンの入力待ちのような状態を 「できるだけこの形を崩さずに」組み込むためには、どのような処理を加えればいいでしょうか。

  • コマンドボタンやテキストボックスの変数化(?)

    今、VB2005ExpressEditionでソフトを作っているのですが、 コマンドボタン(Button)を並べ、その隣にテキストボックス(Textbox)を並べ、 約80組のボタン・テキストの組を作りました。 そのボタンを隣に記載してある数字分だけクリックさせたいのですが、クリックさせる関数を public function clk(a1 as integer,a2 as integer) If a2 < 1 Then Exit Function Dim a3 As Integer = a2 Do If a1 = 1 Then Call Button1.PerformClick() If a1 = 2 Then Call Button2.PerformClick() ....... a3=a3-1 loop until a3<1 End function として、a1をクリックするボタンの添え字、a2=textbox(a1).text(a1の部分は毎回手打ち)としていますが、buttonやtextboxの名前を変数化して、読み込むことができれば、コードを省略できると思います。何かいいアイデアはないものでしょうか?

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

  • 8つのコマンドボタン上にそれぞれマウスカーソルを置くと、userfor

    8つのコマンドボタン上にそれぞれマウスカーソルを置くと、userform1~8(図)が表示されるようにしております。 そして、Label上にマウスカーソルを置くと、表示中のuserformが消えるようになっております。 しかし、たまにですが、 > エラー番号:50290 > "アプリケーション定義またはオブジェクト定義のエラーです。" が表示されてしまい。 下記マクロのunload userform1でとまってしまいます。 なぜなのでしょうか。 Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Unload userform1 Unload userform2 Unload userform3 Unload userform4 Unload userform5 Unload userform6 Unload userform7 Unload userform8 End Sub

  • オプションボタンとリストボックスの連動

    下記コードを作りましたが、全く反応がありません。 どこが悪いのか、指摘いただけませんでしょうか? よろしくお願いします。 ・オプションボタン1を選択=リストシートのB列をリストボックスへ表示 ・オプションボタン2を選択=リストシートのC列をリストボックスへ表示 ・リストボックスから一項目を選択、値を入力シートへ入力 Private Sub UserForm2_Initialize() If OptionButton1.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!B3:B" & lastRow End With End If If OptionButton2.Value = True Then With UserForm2 .ListBox1.RowSource = "リスト!C3:C" & lastRow End With End If End Sub Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Worksheets("入力!").ActiveCell.Value = ListBox1.Value End Sub 以上

  • エクセル2010のvbaについて

    Sheet1に挿入したイメージ(ActiveX)をクリックすると数字が上がって 実行中にもう一度同じイメージをクリックすると止まるようにしたいのですが 数字が上がったまま止まりません(上限はあるのでオーバーフローはしません) Worksheet_SelectionChangeで(ActiveXのイメージがもう一回押されて) 選択セルが変わったら停止としたかったのですが反応しません イメージをクリック(実行)してもう一回押すとクリックしている間は止まりますが離すと再開されます コードにクリックされた回数がわかるようにしましたが増えません 説明が分かりにくかったら追記します 回答お願いします クラスモジュールのコード(イメージの名前によって少し処理を変えるためです) Private Sub myImg_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim i As Integer, a, b, C As POINTAPI, obj As OLEObject i = myImg.Index - 1 Call GetCursorPos(C) Set obj = ActiveWindow.RangeFromPoint(C.X, C.Y) b = Range("A1") Range("A1") = obj.Name Range("A2") = Range("A2") + 1    'クリックされた回数が分かるようにするため追加 If Range("A2") = 2 Then Range("C1").Select End If Range("A3") = "B1" If obj.Name = 2 Then Range("A3") = "B3" Range(Range("A3")).Select End Sub Sheet1のコード Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Address <> Range(Range("A3")).Address Then Exit Sub Do While ActiveCell < Range("A4") * 100 If ActiveCell.Address <> Range(Range("A3")).Address Then Exit Do End If DoEvents ActiveCell = ActiveCell + 1 Loop End Sub

専門家に質問してみよう