Excel VBA質問箱 IV

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

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


7720 / 13645 ツリー ←次へ | 前へ→

【37263】Targetの使い方 ハナ 06/4/27(木) 13:27 質問[未読]
【37264】Targetの使い方追加 ハナ 06/4/27(木) 13:35 質問[未読]
【37267】Re:Targetの使い方 ハチ 06/4/27(木) 14:01 回答[未読]
【37270】Re:Targetの使い方 Jaka 06/4/27(木) 14:44 発言[未読]
【37271】Re:Targetの使い方 Jaka 06/4/27(木) 15:31 発言[未読]
【37290】Re:Targetの使い方 ハナ 06/4/28(金) 9:03 お礼[未読]

【37263】Targetの使い方
質問  ハナ  - 06/4/27(木) 13:27 -

引用なし
パスワード
   いつも参考にさせていただいています。
 今回、XlsシートのB1に文字を入力すると動作をする
VBAを下記のようにシートモジュールに記述したのですが
バグが出てしまって困ってます。
 B1以外のところでも、選択してDeleteを押すと赤く色がかわっちゃうんです
そうならないように、指定したつもりなんですが・・・・。
どこが悪いのか、ご指摘いただきたいのです。

動作: B1に社員NOを入力すると、範囲D1からD10にMENUを表示し
    I9(MENUの入力エリア)に数字をいれて次のアクションを
    選択します。

どうぞよろしくお願いします。
     
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count = 1 Then
  If Target = Range("B1") And Target.Value <> "" Then
   Range("B1").Interior.ColorIndex = xlNone
   社員番号出力
  End If
  If Target = Range("B1") And Target.Value = "" Then
   Target.Interior.ColorIndex = 3
   MsgBox ("社員番号を入力してください")
   Exit Sub
  End If
  If Target = Range("I9") Then
    Select Case Target.Value
      Case 5:
        Call FormTest
        Range("I9").Activate
        ActiveCell.Clear
      Case 6:
        M消去
        Range("B1:B5").Value = ""
        Range("B1").Activate
      Case Else
        Range("I9").Activate
        ActiveCell.Clear
    End Select
  End If
 End If
End Sub

Private Sub M出力()
'
With ActiveSheet
  .Range("D1:J10").Interior.ColorIndex = 1
  .Range("D1:J10").Font.ColorIndex = 2
  .Range("I9").Interior.ColorIndex = xlNone
  .Range("I9").Font.ColorIndex = 0
  .Range("E1") = "処理選択MENU"
  For i = 2 To 7
    .Cells(i, 5).Value = "'" & i - 1 & " :"
  Next
  .Range("F2").Value = "工番申請入力"
  .Range("F3").Value = "工番検索"
  .Range("F4").Value = "マスタ保守"
  .Range("F5").Value = ""
  .Range("F6").Font.ColorIndex = 3
  .Range("F6").Value = "社員マスタメンテ"
  .Range("F7").Value = "終了"
  .Range("I9").Activate
End With
End Sub

Sub M消去()
Dim R_Menu As Range
Set R_Menu = Range("D1:J10")
With R_Menu
  .Clear
'  .Interior.ColorIndex = xlNone
'  .Font.ColorIndex = 0
End With
End Sub

【37264】Targetの使い方追加
質問  ハナ  - 06/4/27(木) 13:35 -

引用なし
パスワード
   途中の 社員番号出力 を書くのを忘れてました
内容は以下のとおりです
どうぞよろしくお願いします

Sub 社員番号出力()

  Dim Cn As New ADODB.Connection
  Dim 番号 As String
  番号 = ActiveSheet.Cells(1, 2).Value
  With Cn
   .ConnectionString = _
    "driver={MySQL ODBC 3.51 Driver};" & _
    "Host=localhost;DATABASE=hogehoge;" & _
    "UID=xxxx;pwd=pwd"
   .Open
  End With
  Cn.Execute ("SET NAMES sjis")

  msql = "select * from syain where syainbangou=" & 番号 & ";"

  Set Rst = New ADODB.Recordset
  Rst.Open msql, Cn, adOpenStatic, adLockReadOnly
 
  If Rst.EOF Then
    ActiveSheet.Cells(1, 2).Activate
    ActiveCell.Interior.ColorIndex = 3
    MsgBox ("登録がありません")
    GoTo EH
  End If
'
  With ActiveSheet
      .Cells(2, 2) = Rst!simei
      .Cells(3, 2) = Rst!furigana
      .Cells(4, 2) = Rst!syozoku
      .Cells(5, 2) = Rst!yakusyoku
  End With
  M出力

EH:
  Rst.Close
  Cn.Close
  Set Rst = Nothing
  Set Cn = Nothing
End Sub
                       以上です

【37267】Re:Targetの使い方
回答  ハチ  - 06/4/27(木) 14:01 -

引用なし
パスワード
   >  If Target = Range("B1") And Target.Value <> "" Then
>   Range("B1").Interior.ColorIndex = xlNone
>   社員番号出力

省略することで.Valueで比較しちゃってるのでは?

If Target.Address = Range("B1").Address And Target.Value <> "" Then
   Range("B1").Interior.ColorIndex = xlNone

とかでどうでしょう?
検証してませんので、間違ってたらゴメンナサイ

【37270】Re:Targetの使い方
発言  Jaka  - 06/4/27(木) 14:44 -

引用なし
パスワード
   こういうので良いのかも...?

If Target.Address(0,0) <> "B1" Then Exit sub
If Target.value = "" Then Target.Interior.ColorIndex = xlNone

ついでに、こういうのもあり?

Dim Tag As Range
Set Tag = Application.Intersect(Target, Range("B1"))
If Tag Is Nothing Then Exit Sub
If Tag.Value = "" Then Tag.Interior.ColorIndex = xlNone

【37271】Re:Targetの使い方
発言  Jaka  - 06/4/27(木) 15:31 -

引用なし
パスワード
   因みに上のコードに
 If Target.Count = 1 Then
なくても良いです。

一応目を通してみました。

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .Address(0, 0) <> "B1" Then Exit Sub
    If .Value = "" Then
     .Interior.ColorIndex = 3
      MsgBox ("社員番号を入力してください")
     Exit Sub
    Else
     .Interior.ColorIndex = xlNone
     社員番号出力
    End If
      '↓このI9セルとの比較は値?何の為に比較?
    If .Value = Range("I9").Value Then
     Select Case .Value
       Case 5:
         Call FormTest
         'Range("I9").Activate
         'ActiveCell.Clear
         '↑2つ合わせて、これで良いです。
         Range("I9").Clear
       Case 6:
         M消去
         'Range("B1:B5").Value = ""
         ' ↑でも良いけど..。
         'Target.Count = 1 ・・・と、していたから(省いたけど)
         'イベントの抑制は必須じゃないのかも知れないけど...。
         Application.EnableEvents = False
         Range("B1:B5").ClearContents
         Application.EnableEvents = true
         Range("B1").Activate
       Case Else
         Range("I9").Clear
     End Select
    End If
  End With
End Sub

【37290】Re:Targetの使い方
お礼  ハナ  - 06/4/28(金) 9:03 -

引用なし
パスワード
   ▼ハチさん Jaka さん
ご指摘ありがとうございました。
ハチさんのご指摘の通りValue比較が原因でした。
Jakaさんのアドバイスを元に直したら、きれいにバグがとれました。
お礼が遅くなりましたけど、助かりました。
今後ともよろしくお願いします。

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