.
Hola, Jonathan
Si es lo que realmente quieres, la rutina está ok, pero tiene un error en la carga de la variable TotalF
Donde dice:
TotalA -TotalB = TotalF
debe decir:
TotalF = TotalA -TotalB
Quedando la rutina así:
Sub contarcolor()
Dim TotalA As Integer
Dim TotalB As Integer
Dim TotalF As Integer
Dim UR As Long
Dim Elcolor As String
Dim Textobus As String
Textobus = "RUT"
Elcolor = 13551615
UR = [A1048576].End(xlUp).Offset(1, 0).Row
Range(Cells(1, 1), Cells(UR, 1)).Select
For Each Celda In Selection
If Celda.Interior.Color = Elcolor Then
TotalA = TotalA + 1
End If
If Celda.Value = Textobus Then
TotalB = TotalB + 1
End If
Next Celda
TotalF = TotalA - TotalB '<<<<< AQUI estaba invertido
If TotalF <= 0 Then
MsgBox ("Sin registros duplicados")
Else
MsgBox ("Existen" & TotalF & "registros duplicados")
End If
End Sub
Como está programado, TotalA guarda todas las celdas que tengan ese color, independientemente de que digan RUT en ellas o no.
Del mismo modo, TotalB, cuenta todas las que digan RUT, independientemente del color que tengan.
De acuerdo a como yo lo había interpretado antes, armaba un único contador que sólo se incrementara si tenía el color indicado y NO decía RUT en esa celda. Pero entiendo que puedes estar necesitándolo de la otra manera.
Para que funcione para las hojas indicadas y cada vez que abras o cierres el archivo debes ir al Editor de VBA (atajo: Alt + F11) y busca la hoja que dice "ThisWorkbook" (o "EsteLibro" según la versión").
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call contarcolor
End Sub
Private Sub Workbook_Open()
Call contarcolor
End Sub
Sub contarcolor()
Dim TotalA As Integer
Dim TotalB As Integer
Dim TotalF As Integer
Dim UR As Long
Dim Elcolor As String
Dim Textobus As String
Application.ScreenUpdating = False
Textobus = "RUT"
Elcolor = 13551615
EnHojas = Array("hoja 1", "hoja 2", "hoja 3", "hoja 4") ' lista de hojas a considerar
HojVue = ActiveSheet.Name
For Each Hoj In Sheets()
For HojaAct = 0 To UBound(EnHojas)
If UCase(Hoj.Name) = UCase(EnHojas(HojaAct)) Then
Hoj.Select
UR = [A1048576].End(xlUp).Offset(1, 0).Row
Range(Cells(1, 1), Cells(UR, 1)).Select
For Each Celda In Selection
If Celda.Interior.Color = Elcolor Then
TotalA = TotalA + 1
End If
If Celda.Value = Textobus Then
TotalB = TotalB + 1
End If
Next Celda
End If
Next
Next
TotalF = TotalA - TotalB
If TotalF <= 0 Then
MsgBox ("Sin registros duplicados")
Else
MsgBox ("Existen" & TotalF & "registros duplicados")
End If
End Sub
Desde luego, al considerar las hojas indicadas TotalF acumula las coincidencias de todas ellas.
Bien, amigo, creo que con esto cubres todo lo que pedías. En tal caso, recuerda valorizar esta respuesta.
Muy buen fin de semana.
Fernando
.