
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
こんにちは。
#4の回答者です。
自分の発言に対して、実行可能か調べてみました。
私自身の回答のオブジェクトの名前の問題については、トラブルを発生しやす原因として、それは至急変更すべきだという意見は、変えるつもりはありません。おそらく、オブジェクトのセルのアドレス名でコンフリクトが生じている問題だと思います。
しかし、私はわたし自身の発言を、それとは別に、プロテクトという件で、数日来から、ずっと調べていました。
>ボタンのマクロ名を変えられないようにするものではありません。
ご本人がこの内容を、じっくりと、ゆっくりと理解していただくしかありません。私の発想そのものが、まったく違うからです。見慣れない用語もありますから、そこらは調べていただくことで、実際に試してみればわかる話しです。
さて、最初からですが、
今回のご質問は、「図形(AutoShape)」に対するマクロの登録も問題であって、フォーム・コントロールボタンもActiveX も安易にプロテクトというよりも、ご質問者さんが望む程度のプロテクトというか、ユーザーが、マクロ名などを簡単には変更できないようになっています。
念のためですが、予め再度確認しておかなくてはなりません。
図形などにマクロをつけたことではなく、その図形の名称をオリジナルのままにしなかったのが問題ではないかと思っています。
コンテクストメニュー(右クリックメニュー)から、マクロの登録ができないようにするというご相談では、いろいろ調べてみましたが、いくつかのリボン・カスタマイザーの海外の作者が指摘していましたが、コンテクスト・メニューでPicture モードのものは、その変更は不可能だというそうです。
そこで、私が考えた方法は、複数のマクロ自体を、マクロの登録に入れるのではなく、ひとつのマクロで、AlternativeText や図形の名称そのものでマクロを選ばせるという方法があります。普通は、オブジェクトには、Tag やIDを持っているのですが、図形(AutoShape)には、それがありません。
AutoShape そのものが持つユーザ認識コード(AlternativeTextに書き込む)
↓ それぞれに振り分けられる
Main()----------+-- triangle Macro1
|
+-- round Macro2
|
+-- pentagon Macro3
|
+-- rectangle Macro4
実は、今の私には、クラスからインスタンス自体も、載せることができませんでした。(前言を訂正させていただきます。)
オートシェイブの「マクロの登録(Assign Macro)」に登録するのはこれ一つです。
むろん標準モジュールです。(入れるときは、選択していれるのではなく、コピー&ペーストで、マクロの登録に貼り付けないとできません
'//
Private Sub obSelectjMacro1()
Dim NameObj As String
Dim obj As Object
On Error Resume Next
NameObj = Application.Caller()
If Err <> 0 Then Exit Sub
On Error GoTo 0
Set obj = ActiveSheet.Shapes(NameObj)
Select Case obj.AlternativeText
Case "triangle" 'オブジェクトの認識コード(AlternativeText)
Call Macro1
Case "round"
Call Macro2
Case "pentagon"
Call Macro3
Case "rectangle"
Call Macro4
Case Else
sObjName = NameObj
Call Macro5(sObjName)
End Select
End Sub
'/本体のモジュール内に以下も置いてください。
Private Sub Macro1()
MsgBox "三角形から、マクロ1が選ばれました", vbInformation
End Sub
Private Sub Macro2()
MsgBox "丸から、マクロ2が選ばれました", vbExclamation
End Sub
Private Sub Macro3()
MsgBox "五角形から、マクロ3が選ばれました", vbCritical
End Sub
Private Sub Macro4()
MsgBox "長方形から、マクロ4が選ばれました", vbQuestion
End Sub
Private Sub Macro5(ByVal sObjName As String)
MsgBox sObjName & "は、登録されていません。", vbCritical
End Sub
---------------
次に、図形側に、代替テキストの中に、それぞれ、
三角は、triangle
丸は、round
五角形 pentagon
長方形は rectangle
とします。こうしますと、オブジェクト名が変更されても、そのまま、マクロ自体は変わりません。(添付の画像)
----------------
他の発言されている方に対して失礼かもしれませんが、
特定のシートのVBAマクロだけをプロテクトする方法はありません。
ClassモジュールのFriend キーワードや標準モジュールのPrivate キーワードがありますが、これらは、少し目的が違います。
また、プロジェクトというのは、単体のVBEの構成の最高レベルに位置します。
シートモジュール・標準モジュール、ThisWrokbookモジュール、UserFormモジュールそして、Class モジュール、参照設定を含めた機能が、プロジェクトといいます。


No.6
- 回答日時:
>>それは、ActiveXコントロールのことでしょうか?
そうでは無くて、図形に貼り付けたVBAコードは例えば、Sheet1にいるとしたら、添付の赤で囲んだプロジェクトを指定して、保護を掛ける。
保護の掛け方は今まで説明した通りの方法。

No.5
- 回答日時:
#4の回答者です。
----------
>AシートのA1ボタンに、A3のプロシージャ名が登録されてあり
>BシートのB1ボタンに、B3のプロシージャぉ名が登録されているのですが
----------
>AシートのA1ボタンに、A3のプロシージャ名が登録されてあり
ボタンに話が変わっているようですが、最初、話は、図形ではなかったかなって思いました。私の望んでいる情報はありませんでしたが、気になる部分がありましたので、それを指摘しておきます。
どうやら、本当に、A1ボタンのA3プロシージャ名?を付けていらっしゃるようですね。私は、最初、仮の話かとは思いましたが、もし、それが本当なら、トラブルの発生の可能性はかなり高いです。どれかのオブジェクトを触ると、エラーが出ていたはずです。
セルのアドレス名と重なる名前は使ってはいけません。これは、フォームボタンでも同じです。
また、フォームも図形を同じですが、Index で処理でしますといつの間にかに中身が違ったものを扱っているということがあります。Index は、見かけの順序に支配されるからです。
オブジェクトは、英字に一意(Unique)の名前に枝番をつけたり、オブジェクトのデフォルト名をそのまま使います。また、マクロ名も一般的な名前か一意の名前にします。
それで、試してみてください。
No.4
- 回答日時:
>あるブックの全部のボタンに登録しているマクロが、違うマクロに変わっていて、ボタンを押すとエラーになるトラブルがありました。
↓
>ボタンのマクロを違うマクロに変更出来ないようにしたいのですが
何か、ここの間には、見えない情報が存在していると思います。結果だけをみて、それが起こらないようにするにはどうしたらよいのか、と言われても、本来の対処とはかけ離れたものになりかねません。
まず、そのコードの内容とエラーの種類なのです。致命的エラー(C言語[マイナスがつく])が出たのか、VBAのエラーが出たのか、オートメーションや外部オブジェクトのエラーなのか、VBA内のエラーなのか、ワークシートとVBE間のエラーなのか、それぞれによって対処の仕方は違います。
特に、何百回といか、何週間というテストを繰り返して、デバッグが終わったならともかく、エラーが限定されていない段階で、VBEditorにパスワードを入れてロックするのは、お勧めできません。
基本としては、
・当該ブックの標準モジュールを使う。
・汎用性があるVBAマクロコードであるか。
・エラーの範囲を最小限にとどめさせることが可能か。
しかし、究極の方法としては、ボタン自体をインスタンスにすれば、一般ユーザーは、まったく手の届かない所に置かれると思いますが、難易度4から5ぐらいというところでしょうか。マクロを全面的に書き換えなくてはなりません。カプセル化させて、表に出る部分を極力少なくすればよいとおもいます。でも、それは最初の段階で設計すればよいのですが、後付けは大変なことが多いです。
もう一つは、マクロでマクロを選ばせる方法があります。
同じマクロでも、クリックしたオブジェクトによってマクロが変わるという方法です。ある意味では、上記と同じ考え方です。
でも、そうする前にすることはあると思うのです。
・エクセルシートに図形から丸っこい四角の図形を貼付けて、・・マクロ登録
図形は、基本的にはフォーム・コントロールとは同じに扱いにはなります。そういう方法でやることは、私はほとんどありません。フォーム・コントロールを張り付けて、そこにマクロを取り付けます。(私がフォーム・コントロールを詳しくないと思っている方もいるようですが。)
繰り返しますが、どんなエラーであるか、そのマクロは、シートやオブジェクトが変わることで対応力があるのか、というところです。まず、そこからスタートしていかないといけないと思います。
マクロが問題なく完璧だというなら、もちろん、上記で書いた方法を考えればよいし、またそれが可能だろうと思います。失礼な言い回しに聞こえましたら、ご容赦ください。
AシートのA1ボタンに、A3のプロシージャ名が登録されてあり
BシートのB1ボタンに、B3のプロシージャぉ名が登録されているのですが
そのA1ボタンのマクロ名がC3のプロシージャ名に変わってるというふうに、全シートのボタンのマクロの登録名が違うプロシージャ名に変わってしまっていたのです。
こんな事は普通ありえません。誰かが手で変えないかぎり。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/22 11:43
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Visual Basic(VBA) VBA 登録ボタンを省略してエンターキーで作業 4 2022/07/09 22:29
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/11 11:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- Excel(エクセル) エクセルのマクロ設定 1 2023/04/05 19:37
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シートのマクロを実行する方法
-
マクロでショートカットキーを...
-
Excel VBA サブルーチン関連
-
シート保護を掛けたまま並べ替...
-
マクロ 戻るボタンを押したらシ...
-
Application.Runエラー(1004)
-
RunMacroメソッドではsubプロシ...
-
Exel 2003 にて「今日」を条件...
-
アクテイブなブック以外を一括...
-
マクロとVBAの違いは?
-
【マクロ】複数シートをまとめ...
-
アクセスの更新クエリをフォームで
-
ユーザーフォームに今日の日付を
-
private sub にしたらマクロが...
-
今日の日付の範囲を指定して印...
-
Accessからエクセルマクロを起...
-
AccessでExcelファイルを印刷
-
excelで会議室予約表の作成(マ...
-
マクロの登録
-
ACCESS2000の終了時に自動で実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別シートのマクロを実行する方法
-
Application.Runエラー(1004)
-
エクセルのマクロボタンが編集...
-
Access終了時にマクロまたはVBA...
-
エクセルVBAで、ボタンの文字を...
-
シート保護を掛けたまま並べ替...
-
access2010 コマンドまたはアク...
-
マクロ 戻るボタンを押したらシ...
-
InputBox内の表示について
-
エクセル VBA SendKeys ループ...
-
アクセスのマクロについて
-
AccessでExcelファイルを印刷
-
特定のシートだけ印刷はマクロ...
-
private sub にしたらマクロが...
-
マクロとモジュールの違いを教...
-
別シートのトグルボタンを指定...
-
ExcelVBAで右クリックメニュー...
-
マクロが登録できません
-
エクセルのマクロ
-
エクセルの右クリックにオートS...
おすすめ情報
このため、ボタンのマクロを違うマクロに変更出来ないようにしたいのですが、ユーザがシート上で自由にデータ入力、行の移動、挿入、その他の作業は全て出きるようにしたいのですが、何か方法はありますでしょうか。
よろしくお願いします。