Excel VBA質問箱 IV

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

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


56494 / 76732 ←次へ | 前へ→

【24990】Re:セルのロックについて
発言  ichinose  - 05/5/16(月) 20:43 -

引用なし
パスワード
   ▼つ〜じ〜 さん:
こんにちは。
ようやく現象を確認しました。

再現手順です。

・新規ブックのシート名Sheet1のセルA1に入力規則(リスト)を
 設定することを考えます。

・同じシートのセルG1〜G3にそれぞれ
 aa:bbbbb
 bbb:cccc
 ccc:dddd

とでも入力しておきます。

セルA1を選択し、入力規則のリストを選択します。

元の値として「$G$1:$G$3」を指定します。

とここまでは普通の入力規則の設定です。

・標準モジュールにユーザー定義関数STRCUTを記述します。

'======================================================
Public Function strcut(mystr) As String

  'コロンが文字列内にある
  If InStr(1, mystr, ":") <> 0 Then

    '「項番:」を省いた文字列を返す
    strcut = Mid(mystr, 1, InStr(1, mystr, ":") - 1)

  Else
 
    '空文字を返す
    strcut = ""
 
  End If
 
End Function


・Sheet1のモジュールに以下のコードを記述します。

'=================================
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .Address = "$A$1" Then
     If .Value = "" Then
       .Locked = False
     Else
       .Locked = True
       End If
     End If
    End With
End Sub


・最後にSheet1のセルB1に
 「=STRCUT(A1)」と指定します。


これで設定完了です。
セルA1にリストを使用して値を設定してください。

Changeイベントは発生していますが、Lockedプロパティは変更されません。
(値のクリアとリストから選択したときのマクロの実行順序が違うみたい)

但し、この現象、Excel2002では確認しましたが、Excel2000では確認できません
(つまり、Excel2000では正常に作動しています。)。

ちなみにExcel2002でもセルB1に「=a1」なんていうユーザー定義以外の数式の場合、
正常に作動します。
Excel2002のバグのような気がしますが・・・。

どなたかExcel2003で確認してみてください。
(私は、持っていないので・・)

で対応策としては、
STRCUTの内容は、数式だけでも可能なので、

セルB1に

「=IF(ISERR(FIND(":",A1)),"",MID(A1,1,FIND(":",A1)-1))」

としてしまうか・・・・。


ユーザー定義関数をセルB1に指定しないで、
Sheet1のイベントモジュール(Changeイベント内で使用)を以下のように
変更するか・・・。
'==============================================================
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  With Target
    If .Address = "$A$1" Then
     If .Value = "" Then
       .Locked = False
     Else
       .Locked = True
       End If
     Range("b1").Value = strcut(.Value)
     End If
    End With
  Application.EnableEvents = True
End Sub

セルB1のユーザー定義関数を残したままでも何とかなるかな?
と思いましたが(Calculateイベント等を使用して)、
イベントの順序が処理によって違うのであきらめました。

確認してください。
2 hits

【24896】セルのロックについて つ〜じ〜 05/5/12(木) 19:28 質問
【24899】Re:セルのロックについて ichinose 05/5/12(木) 22:43 発言
【24919】Re:セルのロックについて つ〜じ〜 05/5/13(金) 19:37 質問
【24933】Re:セルのロックについて ichinose 05/5/14(土) 12:06 発言
【24975】Re:セルのロックについて つ〜じ〜 05/5/16(月) 15:36 質問
【24990】Re:セルのロックについて ichinose 05/5/16(月) 20:43 発言
【25321】Re:セルのロックについて つ〜じ〜 05/5/28(土) 14:48 お礼

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