引用另一个工作表上的单元格时出错

时间:2016-02-28 19:12:31

标签: excel vba excel-vba

我有下面写的代码由于某种原因无效。问题在于使用位于工作表(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

1 个答案:

答案 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。 ......这有意义吗?