2016-02-28 48 views
0

我有下面写的代码,出于某种原因不起作用。问题在于使用位于工作表(2)上的信息的变量b的定义。该行之前的所有代码都很好。错误引用另一个工作表上的单元格

请注意,变量ind是全局变量,并且在此变量之前的前一个子变量上定义。

代码写在“This Workbook”选项卡上。

如果有人能分享一些问题可能会是很好的。

坦克很多。

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

试试这个:

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()指活动工作表,但在你的With块使用.Columns()会得到所有的Columns()为你使用With与板材。 ...那有意义吗?

+1

非常感谢:D。学过的知识。 – user2292821

相关问题