[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム』(マー)
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)
すみません私もマクロは初心者でどのようなコードに入れたらいいのでしょうか?
そのコードをここに書いてみては如何でしょう。 (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.