[[20050627184922]] 『ユーザーフォーム』(マー) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォーム』(マー)
 With Worksheets("sheet2")
        .AutoFilterMode = False 'オートフィルタ解除
        'オートフィルタで抽出
        .Range("A").AutoFilter Field:=2, Criteria1:=Range("B11").Value
            '-----------------
                If .Range("A") = 0 Then
                   msgBOX(”新規です登録ををします”) 

                End If
            '-----------------
 B11の値がsheet2のAの列にあるかを検索してなければ、ユーザーフォームを画面上に
 表示したいのですが、ユーザーフォームの表示の仕方が分かりません・・・。
 メッセージの後に表示したいのですが。
 教えて下さい。

 VBA は苦手ですが、こんな感じ?

 Sub test()

 Dim LastRow, n As Long
 Dim msg As Integer

 With Worksheets("sheet2")

 If .Range("A1") = "" Then
    UserForm1.Show
    Exit Sub
 End If

    LastRow = .Range("A65536").End(xlUp).Row

    For n = 0 To LastRow - 1
       If .Range("A1").Offset(n) = .Range("B11") Then
           Exit Sub
       End If
    Next n

 msg = MsgBox("新規データです。" & Chr(13) & Chr(13) & "登録しますか?" _
             , vbOKCancel + vbDefaultButton1 + vbInformation, "登録確認")
    If msg = 2 Then
       Exit Sub
    End If

 UserForm1.Show

 End With

 End Sub

 違ってたら、ゴメン。    (ken)

ユーザーフォームは表示できたのですが、どこのセルを選択しても
 メッセージBOXが表示されます。B11に入力した後にsheet2に無い場合は表示したいのですが。
 お願い致します。

 >どこのセルを選択してもメッセージBOXが表示されます
 すいません。よく意味が分かりませんが、Worksheet_SelectionChange のコードに入れてるとか?

 (ken)

Worksheet_SelectionChange のコードに入れています。
 すみません私もマクロは初心者でどのようなコードに入れたらいいのでしょうか?

 そのコードをここに書いてみては如何でしょう。
(ken)さんとは別人の(kenbou)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'-----------------------店舗ID------------------------------------
If Range("B4") = "1" Then

   Range("C4") = "S"
End If

If Range("B4") = "2"

   Range("C4") = "D"
End If

If Range("B4") = "3" Then

   Range("C4") = "Y"
End If

If Range("B4") = "4" Then

   Range("C4") = "N"
End If

If Range("B4") = "5" Then

   Range("C4") = "W"
End If

If Range("B4") = "6" Then

   Range("C4") = "G"
End If
'---------------------担当者ID-------------------------------------

If Range("B8") = "1" Then 'B8に1と入力したら、C8に本田恵梨と返す

   Range("C8") = "B"
End If

If Range("B8") = "2" Then 'B8に2と入力したら、C8に鈴木景子と返す

   Range("C8") = "A"
End If
'--------------------------------------------------------------------
'------------------新商品--------------------------------------------
 Dim LastRow, n As Long
 Dim msg As Integer

 With Worksheets("sheet2")

 If .Range("A1") = "" Then
    UserForm1.Show
    Exit Sub
 End If

    LastRow = .Range("A65536").End(xlUp).Row

    For n = 0 To LastRow - 1
       If .Range("A1").Offset(n) = .Range("B11") Then
           Exit Sub
       End If
    Next n

 msg = MsgBox("新規データです。" & Chr(13) & Chr(13) & "登録しますか?" _
             , vbOKCancel + vbDefaultButton1 + vbInformation, "登録確認")
    If msg = 2 Then
       Exit Sub
    End If

 UserForm1.Show

 End With

 End Sub

'--------------------------------------------------------------------------------

 こんな感じなのですが...
 すみませんあまり人様にみせらられるような物ではないのですが。

 イベントがいつでも発生してしまってますね。
[[20050508095758]] 『追加セルをクリックするとそのセルに"■"を表示』(ととろ) 
こちらを参考にイベントから抜け出る処理を追加してください。
(kenbou)


 kenbou 様、フォローありがとうございます。

 仕事中、、、あまり時間がないんで。。。手短に。すいません。ちなみに検証してません。

 with target.cells
    if .row = 11 and .column = 2 then goto JOB
    end if
 end with

 JOB:

 を、新製品の前に代入かな?これだったら、セル入力後でなく、選択後かな?

 <PS> kenbou さま、いつもすばらしい VBA 拝見して勉強させてもらってます。今後とも宜しくお願いします。

 (ken)


 これで御希望に沿えるかは判りませんが、どうぞ。

 Private Sub Worksheet_Change(ByVal Target As Range)

 '-----------------------店舗ID------------------------------------

 If Range("B4") = "1" Then
   Range("C4") = "S"
 End If

 If Range("B4") = "2" Then
   Range("C4") = "D"
 End If

 If Range("B4") = "3" Then
   Range("C4") = "Y"
 End If

 If Range("B4") = "4" Then
   Range("C4") = "N"
 End If

 If Range("B4") = "5" Then
   Range("C4") = "W"
 End If

 If Range("B4") = "6" Then
   Range("C4") = "G"
 End If

 '---------------------担当者ID-------------------------------------

 If Range("B8") = "1" Then 'B8に1と入力したら、C8に本田恵梨と返す
   Range("C8") = "B"
 End If

 If Range("B8") = "2" Then 'B8に2と入力したら、C8に鈴木景子と返す
   Range("C8") = "A"
 End If

 '--------------------------------------------------------------------
 '------------------新商品--------------------------------------------

 If Target.Address = Range("B11").Address Then GoTo JOB
    Exit Sub

 JOB:
 Dim LastRow, n As Long
 Dim msg As Integer

 With Worksheets("sheet2")

 If .Range("A1") = "" Then
    UserForm1.Show
    Exit Sub
 End If

    LastRow = .Range("A65536").End(xlUp).Row

    For n = 0 To LastRow
       If .Range("A1").Offset(n) = .Range("B11") Then
           Exit Sub
       End If
    Next n

 msg = MsgBox("新規データです。" & Chr(13) & Chr(13) & "登録しますか?" _
             , vbOKCancel + vbDefaultButton1 + vbInformation, "登録確認")
    If msg = 2 Then
       Exit Sub
    End If

 UserForm1.Show

 End With

 End Sub

 以上で〜す。すごく基本通りの VBA 。。。

 ちなみに、Worksheet_Change にしましょうね。        (ken)

 お返事遅くなりましてすみません。
 やっぱり商品リストにあるのに新商品ですとなってしまいます・・・。
 なぜでしょう?ユーザーフォームは表示されるのですが・・・。


 うぉっ!

 すいません。

 多分、こうですね。

       If .Range("A1").Offset(n) = .Range("B11") Then

 この部分を、

       If .Range("A1").Offset(n) = Range("B11") Then

 に、変えてみてください。勘違いしてたかも。。。     (ken)

 できました。ありがとうございます。
 あとB11からB25まで同じようにしたいのですが・・・。
 お手間掛けさせてすみませんが、教えてください。


 とりあえずは OK ですね。
 じゃあ、

  If Target.Address = Range("B11").Address Then GoTo JOB
    Exit Sub

 の部分を、

  With ActiveCell
    If .ROW > 11 And .ROW < 27 And .Column = 2 Then GoTo JOB
    Exit Sub
  End With

 にして、

       If .Range("A1").Offset(n) = .Range("B11") Then

 の部分を、

       If .Range("A1").Offset(n).Value = ActiveCell.Offset(-1).Value Then

 にしてみてください。ただし、エンターキーを押したときに、セルが下に移動するという前提ですよ。

 この学校には、偉大な先生方がたくさんみえるので、もっといい案があるかも。です。

 VBA は苦手。。。         (ken)

 完璧です(^0^)ありがとうございます。
 ずうずうしいですが追加で、ユーザーフォームが表示されたときtext1にBに入力した
 値を既に入れておく事はできますでしょうか?
 あと、一度ユーザーフォームに入力して、2回目にユーザーフォームが出たときに
 textに前の値が残っています、それを消しておきたいのですが・・・。
 何度もすみませんが、教えてください。


 ほぼ解決ですね。後は下記を応用してください。

 Private Sub UserForm_Initialize()

 TextBox1 = "AAA"     'TextBox1にAAAを入れておくとき
 TextBox2 = ""        'TextBox2を空欄にしておくとき

 End Sub

 これをユーザーフォームのコードにコピペ。

 ちなみに、Initialize は、初期設定のことです。          (ken)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.