Excel2003で作ったマクロを2000で実行したところこの命令でエラーになってしまいました。恐らく参照設定の問題だと思いますが、どの参照が問題なのでしょうか?
If Environ("COMPUTERNAME") = "Z7890580" Then
Exit Sub
End If
このVBAのブックの特定のシートで右クリックでオプション選択できるようになっていましたが、上記エラーが生じた後、そのPCでエクセルを実行すると、このブックを閉じても常に右クリックするとオプションが表示されるようになってしまいました。
どのようにすれば出ないようになるのでしょうか?
よろしくお願い申し上げます。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Application.CommandBars("Cell").Reset
With Application.CommandBars("Cell").Controls.Add
.BeginGroup = True
.Caption = "ReadOnlyで開く"
.FaceId = 59
.OnAction = "Selection_File_Open"
End With
End Sub
No.3ベストアンサー
- 回答日時:
こんにちは。
>Private Sub Worksheet_BeforeRightClickの指定でかなり長期間私のPCで稼動させていましたが、特に問題はありませんでした。
そういう問題がないというよりも、設計自体がヘンだと思いませんか?
結果オーライというなら、それは、それで、こちらは何も言うつもりはありません。VBAは、あくまでも、プライベートのものですから、不具合がなければ、それはそれで良いのですが、アドバイスを求められれば、指摘はします。ベテランの人でも、別件の使い方ですが、ある程度のコード・ルールは、守っても良さそうだと思う人のコードがあります。VBAは、VBAの範疇の書き方があるのですね。それを指摘したら、ある人から恨まれて、未だに時々嫌がらせをするようですが。Microsoft が指導していた内容だったので知っていると思ったのですが、プライドを傷つけたようです。
私は、メニューが出る出ないだけの問題で、右クリックで、右クリックメニューを入れ出しするコードは感心しません。メニューが出る・出ないというのは、Visible だけの問題であって、本格的に、削除するのは、Application が終わる場合や、そのブックが閉じる時だけで十分ではないでしょうか?
それが、値ではなくて、オブジェクトを立てているからです。そうすると、その時のロスが多いように感じます。Excelのメニュー自体のつくりがそういうようになっていますから、私は、そのようなコードは書きません。
>「Auto_Open やThisWorkbook_Openで行うと全てのそのブックの全てのシートに対してオプションが追加されてしまうように思えます。」でした。
それは、誤解だと思います。現行のままでは、どこで登録しようが、メニューを削除しなければどのようにしても全ブック・全シートで現れますし、残ってしまいます。Application のプロパティに命令しているからです。そうすると、そのメニューをクリックすると、そのマクロを登録したブック自体が呼び出されてしまいます。
通常は、メニュー等に、Temporary 属性(下記参照)をTrue にしていれば、実際にアプリが終われば、消えてしまいます。それに、その取り付けたブックの、Auto_Close や ThisWorkbook_BeforeClose にメニューの削除を命じれば、それはブックだけで終わってしまいます。
すべてのブックに対するものは、別の方法です。PERSONAL.XLS のThisWorkbook_Open 等に取り付けます。
もし、そのブックのみにしか現れないというなら、ActiveWorkBookを、ThisWorkbook を切り替える際のイベント(Activate とDeactivate)によって、Visible のTrue/False は書き加えます。Excelの既存のコマンドでも、例えば、行や列の削除メニューがそういう作り方になっています。
なお、私は、Reset メソッドを使わないのは、二種類の右クリックメニューを使っています。片方は、単独のブックのみしか使わないメニューで、もうひとつは、ブック全体に用いるものです。そうすると、ブック全体の方のメニューは、Reset で削除してはまずいからです。
ブック全体に用いるものでも、Temporary:=True で、ユーザー設定をすれば、マクロ自体で設定されなければ、次には消えてしまいます。
On Error Resume Next
'二重登録を防ぐ(強制終了した場合でも、最初に削除してから登録する)
Application.CommandBars("Cell").Controls("ReadOnlyで開く").Delete
On Error GoTo 0
With Application.CommandBars("CELL").Controls.Add _
(Type:=msoControlButton, Temporary:=True) '*
.BeginGroup = True
.Caption = "ReadOnlyで開く"
.FaceId = 59
.OnAction = "Selection_File_Open"
End With
すいません。もう一つVBAの記述がありましたが、説明から漏れておりました。
Private Sub Worksheet_Deactivate()
Application.CommandBars("Cell").Reset
End Sub
これにより、他のシートに移動した場合、右クリックオプションが出ないようになっております。
CommandBars("Cell")に対する指定はこのVBAだけで、他のブックでは行っていないのでResetで問題なかったと思います。
現在は問題なく稼動していますが、Resetではなく個々のコントロールに対してDeleteした方がいいようですね。
問題のPCでは、このブックでエラーが発生した為、このリセットが働かなかったものと思われます。
Wendy02殿にはいつも適切な回答をいただいて非常に感謝しております。
歯に着せぬ鋭いご指摘に関心することはあっても、逆恨みするなど考えたこともありません。
No.2
- 回答日時:
こんばんは。
>Excel2003で作ったマクロを2000で実行したところこの命令でエラーになってしまいました。恐らく参照設定の問題だと思いますが、どの参照が問題なのでしょうか?
もし、参照設定の問題なら、参照設定の部分に、×が出ているかもしれません。それを解消すればなおるかもしれません。上位から下位のバージョンに対しては、マッチングが良くありません。VBA関数ですから、その部分自体は、Excel 2000 でも、2003 でも同じです。
>Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
> Application.CommandBars("Cell").Reset
> With Application.CommandBars("Cell").Controls.Add
間違いではないですが、コード自体に無理がありませんか?
このコードはヘンです。こういう設定の入れだしを繰り返すのはよくありません。誤動作の原因になります。
右クリックしてメニューを出すから、右クリックイベントに入れるなんて、ありえないです。
設定は、Auto_Open や ThisWorkbook_Open などに入れます。
そして、Auto_Close や ThisWorkbook_BeforeClose に
With Application.CommandBars("CELL")
On Error Resume Next
.Controls("ReadOnlyで開く").Delete
On Error GoTo 0
End With
On Error Resume Next
と入れます。
この回答への補足
すいません。間違えました。
「Auto_Close やThisWorkbook_BeforeCloseで行うと全てのそのブックの全てのシートに対してオプションが追加されてしまうように思えます。」ではなく
「Auto_Open やThisWorkbook_Openで行うと全てのそのブックの全てのシートに対してオプションが追加されてしまうように思えます。」でした。
回答ありがとうございます。
ご指摘の点ですが、ブックの全シートではなく、特定のシートを開いている時のみ右クリックオプションが必要になります。
何をやっているかと言うと、セルにエクセルのフルパスが埋められています。そのセルをポイントして右クリックさせて、ReadOnlyで開く、ReadWriteで開く、そのフォルダを開く、File削除を選べるようにしています。
当職場では大半の文書がエクセルファイルです。
ショートカットでは画面がアイコンだらけになってしまいます。
サーバー上のエクセル文書を開いた状態でプルダウンメニューで追加支持を行うと、開いている文書のフルパスがこの管理シートに追加される仕組みにしています。
現在1000件近く登録しています。(毎日増え続けます)
話が少しそれてしまいましたが、Auto_Close やThisWorkbook_BeforeCloseで行うと全てのそのブックの全てのシートに対してオプションが追加されてしまうように思えます。
このブックは文書管理だけでなく、業務に必要な他の機能も合わせて持っているので他のシートではオプション表示させたくありません。
Private Sub Worksheet_BeforeRightClickの指定でかなり長期間私のPCで稼動させていましたが、特に問題はありませんでした。
尚、コントロールを削除するVBA、ありがとうございます。
明日出社したら早速使ってみたいと思います。
No.1
- 回答日時:
次を実行したらどうなる?
sub test()
Application.CommandBars("Cell").Reset
end sub
右クリックでオプション選択が出なくなるのでは?
この回答への補足
すいません。もう一つVBAの記述がありましたが、説明から漏れておりました。
Private Sub Worksheet_Deactivate()
Application.CommandBars("Cell").Reset
End Sub
このVBAはネットで検索したものをそのまま使っておりました。
自分で考えたVBAでなかったので、この記述があることを忘れておりました。
問題のPCでは、このブックでエラーになった為、このVBAが働かなかったと思われます。
コントロールをリセットするだけのブックを作って強制的にオプションを削除するようにいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
フォルダ内の複数ファイルから...
-
Excel(2010)のフィルターが保...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
指定ファィルの指定シートをシ...
-
エクセルの関数について教えて...
-
エクセルシートの一部を送りたい
-
エクセルで開いていないbookの...
-
外部ブック参照が#REF!になって...
-
フォルダ内の複数ブック・シー...
-
【困っています】VBA 追加処理...
-
別ブックから入力規則でリスト...
-
エクセルで複数のシートを別フ...
-
エクセル 複数のブックを一度...
-
エクセル2016です。「ブッ...
-
ブックの保護ができないんです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
VBA バックグラウンドで別ブッ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルシートの一部を送りたい
-
エクセル2016です。「ブッ...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
複数ファイルから特定シートの...
おすすめ情報