質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1484閲覧

Excel エラーが出た場合のみ上書き保存しないVBA

tkyk.

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/12/28 14:20

お世話になります。
先日こちらで質問させていただいた内容で追加でお伺いしたいことがります。
下記VBAで転記先シートに自動転記出来ているのですがこの場合、上書き保存して自動でシートを閉じていますが
エラーが出た場合のみ上書き保存しないでシートも閉じないVBAにするにはどのようにすれば良いでしょうか。
ご教授いただければ幸いです。
よろしくお願い致します。

Dim aws As Worksheet Dim wb As Workbook Dim ws As Worksheet Dim lastRow As Long Set aws = ActiveSheet Set wb = Workbooks.Open(Filename:="C:\Users\tkyks\Desktop\data.xlsx") Set ws = wb.Worksheets(1) lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row If ws.Cells(lastRow, 1) <> "" Then lastRow = lastRow + 1 aws.Range("A2:C2").Copy ws.Cells(lastRow, 1) ws.Cells(lastRow, 1).PasteSpecial Paste:=xlPasteValues If Workbooks.Count > 1 Then ActiveWorkbook.Close SaveChanges:=True Else ActiveWorkbook.Save Application.Quit End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

イメージ説明
イメージに合わなかったら、無視してください。

投稿2020/12/29 06:33

syousuke.33

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkyk.

2020/12/29 08:14

syousuke.33さん コメントありがとうございます! 当方VBAの超初心者のためあまり理解できず申し訳ありません。 また質問させていただくかと思いますのでその際は宜しくお願い申し上げます。
guest

0

ベストアンサー

If Err.Number <> 0 Then
Exit Sub
End If
でエラーが出た時は何も処理はしないことになります。

http://officetanaka.net/excel/vba/tips/tips104.htm

投稿2020/12/28 21:47

Taka1108

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkyk.

2020/12/29 02:18

Taka1108さん ありがとうございます。 すみません。 私の記載が悪かったのですが、実はエラーではなく転記先シートで”重複しています”という メッセージが出た場合のみ何も処理をしないVBAを知りたかったです。 よろしくお願い致します。
Taka1108

2020/12/29 04:53

転送先シートのコピーする場所にデーターが有って上書き保存されたくないという意味でしょうか? それであれば、あらかじめコピー先にデーターが無いことを確認して、あれば終了とすればよいかと思います。lastRow = lastRow + 1の下に次のコードを入れてはどうでしょうか。 With ws Dim c As Range For Each c In .Range(.Cells(lastRow, 1), .Cells(lastRow, 3)) If c.Value <> "" Then MsgBox "重複のため終了します" wb.Close Exit Sub End If Next End With
tkyk.

2020/12/29 06:37

Taka1108さん コメントありがとうございます。 転記先のVBAは以下になります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range With Application Set Target = Intersect(Target, Range("A1:A10")) If Target Is Nothing Then End For Each r In Target If .CountIf(Range("A1:A10"), r) > 1 Then MsgBox "重複しています。", vbCritical .EnableEvents = False r.EntireRow.Delete .EnableEvents = True End If Next End With End Sub 上記のVBAの通り、A列に重複した値が転記元から転記されると「重複しています。」というメッセージが出て行ごと削除されます。 この「重複しています。」というメッセージが出た場合のみ上書き保存せずシートも閉じない方法を知りたいです。 最初に質問させいただいた転記元のVBAだと全て上書き保存されシートも閉じてしまいます。 私の説明が非常に分かりづらく申し訳ありません。 どうぞ宜しくお願い致します。
Taka1108

2020/12/29 07:34 編集

イベントプロシージャがあるのであれば、事前に重複するか否かを確認して、重複するのであればプロシージャーを止めるという方法になります。 lastRow = lastRow + 1の下に次のコードを入れてはどうでしょうか。 With ws For i = 1 To 10 If .Cells(i, 1) = aws.Range("A2") Then MsgBox "重複のため処理を中止します", vbCritical Exit Sub End If Next i End With
tkyk.

2020/12/29 08:08

Taka1108さん 何度もありがとうございます! 教えていただいたコードで無事出来ました。 本当に助かりました。感謝いたします。 また質問することがあるかと思いますが、その際は宜しくお願い申し上げます。
guest

0

「On Error GoTo」と「Exit Sub」|VBA入門

これで、エラーが出た場合の処理というものが書けます。
それで上書き保存しないでシートも閉じないコードを書きましょう

投稿2020/12/28 14:54

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkyk.

2020/12/29 02:19

y_waiwaiさん ありがとうございます! 大変勉強になります。 参考にさせていただきます。 また何か分からなかったらよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問