Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9161 / 13644 ツリー ←次へ | 前へ→

【28671】シートの保護をした後にセルの書式設定 pio 05/9/12(月) 16:44 発言[未読]
【28677】Re:シートの保護をした後にセルの書式設定 りん 05/9/12(月) 19:31 回答[未読]
【28704】Re:シートの保護をした後にセルの書式設定 pio 05/9/13(火) 9:56 質問[未読]
【28737】Re:シートの保護をした後にセルの書式設定 りん 05/9/13(火) 21:04 発言[未読]
【28768】Re:シートの保護をした後にセルの書式設定 pio 05/9/14(水) 10:46 お礼[未読]
【28792】Re:シートの保護をした後にセルの書式設定 りん 05/9/14(水) 20:22 発言[未読]
【28859】Re:シートの保護をした後にセルの書式設定 pio 05/9/16(金) 15:52 お礼[未読]
【28897】Re:シートの保護をした後にセルの書式設定 りん 05/9/17(土) 17:18 発言[未読]
【28957】Re:シートの保護をした後にセルの書式設定 pio 05/9/19(月) 16:21 お礼[未読]
【28967】Re:シートの保護をした後にセルの書式設定 りん 05/9/19(月) 20:19 発言[未読]
【29015】Re:シートの保護をした後にセルの書式設定 pio 05/9/21(水) 15:25 お礼[未読]

【28671】シートの保護をした後にセルの書式設定
発言  pio  - 05/9/12(月) 16:44 -

引用なし
パスワード
   現在、入力制限を行ったシートを作成しています。
入力制限の方法(保護のロックを解除後、シートを保護)は分かったのですが
保護の解除を行ったセルの書式設定が行えなくなりました。
マウスの右クリックをしても「セルの書式設定」が押せない状態です。
セルの入力制限を行ってもセルの書式設定の方法を知ってる方がいらっしゃいましたら、教えてください。よろしくお願いします。

【28677】Re:シートの保護をした後にセルの書式設定
回答  りん E-MAIL  - 05/9/12(月) 19:31 -

引用なし
パスワード
   pio さん、こんばんわ。

>現在、入力制限を行ったシートを作成しています。
>入力制限の方法(保護のロックを解除後、シートを保護)は分かったのですが
>保護の解除を行ったセルの書式設定が行えなくなりました。
>マウスの右クリックをしても「セルの書式設定」が押せない状態です。
>セルの入力制限を行ってもセルの書式設定の方法を知ってる方がいらっしゃいましたら、教えてください。よろしくお願いします。

 セルの書式設定のダイアログには、保護に関するタブがあるので、それで表示できなくしてあるのかなあ?とさっき思いました。

 ただ、個々のダイアログを表示することが可能なので、たとえばフォントを変えたい場合は、フォントの設定のダイアログを呼び出せばいいです。

Sub test()
  Dim r1 As Range, r2 As Range
  '選択範囲をチェック(図形等が選択されている時はエラーになるので無視)
  If TypeName(Selection) = "Range" Then
   For Each r1 In Selection
     If r1.Locked = False Then
      If r2 Is Nothing Then
        Set r2 = r1
      Else
        Set r2 = Application.Union(r2, r1)
      End If
     End If
   Next
   If Not r2 Is Nothing Then
     r2.Select '再選択
     'セルの書式設定のフォントダイアログを表示
     Application.Dialogs(xlDialogFontProperties).Show
   End If
  End If
End Sub
 こんな感じです。

 なぜかUserInterfaceOnlyをTrueにしていなくても、保護のかかった部分のフォントを変えることができてしまったので、保護の状態をチェックして保護のかかってない部分のみ選択しなおしてフォントを適用可能にしています。

 右クリックメニューに追加しておくと便利です。追加の仕方は過去ログにたくさんあると思うのでよかったら探してみてください。

【28704】Re:シートの保護をした後にセルの書式設定
質問  pio  - 05/9/13(火) 9:56 -

引用なし
パスワード
   りんさん、おはようございます

先日は、回答を頂きありがとうございます。
実際にりんさんが作られたソースをそのままコピーして
使用してみました。
あの方法をマウスの右クリックをした時点で処理を走らせて
使用すれば、ダイアログの表示([セルの書式設定)]は
押下可能になるのでしょうか??
そこらへんがまたいまいち頭の中で整理できません。
右クリックの機能の中に組み込むのでしょうか??

たびたびすいませんが、よろしくお願いします。

分かりにくい文章ですいません。

【28737】Re:シートの保護をした後にセルの書式設定
発言  りん E-MAIL  - 05/9/13(火) 21:04 -

引用なし
パスワード
   pio さん、こんばんわ。

>先日は、回答を頂きありがとうございます。
>実際にりんさんが作られたソースをそのままコピーして
>使用してみました。
>あの方法をマウスの右クリックをした時点で処理を走らせて
>使用すれば、ダイアログの表示([セルの書式設定)]は
>押下可能になるのでしょうか??
なりません。
 前回書いたとおり、セルの書式設定のダイアログを有効にすることはできません。
理由は、
>> セルの書式設定のダイアログには、保護に関するタブがあるので、それで表示できなくしてあるのかなあ?とさっき思いました。
です。
 変わりにフォントのダイアログなどを出すことができるので、それで代替してみてはいかがですか?と提案したのです。
 コマンドボタンや、ユーザー定義のコマンドバーにマクロボタンを登録したものに、マクロを登録して、実行してみてください。

【28768】Re:シートの保護をした後にセルの書式設定
お礼  pio  - 05/9/14(水) 10:46 -

引用なし
パスワード
   りんさん、ありがとうございます。

私の理解が遅く、再度の説明をして頂き
すいませんでした。

実際にマクロを組んでやってみようと思います。
ほんとにありがとうございました。

【28792】Re:シートの保護をした後にセルの書式設定
発言  りん E-MAIL  - 05/9/14(水) 20:22 -

引用なし
パスワード
   ▼pio さん:
>りんさん、ありがとうございます。
>
>私の理解が遅く、再度の説明をして頂き
>すいませんでした。
>
>実際にマクロを組んでやってみようと思います。
>ほんとにありがとうございました。
あれから調べてみたところ、フォント以外のダイアログはシートに保護がかかっていると表示不可でした。
とりあえず、フォントだけでも。
↓以下を全部Thisworkbookに記述=====
Private Function Dtype(tag As Integer) As Integer
  Dim tf As Boolean, c As Range, result As Integer
  result = 0
  If ActiveWindow.SelectedSheets.Count > 1 Then
   tf = False: result = -88 '複数シート選択
  Else
   tf = True
   If ActiveSheet.ProtectContents = True Then
     If TypeName(Selection) = "Range" Then
      For Each c In Selection
        tf = tf And (Not c.Locked = True)
      Next
     Else
      tf = False
     End If
   End If
  End If
  '
  If result >= 0 Then
   If tf = False Then
     result = -77 '保護セルあり
   Else
     result = xlDialogFontProperties
   End If
  End If
  '結果
  Dtype = result
End Function
Private Sub Dshow()
  Dim II%
  On Error Resume Next
  II% = Application.CommandBars.ActionControl.tag
  On Error GoTo 0
  '
  JJ% = Dtype(II%)
  '
  If JJ% > 0 Then
   Application.Dialogs(JJ%).Show
  Else
   Select Case JJ%
     Case -77: AAA$ = "選択範囲に保護セルあり"
     Case -88: AAA$ = "作業グループは非対応"
     Case -99: AAA$ = "インデックスが違います(何故?)"
     Case Else
          AAA$ = "その他エラー?"
   End Select
   '
   MsgBox AAA$, vbCritical, ActiveWorkbook.Name
  End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim cb As CommandBar
  For Each cb In Application.CommandBars
   If cb.Name = "Cell" Then
     CBEdit cb.Index, False
   End If
  Next
End Sub

Private Sub Workbook_Open()
  Dim cb As CommandBar
  For Each cb In Application.CommandBars
   If cb.Name = "Cell" Then
     CBEdit cb.Index, True
   End If
  Next
End Sub

Private Sub CBEdit(II%, flg As Boolean)
  Dim cbp As CommandBarPopup, cbb As CommandBarButton, JJ%
  With Application.CommandBars(II%)
   .Reset
   '
   If flg = True Then
     .Controls(1).BeginGroup = True
     '追加開始
     Set cbb = .Controls.Add(Type:=msoControlButton, before:=1)
     With cbb
      .Caption = "フォント"
      .OnAction = ThisWorkbook.Name & "!Thisworkbook.Dshow"
     End With
   End If
  End With
End Sub
↑ここまで========

UserInterFaceOnlyをTrueにしておくとマクロからセルに関する各種の変更が可能なので、色を塗ったり罫線を引きたいときは、そこで直接指定したらよいと思います。

セルをオレンジ色に塗るコマンドを右クリック(セル)メニューに登録
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=5027;id=excel

【28859】Re:シートの保護をした後にセルの書式設定
お礼  pio  - 05/9/16(金) 15:52 -

引用なし
パスワード
   りんさんへ

返信遅くなり申し訳ありません。
実際にりんさんの記述されたコードを貼り付けて
実行してみました。
右クリックをすることで「フォント」項目が表示され
押下後、書式設定画面が表示されました。
ありがとうございました。

ちなみに、「表示形式」ダイアログを表示させることも
可能なのでしょうか??

次々に質問申し訳ありません。
お時間がある時でよいので、お手数ですがご教示願います。
よろしくお願いします。

【28897】Re:シートの保護をした後にセルの書式設定
発言  りん E-MAIL  - 05/9/17(土) 17:18 -

引用なし
パスワード
   pio さん、おはようございます。

>ちなみに、「表示形式」ダイアログを表示させることも
>可能なのでしょうか??
>>あれから調べてみたところ、フォント以外のダイアログはシートに保護がかかっていると表示不可でした。
ということで、不可でした。

ちなみに。
Sub test()
  On Error Resume Next
  With Application
   .Dialogs(xlDialogFormatNumber).Show
   .Dialogs(xlDialogFontProperties).Show
   .Dialogs(xlDialogAlignment).Show
   .Dialogs(xlDialogBorder).Show
   .Dialogs(xlDialogPatterns).Show
   .Dialogs(xlDialogCellProtection).Show
  End With
End Sub

保護がかかっているシートで実行すると、フォントの分だけ表示されました(XL2000)。

【28957】Re:シートの保護をした後にセルの書式設定
お礼  pio  - 05/9/19(月) 16:21 -

引用なし
パスワード
   りんさん こんにちは

とにかく理解が悪くすいません。
常に同じ質問を繰り返していますね、あたし。
本当に申し訳ありません。

保護をかけると、フォントのみが有効なのですね。
それはエクセルの仕様。ということですよね。

いろいろとご教示頂き、本当にありがとうございました。

【28967】Re:シートの保護をした後にセルの書式設定
発言  りん E-MAIL  - 05/9/19(月) 20:19 -

引用なし
パスワード
   pio さん、こんばんわ。

>保護をかけると、フォントのみが有効なのですね。
>それはエクセルの仕様。ということですよね。
 仕様というか、保護がかかっているところも変更できたりするので(XL2000)、もしかしたらバグなんではないかと思います。
 ダイアログはフォント以外表示できませんが、ProtectUserInterfaceOnlyをTrueにすると、マクロによる編集は受け入れますので、数値の書式を指定するマクロ(ダイアログは使えないのである程度準備する必要があります)を組めば対応できるかもしれません。
 変更されたくないセルがあるのならば、そのセル(範囲)を選択できないようにするとか、その範囲を編集したときには取り消すマクロを組み込んだりして、擬似的に保護のようにするのも一つの手かもしれません。

【29015】Re:シートの保護をした後にセルの書式設定
お礼  pio  - 05/9/21(水) 15:25 -

引用なし
パスワード
   りんさん こんにちは

いろいろと質問に答えてくださってありがとうございました。
今回教えて頂いたことを復習しながら、実際に作成していこうと思います。

本当にありがとうございました。

9161 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free