我有下面写的代码由于某种原因无效。问题在于使用位于工作表(2)上的信息的变量b的定义。该行之前的所有代码都很有效。
请注意,变量ind
是全局变量,并且在之前运行的子变量上定义。
代码写在"本工作手册"标签
如果有人可以就问题可能分享一些亮点,那将会很棒。
坦克很多。
Sub verifica() ' verifica e pinta a vermelho os casos mal atribuidos
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Dim n As Integer 'contador de incerências,
Dim n1 As Integer 'contador de casos de carga em falta
Dim n2 As Integer 'contador de casos de carga em excesso
ws1.Activate
'verifica incoerências nos coeficientes e nos casos de carga
n = 0
For i = 0 To ind
Range("Case1").Offset(i, 0).Select
p = 0
Do While ActiveCell.Value <> ""
If Range("Case1").Offset(i, p).Value <> ws2.Range("Case2").Offset(i, p).Value Then
Range("Case1").Offset(i, p).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
n = n + 1
End If
p = p + 1
Range("Case1").Offset(i, p).Select
Loop
Next i
'verifica para cada comb, se há casos de carga em em falta ou em excesso
n1 = 0
n2 = 0
For i = 1 To ind
a = Range(Range("Case1").Offset(i - 1, 0), Cells(Range("Case1").Offset(i - 1, 0).Row, Columns.Count).End(xlToLeft)).Count
With ws2
b = .Range(.Range("Case2").Offset(i - 1, 0), Cells(.Range("Case2").Offset(i - 1, 0).Row, Columns.Count).End(xlToLeft)).Count
End With
MsgBox b
If a > b Then
n1 = n1 + 1
ElseIf a < b Then
n2 = n2 + 1
End If
Next i
If n = 0 Then
MsgBox "Tudo OK!"
Else
MsgBox "Nº de incoerências: " & n
End If
Range("J2") = n
Range("P2") = n1
Range("V2") = n2
End Sub
答案 0 :(得分:1)
试试这个:
b = .Range(.Range("Case2").Offset(i - 1, 0), .Cells(.Range("Case2").Offset(i - 1, 0).Row, .Columns.Count).End(xlToLeft)).Count
你正在使用With
(耶!)但并没有将所有细胞完全连接起来(嘘!)。只需在.
和Cells()
之前添加Columns()
,您就应该做得很好。
如果没有这个,VBA可能会感到困惑,因为Columns()
指的是活动工作表,但在.Columns()
块中使用With
将获得该工作表的所有Columns()
你正在使用With
。 ......这有意义吗?