Se pretendermos obter um número sequencial, de cada vez que executarmos um procedimento, como no exemplo seguinte:
podemos utilizar o seguinte código:
Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long
‘—————————————————————————————
‘ Procedimento : Notifica
‘ Autor : JORGEROD
‘ Data : 29-08-2011
‘ Propósito : Obtém número sequencial de notificação
‘—————————————————————————————
‘
Sub Notifica()
Dim User As String
Dim Res As Long
Dim KBState(0 To 255) As Byte
Dim n As Long
Dim Pergunta As Integer
Res = GetKeyboardState(KBState(0))
KBState(&H14) = 1 ‘ 1 para "on", 0 para "off"
Do While User = ""
User = InputBox(Prompt:="Digite o seu nome e Enter para continuar", Title:="Nome")
If User = "vvvv" Then
Exit Sub
ElseIf User = "zzzz" Then
Sheets(2).Unprotect Password:="xxxx"
Sheets(2).Range("G:G").ClearContents
Sheets(2).Range("G1").Value = 0
Exit Sub
End If
Loop
Pergunta = MsgBox(Prompt:="Pretende obter NÚMERO de NOTIFICAÇÃO?" & vbCr & "Se responder OK, o número será gravado!!!", Buttons:=vbYesNo + vbQuestion, Title:="Notificação")
Select Case Pergunta
Case vbNo
Exit Sub
Case Else
Application.ScreenUpdating = False
Sheets(2).Unprotect Password:="xxxx"
n = Worksheets(2).Range("G:G").Cells.SpecialCells(xlCellTypeConstants).Count
Worksheets(2).Activate
Sheets(2).Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = n & " – " & UCase(User) & " – " & Date
Sheets(2).Protect Password:="xxxx", UserInterfaceOnly:=True
End Select
Worksheets(1).Activate
Sheets(1).Range("G20").Value = "O Nº da Notificação é:"
Application.ScreenUpdating = True
KBState(&H14) = 0 ‘ 1 para "on", 0 para "off"
Res = SetKeyboardState(KBState(0))
End Sub
E agora, na célula J20 da planilha "Notificações", poderemos colocar o seguinte: =ÍNDICE(Tabela!G:G; CONTAR.VAL(Tabela!G:G); 1)
O resultado é o que está à vista no exemplo.