Ну, я буду гадать здесь.
Во-первых, всегда старайтесь давать значимые имена вашим переменным. Это поможет прояснить ваши намерения.
Кроме того, не забудьте квалифицировать всех участников, например, Cells (), к которым вы обращаетесь. Это очень важно, так как это может изменить поведение вашей программы. Итак, я бы написал src.Cells (...) вместо просто Cells (....)
Вам не нужно выбирать рабочий лист для чтения / записи в него.
Используйте Option Explicit в начале ваших модулей. Таким образом, вам придется явно объявлять все ваши переменные и избегать некоторых распространенных ошибок, таких как неправильный ввод имени переменной.
Как я уже говорил, вы сохраняете изменения, но никогда не меняете исходную книгу.
Кроме того, вы выполняете некоторые алгебраические операции над строковыми значениями!
Итак, вот мое предположение:
Option Explicit
Private Sub validar()
Dim folha As Long ' sheet number
Dim src As Workbook ' a workbook from which alerts are being read
Dim lastRow As Long ' last row with content in a worksheet
Dim alertNum As Long ' Alert number being updated
Dim k As Long ' counter
Dim ref As String ' reference of the alert
Dim nac As Long ' nac ?
Dim npc As Long ' npc ?
Application.ScreenUpdating = False
On Error GoTo ErrHandler
folha = CLng(estadoform.Label1.Caption)
With ThisWorkbook.Worksheets(folha)
lastRow = .Range("A65536").End(xlUp).Row
alertNum = .Cells(lastRow, 6)
End With
' ABRIR EXCEL
Set src = Workbooks.Open("U:\Mecânica\Produção\OEE\OEE ( FULL LOG )\OEEalerta.xlsx", True, False)
With src.Sheets("alerta")
lastRow = .Range(" A10000").End(xlUp).Row
For k = 1 To lastRow
ref = .Cells(k, 2)
npc = .Cells(k, 4)
nac = .Cells(k, 5)
If ref = alertNum And (nac < npc) Then .Cells(k, 5) = nac + 1 ' update where the filter conditions are met
Next k
End With
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = False 'IT WORKS TO DISABLE ALERT PROMPT
'SAVES FILE USING THE VARIABLE BOOKNAME AS FILENAME
src.Save
Application.DisplayAlerts = True 'RESETS DISPLAY ALERTS
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE (since it has already been saved)
Set src = Nothing
End Sub