Excelのシートに、管理・スケジュール・リストというシートが3つほどあったとします。
その中で管理・リストというシートの削除・移動・名前変更等を行おうとした際に、警告メッセージを表示し、許可しないように制御をかけるにはどのようにマクロを組めばよいのでしょうか?
(シートの保護を使わずに、VBAで実現したい。ただしシート内は自由に編集ができる。)
そのブックExcelファイルを開いた時に有効になるので
VBAProject>Microsoft Excel Objects>ThisWorkBookにて、
Private Sub Workbook_Open() ・・・と続くと思いますが、実現できるコードをご教授のほどお願いいたします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
#If VBA7 Then
この #IF ディレクティブは、Excel 2007 以降ではなく、Excel 2010 からでした。
条件付きコンパイラ定数を探してみましたが、ありませんので、
#VER =12
#IF VER =12 OR VBA7 Then
とするくらいしか、今のところ思い浮かびません。
No.5
- 回答日時:
これは、まとめです。
ご質問者さんが、反応していないので、これも自分用の記録のひとつとさせていただきます。
まず、旧バージョンの処理の仕方(Excel2003)までは、(*.xls)
'//標準モジュール
'Option Explicit
Public myClass() As Class1
Sub Auto_Open()
If Val(Application.Version) < 12 Then
Call ClassSetting
Else
Call DisabledCommands
End If
End Sub
Private Sub ClassSetting()
Static myClass() As Class1
Dim num As Variant
Dim i As Long
Dim CmdBtn As CommandBarButton
Dim cID As Variant
cID = Array(847, 848, 889)
ReDim myClass(2)
'SheetDelete, SheetMoveOrCopy, SheetResume
For i = 0 To UBound(cID)
Set myClass(i) = New Class1
Set CmdBtn = Application.CommandBars.FindControl(, cID(i))
CmdBtn.Enabled = True
Set myClass(i).Btn = CmdBtn
Next i
End Sub
'//Class モジュール(Class1)
Private WithEvents myBtn As CommandBarButton
Public Property Set Btn(ByVal Btn As CommandBarButton)
Set myBtn = Btn
End Property
Private Sub myBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MsgBox "そのコマンドは禁じられています。", vbCritical
CancelDefault = True
End Sub
------
''Excel2007以降(.xlsx, xlsm で作成後は、xlsbでも稼働します。)
#If VBA7 Then
'Callback for customUI.onLoad
Sub Ribbon_Load(ribbon As IRibbonUI)
MsgBox "リボンカスタマイザー(Ribbon Editor)によって加工されています。"
End Sub
'除外するのは、If ActiveSheet.Name にしている
'Callback for SheetMoveOrCopy onAction
Sub CustomMoveOrCopy(Control As IRibbonControl, ByRef CancelDefault)
If ActiveSheet.Name = "Sheet3" Then CancelDefault = False: Exit Sub
MsgBox "シートの移動やコピーはできません。", vbCritical
End Sub
'Callback for SheetRename onAction
Sub CustomSheetRename(Control As IRibbonControl, ByRef CancelDefault)
If ActiveSheet.Name = "Sheet3" Then CancelDefault = False: Exit Sub
MsgBox "シートの名前の変更はできません。", vbCritical
End Sub
'Callback for SheetDelete onAction
Sub CustomSheetDelete(Control As IRibbonControl, ByRef CancelDefault)
If ActiveSheet.Name = "Sheet3" Then CancelDefault = False: Exit Sub
MsgBox "シートの削除はできません。", vbCritical
End Sub
#End If
'---------
コードとしては、書いていない部分もありますから、これを読んだ方が研究してください。このコードの重大な欠点があります。それは、試してみることで分かるでしょう。私としての課題です。当分は解決しそうにありません。もちろん、マクロなしという話は別です。
No.4
- 回答日時:
#3の追加情報
CustomUI.xml については、名前空間が、2007では、CustomUI.xml で、
2010/2013/2016 は、CustomUI14.xml になっていますから、共有できます。
中身をみても、
CustomUI.xml
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/cust …
CustomUI14.xml
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/cust …
という違いが分かるはずです。
したがって、Office 2010 Custom UI Part は
本来は、"Office 2010-2016 Custom UI Part" と解釈してよいようです。
参考文献:
http://fnya.cocolog-nifty.com/blog/2014/03/offic …
http://www.rondebruin.nl/win/s2/win001.htm
なお、#3の物理行9 行目の
「なぜかというと、Office Ribbon Cutomizer 」は、正しくは、
「なぜかというと、Office Ribbon Customizer 」
のタイプミスでした。
No.3
- 回答日時:
「シートの保護を使わず」って、それはワークシートの構成だから、「ウィンドウの保護でしょう」。
それをなぜしないで、という理由が分かりませんが、なんとかやってみました。私にも未知の領域で、昨日からずっと試行錯誤してしまいました。ただ、以下の内容に「食いついていける」でしょうか。なかなかハードだと思います。
もちろん、Excel 2003以前なら、Class でインスタンスを設ければよいので、それをすればよいのですが、今のところ、Excel 2007と2010に限りますが、基本的には同じだと思います。(Excel 2013以降はまだ分かりません)
最初は、かなり準備が必要です。
なぜかというと、Office Ribbon Cutomizer は、ことごとく、オリジナル・ダウンローダーが不明になっている点で、そのツールが安全に確保できるところからの出発でした。私自身の持っているものも最新ではない可能性をチェックする必要もありました。
Microsoft から、
Office Fluent User Interface Control Identifiers を必要分集めてください。
2010用
http://www.microsoft.com/en-us/download/details. …
2007用
http://www.microsoft.com/en-us/download/details. …
Interface 用の該当する名称を調べなくてはなりません。
ここでは、
Sheet Tab の Context Menu の CellMenuの部分で、一例として、
ひとつピックアップすると、"SheetMoveOrCopy" とします。
次に、Office Ribbon Editor 最新で、4.42 ですが、これでももう古いようです。
開発者は、Leaf Creations というところですが、どうやら潰れてしまったようで、本来は、VSTOに委ねたいところですが、どうもなかなか値段のするものなので代用としてやむを得ません。他にも、Editor はあるのですが、今回は、これが一番よいようです。
http://www.saka-en.com/office/office-ribbon-edit …
ここで手に入ります。
インストールして、ファイル-Openで、ブックを選び、右側のDocument Explorerから、CustomUI Partsを選び、Add CustomUI で、仮に2010を選びました。
後は、
Code側に、このようなコードを貼り付けて、
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/cust … onLoad="Ribbon_Load">
<commands>
<command idMso="SheetMoveOrCopy" onAction="CustomMoveOrCopy" />
</commands>
</customUI>
Window 内の右から2番めのアイコンの[ Generate VBA CallBacks ] で、Call Backs を生成したら、コピーを取っておき、目的のブックの標準モジュールに貼り付けます。
'//標準モジュール
''Callback for customUI.onLoad
Sub Ribbon_Load(ribbon As IRibbonUI)
'----ここに内容を書く-----
End Sub
'Callback for SheetMoveOrCopy onAction
Sub CustomMoveOrCopy(control As IRibbonControl, ByRef cancelDefault)
'----ここに内容を書く-----
End Sub
このようにして作れば、可能になります。
ここが参考になりました。同じような質問です。私は、この質問者さんよりは知識はあったものの分からないままだったのです。
https://social.msdn.microsoft.com/Forums/vstudio …
ここも参考にしました。
http://www.saka-en.com/office/excel-ribbon-hide- …
-----------
画像は、Office Ribbon Editor ver 4.42
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
シート名の一部を変更する方法...
-
EXCEL(VBA)でシート保護がかか...
-
VBAでオブジェクト変数にsetし...
-
実行時エラー1004「Select メソ...
-
ExcelのVBAを使い、複数シート...
-
ユーザーフォームに入力したデ...
-
VBA実行時エラー1004 ソート失敗
-
別のシートから値を取得するとき
-
同じ作業を複数のシートに実行...
-
エクセル・マクロ シートの非...
-
ExcelVBA シート名を複数セルか...
-
【VBA】指定した検索条件に一致...
-
シート名一致すれば印刷、一致...
-
Excelマクロのエラーを解決した...
-
Excel VBA マクロ シートコピー
-
シートが保護されている状態で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
別のシートから値を取得するとき
-
ブック名、シート名を他のモジ...
-
実行時エラー'1004': WorkSheet...
-
Excelマクロのエラーを解決した...
-
XL:BeforeDoubleClickが動かない
-
シートが保護されている状態で...
-
エクセルのシート名変更で重複...
-
実行時エラー1004「Select メソ...
-
VBAで同じシート名のコピー時は...
-
エクセルで通し番号を入れてチ...
-
同じ作業を複数のシートに実行...
-
Excel VBA リンク先をシート...
-
ExcelのVBAのマクロで他のシー...
-
Vba UserformからExcelシートの...
-
【Excel VBA】Worksheets().Act...
-
VBA 存在しないシートを選...
おすすめ情報