Excel VBA質問箱 IV

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

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


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

【37353】自動計算後のWorksheet_Changeイベント ぱぴおや 06/5/1(月) 15:56 質問[未読]
【37358】Re:自動計算後のWorksheet_Changeイベント よろずや 06/5/1(月) 16:35 発言[未読]
【37360】Re:自動計算後のWorksheet_Changeイベント ぱぴおや 06/5/1(月) 17:05 発言[未読]
【37363】Re:自動計算後のWorksheet_Changeイベント ぱぴおや 06/5/1(月) 17:27 お礼[未読]

【37353】自動計算後のWorksheet_Changeイベント
質問  ぱぴおや  - 06/5/1(月) 15:56 -

引用なし
パスワード
   対象は複数Sheetが存在するBookです。

Workbook_OpenイベントでSheet1のセル(仮称:セルX)に自動で値が入る処理を書いています。
 ・セルX=func_A
 ・セルXのRangeに対しWorkbook_OpenでDirtyメソッドをCall
 ・func_AにはVolatileをCall

その後、Sheet1の別のセル(仮称:セルY)の値を変更し、変更値に応じてSheet2〜4の表示/非表示を切り替える処理をWorksheet_Changeイベントプロシージャに記述しています。

Bookをオープンした後すぐにSheet1のセルYを変更すると、本来ならSheet2〜4の表示/非表示処理が走るはずなのですが、イベントプロシージャを通っているにもかかわらず、表示が切り替わりません。
更にもう一度Sheet1のセルYを変更すると今度は正常に動作します。
最初にセルYを変更した時に、デバッガで処理途中でのSheet2〜4のVisibleの値を見ましたが、正しく設定されていました。
どうやら1度目だけが正常に表示されないようです。

Volatileの影響だとは思うのですが、原因と回避策についてどなたかご存知の方がいましたら、ご指導のほど宜しくお願い致します。

【37358】Re:自動計算後のWorksheet_Changeイベント
発言  よろずや  - 06/5/1(月) 16:35 -

引用なし
パスワード
   現在どんなコードを書いてるのか正確に書いてないと、
こちらでは想像で回答することになります。

多分的外れになると思うので、とりあえず書きません。

【37360】Re:自動計算後のWorksheet_Changeイベント
発言  ぱぴおや  - 06/5/1(月) 17:05 -

引用なし
パスワード
   ▼よろずや さん:
>現在どんなコードを書いてるのか正確に書いてないと、
>こちらでは想像で回答することになります。
>
>多分的外れになると思うので、とりあえず書きません。

ご指摘ありがとうございます。
コードが多いので抜粋して該当する処理部分だけ書きます。

-----セルの式-------
(Sheet1のG13に対し)
=func_A()

-----VBAコード-------
-----Public変数------
Public gblFlag  As Boolean

-----Public関数------
Public Function func_A() As String
  Dim strName  As String

  If (Not (gblFlag)) Then 
    Application.Volatile
    gblFlag = True
  End If
  strName = Application.ThisWorkbook.Name
  func_A = Left(strName, 8)

End Function

-----Bookイベントプロシージャ-----
Private Sub Workbook_Open()
  
  Me.Worksheets(Sheet1).Range("G13").Dirty
  
End Sub

-----Sheet1イベントプロシージャ-----
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ColNo      As Long
  Dim RowNo      As Long
  Dim strName     As String  
    
  ' エラートラップ
  On Error GoTo EXT
    
  ' 変更されたセルの位置を取得する
  ColNo = Target.Column
  RowNo = Target.Row
  
  If (RowNo = 11 And ColNo = 7) Then
    If (IsEmpty(Me.Cells(RowNo, ColNo))) Then
      strName = ""
    Else
      strName = Me.Cells(RowNo, ColNo).Value
    End If
    If ( strName <> "" ) Then
      With ThisWorkbook
        If ( strName = "2" ) Then
          .Worksheets("Sheet2").Visible = True
          .Worksheets("Sheet3").Visible = False
          .Worksheets("Sheet4").Visible = False
        Else
          .Worksheets("Sheet2").Visible = False
          .Worksheets("Sheet3").Visible = True
          .Worksheets("Sheet4").Visible = True
        End If
      End With
    End If
  End If
  
EXT:
  If (Err.Number <> 0) Then
    Call MsgBox(Err.Description)
  End If
  

End Sub

【37363】Re:自動計算後のWorksheet_Changeイベント
お礼  ぱぴおや  - 06/5/1(月) 17:27 -

引用なし
パスワード
   すみません。
いろいろやってみたところ、自己解決しました。
どうもありがとうございました。

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