ここから本文です

エクセルのVBAについて教えてください。

sak********さん

2018/8/1616:16:52

エクセルのVBAについて教えてください。

現在、ユーザーフォームを作成し、テキストボックス1(日付)リストボックス1(アイテム)
テキストボックス2(数量)を入力して、コマンドボタン(シートへ書き出し)をクリックした
時の処理を記述しました。

まずは、入力した値を入庫記録のシートへ書き出ししたいので入庫記録をアクティブにしました。
そのあと、TextBox1をA列の最後尾に、ListBox1の値をB列の最後尾、TextBox2の値をC列の
最後に入力できるようにしたつもりですが、End Withでデバックになってしまいます。
どうしたら、良いでしょうか?教えてください。

Private Sub CommandButton2_Click()

Sheets("入庫記録").Activate

Dim LastRow As Long

LastRow = Range("A" & Rows.Count).End(xlUp).Row
Range("A" & LastRow + 1).Value = TextBox1.Value
TextBox1.Value = ""
End With

LastRow = Range("B" & Rows.Count).End(xlUp).Row
Range("A" & LastRow + 1).Value = ListBox1.Value
ListBox1.Value = ""
End With

LastRow = Range("A" & Rows.Count).End(xlUp).Row
Range("A" & LastRow + 1).Value = TextBox2.Value
TextBox2.Value = ""
End With


End Sub

閲覧数:
41
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

vcx********さん

2018/8/1616:35:57

With と End With はセットで同じ数あるべきものです。
With が無いのに End With が3つもあるのでエラーになります。

あと、転記するデータが空だった場合に列毎の最終行がバラバラになりますので、A列、B列、A列(C列の間違いでしょう)の最終行をそれぞれ求めるやり方はおススメ出来ません。以下はA列で最終行を判断して、それを他の列でも使うようにしてます。

Private Sub CommandButton2_Click()
Dim LastRow As Long

With Sheets("入庫記録")

    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    
    .Range("A" & LastRow + 1).Value = TextBox1.Value
    .Range("B" & LastRow + 1).Value = ListBox1.Value
    .Range("C" & LastRow + 1).Value = TextBox2.Value
    
    TextBox1.Value = ""
    ListBox1.Value = ""
    TextBox2.Value = ""

End With

End Sub

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

chieomoさん

2018/8/1619:44:21

Dim LastRow As Long

With Sheets("入庫記録")
LastRow = .Range("A" & Rows.Count).End(xlUp).Row
中略
End Withは最後の一つでいいです。

Rangeの前にドット(.)が必要です。
ドットを付けなければWithした意味がありません。
With Sheets("入庫記録")
End with
と囲むとその中はSheets("入庫記録")を省略していいけどSheets("入庫記録")以降はドットから記載してねってことです。ドットを記載しないとそのときに有効なシートのセル指定とかになります。

ちなみにWithもEnd Withもなくて動くと思いますが、あった方が安心ですね。

プロフィール画像

カテゴリマスター

banbantoukouさん

2018/8/1618:57:43

WithステートメントはWith~End Withで1セットです。
次のような感じでどうでしょう。


Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Dim LastRow As Long
Set Ws = ThisWorkbook.Worksheets("入庫記録")
With Ws
LastRow = .Range("A" & Rows.Count).End(xlUp).Row
With .Range("A" & LastRow)
.Offset(1).Value = Me.TextBox1.Text '日付
.Offset(1, 1).Value = Me.ListBox1.Value 'アイテム
.Offset(1, 2).Value = Me.TextBox2.Text '数量
End With
End With
Me.TextBox1.Text = ""
Me.ListBox1.ListIndex = -1
Me.TextBox2.Text = ""
End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる