特定の列にデータがない場合、保存を停止するデータ検証が実行されています。しかし、それは動作していません。なぜ私は考えていない。コードは以下の通りです: 誰かが見てもらえると感謝しています。 また、紛失したデータセルをフィルタリングして色分けすると、簡単に識別できます。ありがとうございました!!!vbaで有効性確認を保存する前に
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.Worksheets("codes").Unprotect Password:="000"
Dim Rng As Range
Dim wb As Workbook
Dim MyWb As Worksheet
Dim i As Long
Dim lrow As Long
Const rowno = 8
Const colno = 1On Error GoTo exitHandler
Set Rng = Cells.SpecialCells(xlCellTypeAllValidation)
If Rng Is Nothing Then GoTo exitHandler
If Not Intersect(Target, Rng) Is Nothing Then
Else
Application.EnableEvents = False
Set wb = ActiveWorkbook
Set MyWb = ThisWorkbook.Worksheets("codes")
lrow = MyWb.Cells(Rows.Count, colno).End(xlUp).Row
Start = Cells(rowno, colno)
For i = 8 To lrow
If IsEmpty(MyWb.Range("A" & i)) Or IsEmpty(MyWb.Range("B" & i)) Or IsEmpty(MyWb.Range("E" & i)) Or IsEmpty(MyWb.Range("F" & i)) Or IsEmpty(MyWb.Range("G" & i)) Or IsEmpty(MyWb.Range("H" & i)) Or IsEmpty(MyWb.Range("J" & i)) Or IsEmpty(MyWb.Range("K" & i)) Or IsEmpty(MyWb.Range("L" & i)) Or IsEmpty(MyWb.Range("N" & i)) Or IsEmpty(MyWb.Range("O" & i)) Or IsEmpty(MyWb.Range("P" & i)) Or IsEmpty(MyWb.Range("R" & i)) Or IsEmpty(MyWb.Range("T" & i)) Or IsEmpty(MyWb.Range("U" & i)) Or IsEmpty(MyWb.Range("X" & i)) Then
Dim missdata
missdata = MsgBox("You will need to enter topics before saving", vbOKOnly, "Missing data")
Cancel = True
Exit For
End If
End If
End If
Next i '??????
exitHandler:
Application.EnableEvents = True
ThisWorkbook.Worksheets("codes").Protect Password:="000"
End Sub
あなたの問題は、あなたのコードが正しくフォーマットされていないということです。あなたの** 'If If Intersect(Target、Rng)Is Nothing Then'と' Rng Is Nothing Then GoTo exitHandler'はあなたの 'IF'条件の中にある' FOR'ループ内にあります。私はあなたがコンパイルエラーを表示していないことに驚いています。宣言されていない変数もあります。コードの先頭に 'Option Explicit'を追加してください。次に、IF条件が終了した場所を整理します。今のところフォーマットされているように、あなたのコードのほとんどは実行されません – Zac
私はあなたのコードをインデントして再フォーマットしようとしました! 'Next for'の前に余分な 'end if'文があるので 'for i = 8 to lrow'ループに問題があるようですか? – MiguelH
私が管理しているオープンソースのプロジェクト[** Rubberduck **](http://rubberduckvba.com)は、こうした問題を避けるためにコードを正しくインデントするのに役立ちます。それは、問題の唯一の説明として "それは機能していません"と質問することを避けてください。コンパイルエラーが発生している場合は、**エラーが何であるか、** IDEが不平を言っているところを**言うことは間違いなく良い考えです。 [mcve] –