よねさんのWordとExcelの小部屋 なんでも掲示板

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■13416 / inTopicNo.1)  リストボックスからの修正
  
□投稿者/ 斎藤 -(2019/09/20(Fri) 00:49:46)
    よね様

    いつもお世話になっております。
    今回もご助力頂きたく投稿いたしました。

    商品マスタをユーザーフォームで作成したのですが、
    既存の項目は「登録」ボタンを押下した際に修正されるようにしたいと考えております。
    以下のようなプロージャを書いたのですが、商品名しか変更されません。

    どこが間違っているのか分からない為、ご教示いただければと思います。
    よろしくお願い致します。

    Private Sub Cmd登録_Click()
    Dim lastRow As Long
    Dim wRow As Long

    With Worksheets("商品マスタ")
    lastRow = Worksheets("商品マスタ").Cells(Rows.Count, 1).End(xlUp).Row
    End With

    wRow = Me.lbl管理番号 + 1
    ' Me.lbl管理番号 = Worksheets("商品マスタ").Cells(lastRow, 1) + 1


    If WorksheetFunction.CountIf(Worksheets("商品マスタ").Columns(Range("SM管理番号").Column), Me.lbl管理番号) > 0 Then
    Dim msg As String, title As String
    msg = "その商品IDは既に登録されています。" & vbCrLf & "修正してもよろしいですか?"
    title = "確認"
    Dim res As Integer
    res = MsgBox(msg, vbYesNo + vbInformation, title)
    If res = vbNo Then Exit Sub

    With Worksheets("商品マスタ")
    .Cells(wRow, Range("SM商品名").Column) = IIf(Me.txt商品名 = "", Null, Me.txt商品名)  ←ここしか変更されない
    .Cells(wRow, Range("SM規格").Column) = IIf(Me.txt規格 = "", Null, Me.txt規格)
    .Cells(wRow, Range("SM定価").Column) = IIf(Me.txt定価 = "", Null, Format(Me.txt定価, "#,##0"))
    End With
    Else
    Worksheets("商品マスタ").Cells(lastRow + 1, 1) = lbl管理番号.Caption
    Worksheets("商品マスタ").Cells(lastRow + 1, 2) = txt商品名.Text
    Worksheets("商品マスタ").Cells(lastRow + 1, 3) = txt規格.Text
    Worksheets("商品マスタ").Cells(lastRow + 1, 4) = Format(txt定価.Text, "#,##0")
    End If

    MsgBox "登録しました。"
    Call cmdクリア_Click
    ' Unload Me
    End Sub

    Private Sub lstデータリスト_Click()
    With lstデータリスト
    lbl管理番号.Caption = .List(.ListIndex, 0)
    txt商品名.Text = .List(.ListIndex, 1)
    txt規格.Text = .List(.ListIndex, 2)
    txt定価.Text = .List(.ListIndex, 3)
    End With
    End Sub
引用返信/返信 削除キー/
■13417 / inTopicNo.2)  Re[1]: リストボックスからの修正
□投稿者/ よねさん -(2019/09/20(Fri) 09:02:53)
    2019/09/20(Fri) 09:12:40 編集(管理者)
    こちらでユーザーフォームを作成して、お書きのコードを走らせますと
    ちゃんと最下行(ラベルの管理番号の行)に登録されます。
    
    走らす際には2ヶ所変更しています。
    コメントは下記のようにしてコメントアウトしています。
    .Cells(wRow, Range("SM商品名").Column) = IIf(Me.txt商品名 = "", Null, Me.txt商品名) ' ←ここしか変更されない
    下のCallはコメントアウトして無効化しています。
    'Call cmdクリア_Click
    
    商品名が重複したときもラベルに表示された行に書き足されてしまいますので
    この辺の修正が必要とは感じました。
    
    
    
    

引用返信/返信 削除キー/
■13418 / inTopicNo.3)  Re[2]: リストボックスからの修正
□投稿者/ 斎藤 -(2019/09/20(Fri) 14:10:15)
    よね様

    ご返信頂きありがとうございます。

    私の説明不足ですが、規格と定価も修正登録を行いたいのですが、商品名だけが修正されます。

    データリストを通る際にその時点で書き変わっており、その原因が理解できていません。。。

    なお、商品名の重複については規格により種類が別れておりますので、今のところ重複していても問題ありません。

    よろしくお願いいたします。
引用返信/返信 削除キー/
■13419 / inTopicNo.4)  Re[3]: リストボックスからの修正
□投稿者/ よねさん -(2019/09/20(Fri) 14:47:49)
    > データリストを通る際にその時点で書き変わっており、
    どこでそのようなことになっているのですか?「データリストを通る」の意味が分かりません。
    コードを見る限り、どこもデータリストを経由していないように思いますが、
    データリストをワークシート関数でカウントしているだけのようですが?
    
    コードはユーザーフォームのラベルに最終管理番号が表示され、
    テキストボックス3つに「商品名」「規格」「定価」を入力する。
    [登録]ボタンをクリックすると、シートの「最終管理番号」の行に、
    テキストボックスに入力された値が転記される。
    
    という、動作ではないのですか?
    このような動作なら、こちらでは問題なく3つとも転記されます。
    
    

引用返信/返信 削除キー/
■13420 / inTopicNo.5)  Re[4]: リストボックスからの修正
□投稿者/ 斎藤 -(2019/09/20(Fri) 17:20:21)
    よね様

    うまく説明できず申し訳ありません。
    既に登録された商品をデータリストで選択した際にテキストボックスに反映するようにしております。

    ここでテキストボックスの内容を編集し登録ボタンを押すと登録済みの管理番号と重複している場合は確認メッセージを表示した上で各セルに反映させたいと考えています。

    新規の場合は問題ないのですが、修正の場合にlstデータリスト_Clickを通っているように見えます。
    その際に商品名まではテキストボックスで編集した内容が反映されるのですが、規格と定価のところで元の値に戻ってしまいます。

    お手数をお掛けしますが、ご助言頂けますようよろしくお願いいたします。
引用返信/返信 削除キー/
■13422 / inTopicNo.6)  Re[4]: リストボックスからの修正
□投稿者/ 斎藤 -(2019/09/21(Sat) 10:32:37)
    よね様

    申し訳ありません。自己解決いたしました。

    いろいろ調べてみて、以下の場所を変更したところ、思うような処理になりました。

    Private Sub lstデータリスト_Click()
    With lstデータリスト
    lbl管理番号.Caption = .List(.ListIndex, 0)
    txt商品名.Text = .List(.ListIndex, 1)
    txt規格.Text = .List(.ListIndex, 2)
    txt定価.Text = .List(.ListIndex, 3)

    ↓↓↓↓↓

    Private Sub lstデータリスト_AfterUpdate() '←イベントを変更
    Dim targetRow As Integer
    targetRow = lstデータリスト

    With Worksheets("商品マスタ")

    lbl管理番号.Caption = .Cells(targetRow + 1, 1)
    txt商品名.Text = .Cells(targetRow + 1, 2)
    txt規格.Text = .Cells(targetRow + 1, 3)
    txt定価.Text = .Cells(targetRow + 1, 4)

    End With

    End Sub


    拙い質問にご回答いただきありがとうございます。
    また何かありましたらご相談させていただきますので、何とぞよろしくお願いいたします。

引用返信/返信 削除キー/
■13423 / inTopicNo.7)  Re[5]: リストボックスからの修正
□投稿者/ よねさん -(2019/09/21(Sat) 12:20:02)
    > いろいろ調べてみて、以下の場所を変更したところ、思うような処理になりました。
    > 
    > Private Sub lstデータリスト_Click()
    > With lstデータリスト
    > lbl管理番号.Caption = .List(.ListIndex, 0)
    > txt商品名.Text = .List(.ListIndex, 1)
    > txt規格.Text = .List(.ListIndex, 2)
    > txt定価.Text = .List(.ListIndex, 3)
    
    解決できて何よりです。
    このコードが最初に動いていることを書いていただけたら・・・と思ったりしました。
    実際、このコートは無視していました。(;^_^A
    

引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Pass/

HOME HELP 新規作成 新着記事 ツリー表示 トピック表示 検索 過去ログ

- Child Tree -