電子書籍の厳選無料作品が豊富!

VBA素人です。ネットから拾った見積書作成のエクセルファイルを使っております。
見積書作成し、見積書№を元に別シートへ登録して見積書を登録時、同じ見積書№だと上書きされるようになってます。
そこで、見積書№が同じものが登録済の場合、メッセージで「同じ№がありますが上書きしますか?」yes・noで上書き実行かキャンセルの処理を行えるようにしたいです。

見積書へ登録の処理はこちらのコードを使っております。
Sub 登録()
Dim myDCount As Long, myCount As Integer
Application.ScreenUpdating = False
With Worksheets("見積書一覧")
.Activate
myDCount = Worksheets("見積書一覧").Range("B1").CurrentRegion.Rows.Count 'データの最終行+1を取得
For j = 2 To myDCount + 1
If .Cells(j, 1).Value = Worksheets("見積書").Cells(3, "V").Value Then
myDCount = j
Exit For
End If
myDCount = j
Next j

.Cells(myDCount, "A").Value = Worksheets("見積書").Cells(3, "V").Value
.Cells(myDCount, "B").Value = Worksheets("見積書").Cells(4, "U").Value

.Cells(myDCount, "C").Value = Left(Worksheets("見積書").Cells(6, "E").Value, Len(Worksheets("見積書").Cells(6, "E").Value) - 3)
.Cells(myDCount, "D").Value = Right(Worksheets("見積書").Cells(7, "E").Value, Len(Worksheets("見積書").Cells(7, "E").Value))

.Cells(myDCount, "E").Value = Worksheets("見積書").Cells(20, "E").Value '見積内容
.Cells(myDCount, "F").Value = Worksheets("見積書").Cells(21, "E").Value

.Cells(myDCount, "G").Value = Worksheets("見積書").Cells(22, "E").Value
.Cells(myDCount, "H").Value = Worksheets("見積書").Cells(23, "E").Value
.Cells(myDCount, "I").Value = Worksheets("見積書").Cells(24, "E").Value

.Cells(myDCount, "J").Value = Worksheets("見積書").Cells(4, "AR").Value '受注オーダー

.Cells(myDCount, "K").Value = Worksheets("見積書").Cells(25, "E").Value '見積内容
.Cells(myDCount, "L").Value = Worksheets("見積書").Cells(26, "E").Value
.Cells(myDCount, "M").Value = Worksheets("見積書").Cells(27, "E").Value
.Cells(myDCount, "N").Value = Worksheets("見積書").Cells(28, "E").Value
.Cells(myDCount, "O").Value = Worksheets("見積書").Cells(29, "E").Value

.Cells(myDCount, "P").Value = Worksheets("見積書").Cells(21, "K").Value '図番

End With
Application.ScreenUpdating = True

Worksheets("見積書").Activate
End Sub

こちらのコードから処理を付け足すだけでいけるのか。またこのコードでおかしいところがありましたら、修正など教えて下さるとありがたいです。
親切な方よろしくお願いいたします。

「エクセルVBAで上書き時のみ確認の処理の」の質問画像

A 回答 (3件)

下のコードを適当な場所に挿入してください。


2行目あたりで問題ないと思います。

<参考コード>
Dim 見積書番号 As String
見積書番号 = Worksheets("見積書").Cells(3, "V")

If 見積書番号 = "" Then
MsgBox "見積書番号が入力されていません"
Exit Sub
End If

Dim 検索範囲 As Range
Set 検索範囲 = Worksheets("見積書一覧").Range("B1").CurrentRegion

If Not 検索範囲.Find(What:=見積書番号) Is Nothing Then
If MsgBox("同じ№がありますが上書きしますか?", vbYesNo) = vbNo Then Exit Sub
End If
    • good
    • 0
この回答へのお礼

ggrksdqn様。回答ありがとうございます。
私のやりたいことができました。

お礼日時:2020/11/29 13:16

下記のIF文の中に、Msgboxの表示と「No」が返答された場合のExit Subを書けば、概ねの要件は満たせると思います。



If .Cells(j, 1).Value = Worksheets("見積書").Cells(3, "V").Value Then
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2020/11/29 13:17

何がどう動いているのか理解しないものを


仕事で使うなんて 危険だと思いますが・・

悪意を持って コードに細工されたらどうしますか?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!