2

次の手順を実行するプログラムを作成しようとしています。

  • セル M2 の場合、同じ行の列 M の前のすべてのセルの内容を確認します。
  • 同じ行の列 M の前のセルのいずれかが空の場合、ユーザーがセル M2 に値を入力できないようにします。RTher は、空のデータについてユーザーにメッセージを表示しました。
  • 欠損データのセル N2 にレポートを作成します (Excel の最初の行には、列に含まれるデータの見出しがあります)。

これまでに発生した問題: 不定ループ - コンテンツ ループのクリアが再びトリガーされたときに、この問題が発生していると思います

連結コードが良いかどうかはわかりません。

以下のプログラム:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$M$2" Then    
MsgBox "1"    
Call MyMacro    
End If    
End Sub


Sub MyMacro()

'If [OR(ISBLANK(A2:L2))] Then
If ISBLANK(A2) Then
MsgBox "2"
Range("N2").Select
ActiveCell.Value = N2.Value + A1.Value
'Range("M2").ClearContents
'MsgBox "3"

'this the message that pops up if any cell in the range is blank
End If

End Sub

早々にご回答いただきありがとうございます。...

4

2 に答える 2

1

このようなものは

  1. A2:L2whenM2が変更された場合の空白 (真の空白) のテスト
  2. が使用されEventsている場合、コードのリロードを避けるためにオフにしますN2
  3. これらの問題のあるセル範囲をN12空白にダンプします

コード

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
If Intersect(Target, Range("M2")) Is Nothing Then Exit Sub
With Application
.EnableEvents = False
On Error Resume Next
Set rng1 = Range("A2:L2").Cells.SpecialCells(xlBlanks)
On Error GoTo 0
If Not rng1 Is Nothing Then
MsgBox "blank cells in " & rng1.Address(0, 0), vbCritical, "User entry in M2 removed"   
[n2] = rng1.Address
[m2].Clear
End If
.EnableEvents = True
End With
End Sub
于 2012-11-08T03:49:53.173 に答える
1

マクロを使用しない別のオプションは、列 M でカスタム数式を使用してデータ検証を使用することです。

=counta(A2:L2)=12

およびカスタム エラー メッセージ「列 A から L のセルが空白です」。

もちろん、これは不足しているセルを提供しませんが、この配列数式を使用して最初のセルを取得できます (ctrl+Shift+enter で入力)。

=IFERROR(ADDRESS(ROW(),MATCH(TRUE,A2:L2="",0)),"")

于 2012-11-08T04:02:55.473 に答える