• 締切済み

VBAのイベント

Excel2000でVBAを使用しています。 シート上にグループ化されたオブジェクト (円とテキスト→円の中にテキストで番号が1~100まで入っています)が100個あり、 そのオブジェクトに名前("グル1"~"グル100") をつけています。 「そのオブジェクトの1つをシート上のどこかに移動し、 右クリックすると、次の番号が近くに飛んでくる」 と言うようなものを作りたいと思っていますが、 どうすればよいのでしょうか?

みんなの回答

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

円にテキストを追加すれば、円とテキストをグループ化する必要ってないような、、、 やろうとされている事は結構難しいと思います。 ご希望と違いますが参考になればと思いサンプルを書きました。 試すなら新規ブックで。 '----------------------------------------------------------------- ' myOvalAdd を実行すると円を100個作ります。 ' 円をクリックすると次の番号の円が隣に来ます。 Sub myOvalAdd() Dim sh As Shape, i As Integer, x As Integer, y As Integer Randomize For i = 1 To 100   x = Int((300 * Rnd) + 1)   y = Int((300 * Rnd) + 1)   Set sh = ActiveSheet.Shapes. _        AddShape(msoShapeOval, x, y, 36#, 36#)   sh.Name = i   sh.TextFrame.Characters.Text = i   sh.TextFrame.HorizontalAlignment = xlHAlignCenter   sh.OnAction = "myAction" Next i End Sub '----------------------------------------------------------------- Private Sub myAction() Dim sh As Shape, shText As String, x As Integer, y As Integer  Set sh = ActiveSheet.Shapes(Application.Caller)  x = sh.Left + sh.Width + 1  y = sh.Top  shText = sh.Name + 1  For Each sh In ActiveSheet.Shapes    If sh.Name = shText Then      sh.Top = y: sh.Left = x      Exit For    End If  Next End Sub

関連するQ&A

  • VBAのExitイベントについて

    VBA(Excel)についてご質問します。 フォームにて、IDというオブジェクト名のテキストボックス、 Private Sub ID_Exit(ByVal Cancel As MSForms.ReturnBoolean) という関数(Exitイベント)を用意しました。 IDにフォーカスがある状態で、フォーカスを移動しようとすると、この関数が必ず実行されるかと思います。 そのとき、特定のボタン(例えばキャンセルボタン)がクリックされたためにフォーカスが移動したときは、この関数の処理を実行したくない。もしくはこの関数内で特定のボタンがクリックされたこと(そのためにフォーカスが移動したこと)を検出して、処理をスキップしたいです。 どうすれば実現できますでしょうか? よろしくお願いします。

  • VBA

    VBEの標準モジュール(例Module1)にVBAのプログラムを書き、 実行した時、ワークシート(例Worksheets(”sheet1”)のウインドウを自動的に開くには(前面に持ってくるには)どのようにコーディングすれば良いのでしょうか。今は実行後確認するため、プロジェクトのSheet1で右クリックして「オブジェクトの表示」でSheet1を出したり、タスクバーをクリックしていますが。まずSheet1を前面に出して処理をしたい。Activate,Select、Showなど試しても効果がありません。

  • VBAの書き方を教えてください

    EXCEL2003を使用しています。 特定のセルの値を取得して、値と同じシート名を検索して移動する事はVBAで可能でしょうか? 具体的に、sheet1のA1はVLOOKUPにて検索後の値(りんご)が表示されています。 コマンドボタンにて、A1の値(りんご)を取得して、数十枚あるシートの中からA1と同じ値(りんご)の名前のシートに移動したいのです。 いろいろ探したのですが、よく分からなかったので教えて下さい。

  • VBAでEXCELから固定長のテキストデータにしたい

    VBAにてEXCELに展開されたデータを固定長のテキストデータに落としたい。 EXCEL側の用件 (1)シート1にボタンを用意して、ボタンをクリックしたらテキストファイルを作成する処理にしたい。 (2)シート2にデータが展開されている。 列は10個程度、行は場合によりけり(MAX65536?) 固定長にする箇所とかはわかるのですが、ボタンクリックしたらシート2を見て、セル(もしくはrange)をどのように取得すればいいのかVBAがよくわからないのです。

  • EXCEL2000(VBA) イベントの取得について

    EXCEL2000のVBAで多くのコマンドボタンを設置したのですが、 これは面倒だと思って、Collectionプロパティを使ってコード部では うまくボタンを配列で扱えるようになったのですが、問題はボタンが押された時のイベント時です。 VB6.0とかだとコマンドボタンのオブジェクト名自体に配列を付けることが出来て、 尚かつ、このボタンを押された時、配列の何番目のがクリックされたのかなど、 Private Sub xxxxx_Click(Index As Integer) のように出来たと思います。 VBA(EXCEL2000)でCollectionでとった配列の何番目のボタンを押されたなど、 配列の要素を取得することは可能でしょうか?

  • テキストボックスをグループ化するVBA

    エクセル上に並んだテキストボックスを、ボタンを押すことで、任意のテキストボックスをグループ化させたい。また、別のボタンでグループ化の解除が出来るようなVBAをおしえてください。 テキストボックスは、Sheet1~3まであって、ボタンもそれぞれに配置してあり、 どこのSheetのボタンを押しても、各シート、それぞれに任意の設定したテキストボックスがグループ化できるようにしたい ※各シート、グループ化するテキストボックスはおなじでなない・・・ よろしくお願いします。

  • Excel shape イベント

    お世話になります。 Excelマクロについて質問です。 バージョンは2010です。 Excelのあるシートにshapeオブジェクトがいくつも配置されており、そのある一つのshapeをダブルクリックしたときに、ある関数を動かす、といったイベントを設定したいのですが、やり方がわかりません。 BeforeDoubleClick等はありますが、それらはすべてアクティブシートのセルに対するイベントなため、私のやりたいことが満たされません。 私のやりたいこと… shapeをダブルクリックし、ユーザーが任意で名前を変えたり削除できるようにしたい。 また、右クリックによるコンテキストメニューの項目追加という方法でも問題ないのですが、excel2010での独自メニュー追加が不可能になったという記事を見ましたので、方法に困っています。 上記2つの方法で、わかる方、または他に良い方法がわかる方、ご返信お願いいたします…(;_;)

  • VBAでエラーメッセージが出ないようにしたい

    book1にbook2のセルをコピーして貼り付け、book2を閉じようとしたところ、シートにリンクが張られているのか以下のようなメッセージボックスが出てきます ----ここから----------------- 移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか? コピーまたは移動先のシートに定義されている名前を使用する場合は「はい」をクリックします。 数式またはワークシートで参照する範囲の名前を変更する場合は、「いいえ」をクリックし、「名前の重複」ダイアログボックスに新しい名前を入力します。 ---------ここまで------------------ 取り敢えず「はい」をクリックして閉じているのですが、複数回このメッセージが繰り返し出てきて面倒なので、VBAでこのメッセージを出さないようにしたいのですが、どのようにすればよいのでしょうか?

  • VBAでのcsv読み込みについて

     VBA初心者です。テキストファイル(ファイルの中はカンマ区切り)を別なEXCELシートではなくて、VBAを実行したEXCEL内のシート(例えばSheet2)に落としたいのですが、うまくいきません。  Workbooks.OpenText Filename:="C:\csv_test.txt", StartRow:=1, DataType:=xlDelimited, Comma:=True~ と記述すれば、別シートには落ちるのですが・・・。  簡単なことかもしれませんが、ご回答よろしくお願いいたします。

  • VBAでイベント発生時に自分の呼ばれたコマンドを知る方法

    イベントが発生したときに自分がどのオブジェクトから呼ばれているイベントか知る方法ってありますか?あるいは上から何番目のコマンド(縦に同じコマンドがズラッと並んでいるイメージ)から呼ばれているかをイベント内部から知る方法ってありますか? 今コーディングで新規フォームを作ってそこにレコード数だけコントロールを配置するというコーディングを考えております。 そのコマンドにクリックイベントも発生させたいので、コントロールを作成してイベントを埋め込むという作業まではできたのですが、不特定多数のコマンドボタンの作成設置方法に悩んでおります。 VBAではコントロールの配列はできないので、コントロールの名前などを全て変えて作らなければなりません。そこをどうするかで頭を悩ませています。 しかも後でどのコントロールがクリックされて呼ばれたのかも知りたいので、コントロール配列のindex番号みたいなものを取得しておく必要もありますが、何か良い方法はないでしょうか? いっそのことコマンドの名前を数字にして、後でそのコントロール名とかオブジェクトのメソッドを参照してインデックス番号を取得・・・みたいなことを考えてたのですが、たしか既存の(目に見えて形となっている)(オブジェクト名自体を持っている)コントロールのメソッドを使用するのはかなり不可能だったような気がするので、タグやオブジェクト名も拾えない気がします。 VBなら同じイベント内容のコマンドを全て配列にしてまとめてクリックイベントにしてそのIndexを見ればプロシージャ1つで済みますが、VBAで似たような方法をする方法を教えてください。 ループで回しながらオブジェクト名の違うコントロールを配置する方法は自分でなんとかやってみますのでindex番号の取得の方法だけお願いします。

専門家に質問してみよう