エクセルのワークシートにVBAでフォームコントロールのチェックボックスを貼りつけて、ある作業をさせるマクロを作成しました。

チェックボックスの位置、LinkedCell、Nameは行の番号に合わせてあります。
ある行全体をチェックボックスと一緒に「コピー-->挿入」したところ、求める動作をしないので調べたところ次のことが判りました。
「チェックボックスのNameが、「コピー-->挿入」直後と、一旦ThisWorkbook.saveをしたあとで変わる」
今は、いちいちThisWorkbook.saveをすることで求める動作をしてくれていますが、どうもスマートでない気がしています。
そこで教えていただきたいのですが、
1.Nameが「コピー-->挿入」の直後とThisWorkbook.saveのあとで変わるのはなぜですか。
2.ThisWorkbook.saveに代わるもっと賢い方法はありますか。
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2011/01/03 16:05:17
  • 終了:2011/01/08 07:42:15

回答(1件)

id:hathi No.1

hathi回答回数203ベストアンサー獲得回数462011/01/04 19:41:32

ポイント60pt

コメント欄が使えないので、回答欄で質問させていただきます。

 

この質問は、別の質問に関係していますか。⇒ http://q.hatena.ne.jp/1279973900

『ある行全体をチェックボックスと一緒に「コピー-->挿入」したところ』の動作は、【A1bookのB1sheetのある範囲(チェックボックスを複数含む)】をコピーして【A2bookのB2sheetのどこかに】貼り付けたというイメージでしょうか。

その場合、マクロのコードはどこに書かれているのでしょうか。

 

なさろうとしていることがはっきりとはわからないのですが、

Excelのフォームコントロールでしょうか

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-form.ht...

ActiveXコントロールでしょうか

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-activex...

「Name」とはなんでしょうか。

 

私が使っているのが2003なので古くて違っているかもしれませんが、Excelのシート上にフォームコントロールを配置してマクロを登録した場合、そのフォームのコントロールをコピーして他の場所に貼付た場合は、同じブックのシートならば、同一シートでも、別シートの別の位置に貼り付けても、同じような動作をします。別のブックに貼り付けた場合は、そこをクリックすると元のマクロを起動させようとしますが、動作上特に問題は起きません。

なお、貼り付けた結果、一見同じ名前のコントロールが配置されたように見えても、オブジェクトとしては違う名前を自動的に割り振られるのでマクロコードでオブジェクトを認識したり操作する場合は、それぞれの固有の名前を使う必要があります。それでは困る場合は、オブジェクトを貼り付けた後で、オブジェクトの名前をプログラムで付け替える必要があると思います。

 

なおちょっと複雑なことをさせたりしたい場合には、「Excelのフォームコントロール」を使うよりも「ActiveXコントロール」を使った方が便利なような気がします。 (使い方によって違うと思いますが)

また、多くの人が「シート上にコントロールを配置する」よりも「ユーザフォーム上にコントロールを配置する」ようです。その方が使い易いことや画面の構成などで良いことが多いのだと思います。

 

オブジェクトをコピーして貼り付けるとオブジェクト名は変わってしまうので、(コードの中でオブジェクト名を利用する場合は)貼付はあまり勧められないです。

 

『ThisWorkbook.saveのあとで変わる』というのも、私にはちょっと何のことなのか、わかりません。

 

 ~~~~~~~~~~~~~~~~~~~~~~~~~

アンケートの質問文、あるいは選択問題の回答文(選択肢)をエクセルの行に書いて、行の先頭にオプションボタンやチェックボックスを配置して、何かをさせるのであれば、そうしたオブジェクトをコピーして貼り付けるのではなくて、

オブジェクトとマクロコードを入れたシートを使い回す(各行に書く選択肢の文章をコピーして貼り付ける)方法もあると思います。

各問の正答の位置がいつも同じでは困りますが、コピーして貼り付けるのではなく、ボタンの位置をドラッグして移動させるのであれば何とかなるような気もします。

 

いずれにせよ、なさろうとしていることが良くわからないので、妥当な回答やアドバイスができません。

 ~~~~~~~~~~~~~~~~~~~~~~~~~

 

以下は、ActiveXコントロールの場合です。

 

シートにオブジェクトを貼り付けると、同じsheetに同じオブジェクト名が重ならないように、新規にオブジェクト名が自動的に割り振られます。

別のシートにオブジェクトを貼り付けると、そのシート上で同種のオブジェクトの連番がオブジェクト名として自動的に割り振られます。

 

シートに配置されたチェックボックスは、『Private Sub CheckBox1_Click()』で呼び出すことが可能ですが、このコードは該当するシートモジュールに記載する必要があります

[オブジェクトをコピーして貼り付けたのでは、そのときにオブジェクトの名前が自動的に割り振られるのでうまくいかない]ことはあると思います。

 

1 コピーしてシートに貼り付けるようなオブジェクトでないといけないのか、ユーザフォーム上に配置したオブジェクトではダメなのか 検討されてはいかがでしょうか。 

2 アクティブXコントロールのオプションボタンを複数配置して、どれか1つをクリックすると各オプションボタンに対応する既定のユーザーフォームが表示されるようにするのも、そうしたユーザフォームではダメなのか、検討されてはいかがでしょうか。

3 複数のチェックボックスが配置されていて、いくつかのチェックボックスがON(True)で、さらにどれかをダブルクリックするような動作を考えておられるのですか。 選択用のチェックボックスとは別に、『決定・実行』を指示するコマンドボタンを使った方がすっきりするような気がしますが、検討されてはいかがでしょうか。

4 一般にオプションボタンは、複数の中でどれか一つだけを選択させるのだと思いますが、『1つをクリックすると既定のユーザーフォームが表示されるようにしたい。クリックする対象は既に選択されている(●になっている)ボタンを含む』というのが、どのような状態を言われているのかが、わかりにくいのですが、、、

 

「オプションボタンのCaption」「チェックボックスのCaption」でも、変更はできます。(名前とは別につけられます)

「オプションボタン名」「チェックボックス名」でも、変更はできますが、クリックイベントやチェンジイベントで呼び出すコードのプロシージャの名前が自動的に対応して変わるのではないので、作成する手順や使い方を考える必要があります。

オプションボタンの場合既にチェックが付いていると、クリックしてもイベントが発生しない。

 ⇒ ONのオプションボタンをクリックしても、クリックしたことを認識できない

 ⇒ OFFのオプションボタンをクリックしたときだけ、クリックしたことを認識する

チェックボックスはクリックするたびにイベントが発生する。

 ⇒ クリックする度に、ON⇒OFF OFF⇒ONでも、どちらでも、認識してしまう。

(どれかを選択したり、チェックを入れたら、取り消しややり直し認めずに一発勝負で、マクロを起動させるのであれば、それで良いのですが) どうもオプションボタンでの選択や、チェックボックスのチェック動作で、その都度マクロが起動しては困るように見受けられるのですが、実際はいかがなのでしょうか。

  

『ある作業をさせるマクロ』はどういう時に起動させたいのでしょう。またそのある作業は何でしょう。

オプションボタン、チェックボックスの選択状況(選択結果)が特定のセルにリンクしてあるのならば、マクロを起動させるのは、(オプションボタンやチェックボックスではなくて)別のコマンドボタンや図形などのオブジェクトの方が良いような気がします。

id:wayan

ご回答ありがとうございます。

また、親身なコメントに感謝いたします。

ActiveXコントロールの利用も含めて検討してみます。

2011/01/08 07:41:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません