Excel VBA質問箱 IV

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

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


3 / 13006 ツリー ←次へ | 前へ→

【79010】チェックボックスがONの場合に選択している行文字を太くする ペーターパン 17/4/14(金) 12:07 質問[未読]

【79101】Re:チェックボックスがONの場合に選択して... ペーターパン 17/5/10(水) 10:36 質問[未読]
【79102】Re:チェックボックスがONの場合に選択して... β 17/5/10(水) 18:22 発言[未読]
【79104】Re:チェックボックスがONの場合に選択して... ペーターパン 17/5/11(木) 10:32 お礼[未読]
【79263】Re:チェックボックスがONの場合に選択して... ペーターパン 17/6/23(金) 17:59 質問[未読]
【79270】Re:チェックボックスがONの場合に選択して... マナ 17/6/24(土) 12:28 発言[未読]
【79275】Re:チェックボックスがONの場合に選択して... マナ 17/6/24(土) 19:21 発言[未読]

【79101】Re:チェックボックスがONの場合に選択し...
質問  ペーターパン  - 17/5/10(水) 10:36 -

引用なし
パスワード
   ▼β さん:
お礼が遅くなり申し訳ありません。
ご尽力頂きありがとうございます。
あれからすぐマクロを組み使用しております。
今回、以下のような改善要望が出ました。

改善要望:エクセルの動作が少し重いので改善できないか。

確かに、毎回アクティブセルのボールドを解除するよう命令しているので、
一度下記のように書きました。
これですとアクティブセルの太字が残ってしまうので、コマンドボタンを押すとセルの太字が通常に戻るようにするなどの対策を取ろうと思っています。
もっとスマートな方法はあるのでしょうか?
ご教示頂ければ幸いです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If CheckBoxes("ChkBx1").Value = xlOn Then
    Cells.Font.Bold = False ←★ご教示頂いたマクロのこの部分を移動しました。
    Selection.EntireRow.Font.Bold = True
  End If
End Sub


>▼ペーターパン さん:
>
>もう、ご覧にならないかもしれませんが。
>
>そういうことだったんですか。
>要件をすっかり誤解していました。
>
>であれば、以下の2つの方法が考えられます。
>
>1.任意の行が選択されたときに、その時点のチェックボックスの選択の状態をみて
> チェックが入っていたら、選択された行を太字にする。
>
> チェックボックスにはマクロ登録をしません。していれば消してください。
> で、シートモジュールに。
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  Cells.Font.Bold = False
>  If CheckBoxes("チェック 1").Value = xlOn Then  '★
>    Selection.EntireRow.Font.Bold = True
>  End If
>End Sub
>
> ★のところ、実際のコントロール名に直してください。
>
>2.チェックボックスにチェックが入った時点で、その時に選択されていた行を太字にする。
> (これは、やってみると、操作が面倒というか、スムーズじゃないなと思いましたが)
>
> シートモジュールは使いません。記述があれば消してください。
> 標準モジュールに以下のマクロを書き、チェックボックスにマクロ登録します。
>
>Sub Test()
>  Cells.Font.Bold = False
>  If ActiveSheet.CheckBoxes(Application.Caller).Value = xlOn Then Selection.EntireRow.Font.Bold = True
>End Sub

【79102】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/5/10(水) 18:22 -

引用なし
パスワード
   ▼ペーターパン さん:

元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?


Option Explicit

Dim bLine As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not bLine Is Nothing Then
    bLine.Font.Bold = False
    Set bLine = Nothing
  End If
  If CheckBoxes("ChkBx1").Value = xlOn Then
    Selection.EntireRow.Font.Bold = True
    Set bLine = Selection.EntireRow
  End If
End Sub

【79104】Re:チェックボックスがONの場合に選択し...
お礼  ペーターパン  - 17/5/11(木) 10:32 -

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

モジュールレベルで変数を宣言する。
if not構文で宣言する。
どちらも今の私ではたどり着けない答えでした。

Worksheet_SelectionChangeの場合、イベント発生の度に変数がどうなっているかよく考えなくてはいけないのですね。
自分が試しに作ったものだと太字が延々と作られ続けた理由がよくわかりました。

壁にぶつかってまた1つ成長できました。
これからも精進します。

>▼ペーターパン さん:
>
>元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?
>
>
>Option Explicit
>
>Dim bLine As Range
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  If Not bLine Is Nothing Then
>    bLine.Font.Bold = False
>    Set bLine = Nothing
>  End If
>  If CheckBoxes("ChkBx1").Value = xlOn Then
>    Selection.EntireRow.Font.Bold = True
>    Set bLine = Selection.EntireRow
>  End If
>End Sub

【79263】Re:チェックボックスがONの場合に選択し...
質問  ペーターパン  - 17/6/23(金) 17:59 -

引用なし
パスワード
   もし、下記のコードをアドインにしようとした場合、どうすればよいでしょうか?
過去の質問に再質問で申し訳ありませんが、何卒宜しくお願い致します。

>▼β さん:
>ありがとうございます。
>
>モジュールレベルで変数を宣言する。
>if not構文で宣言する。
>どちらも今の私ではたどり着けない答えでした。
>
>Worksheet_SelectionChangeの場合、イベント発生の度に変数がどうなっているかよく考えなくてはいけないのですね。
>自分が試しに作ったものだと太字が延々と作られ続けた理由がよくわかりました。
>
>壁にぶつかってまた1つ成長できました。
>これからも精進します。
>
>>▼ペーターパン さん:
>>
>>元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?
>>
>>
>>Option Explicit
>>
>>Dim bLine As Range
>>
>>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>>  If Not bLine Is Nothing Then
>>    bLine.Font.Bold = False
>>    Set bLine = Nothing
>>  End If
>>  If CheckBoxes("ChkBx1").Value = xlOn Then
>>    Selection.EntireRow.Font.Bold = True
>>    Set bLine = Selection.EntireRow
>>  End If
>>End Sub

【79270】Re:チェックボックスがONの場合に選択し...
発言  マナ  - 17/6/24(土) 12:28 -

引用なし
パスワード
   ▼ペーターパン さん:

なぜアドインなのでしょうか。
ちょっと試してみましたが
メリットが感じられませんでした。

「元に戻す」の機能が使えなくなるのは気にしないのでしょうか。
特定ファイルにのみに適用するマクロではないのでしょうか。

【79275】Re:チェックボックスがONの場合に選択し...
発言  マナ  - 17/6/24(土) 19:21 -

引用なし
パスワード
   ▼ペーターパン さん:

試したのは、こんな感じです。

Option Explicit

Dim WithEvents xlApp As Application
Dim bLine As Range


Private Sub Workbook_Open()
  Set xlApp = Application
  
 With xlApp.CommandBars("Cell").Controls.Add(before:=1)
  .Caption = "強調表示OFF"
  .OnAction = "thisworkbook.メニュ切り替え"
  ThisWorkbook.Sheets(1).Cells(1).Value = False
 End With
  
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

  If Not bLine Is Nothing Then bLine.Font.Bold = False
  xlApp.CommandBars("Cell").Controls(1).Delete
  
End Sub

Private Sub メニュ切り替え()
  
  With ThisWorkbook.Sheets(1).Cells(1)
    If .Value = False Then
      xlApp.CommandBars("Cell").Controls(1).Caption = "強調表示ON"
    Else
      xlApp.CommandBars("Cell").Controls(1).Caption = "強調表示OFF"
    End If
    .Value = Not .Value
  End With
   
End Sub


Private Sub xlApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

  If Not bLine Is Nothing Then
    bLine.Font.Bold = False
    Set bLine = Nothing
  End If
  If ThisWorkbook.Sheets(1).Cells(1).Value Then
    Selection.EntireRow.Font.Bold = True
    Set bLine = Selection.EntireRow
  End If
  
End Sub

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