Você entendeu mal como os parâmetros da função UBound()
se destinam: o primeiro parâmetro é o nome da matriz, o segundo é a dimensão que você está observando.
O código correto seria:
Public Sub UpdateNamesPaid(NameValue As String, Paid As String)
Dim i As Long, j As Long
Dim NamesPaidSize As Long
Dim NamesPaid() As String
ReDim NamesPaid(0 To 0, 0 To 1)
NamesPaidSize = LBound(NamesPaid, 1) ' or whatever you meant...
NamesPaid(NamesPaidSize, 0) = NameValue
NamesPaid(NamesPaidSize, 1) = Paid
Dim TempArray() As String
ReDim TempArray(0 To NamesPaidSize, 0 To 1)
For i = LBound(NamesPaid, 1) To UBound(NamesPaid, 1)
For j = LBound(NamesPaid, 2) To UBound(NamesPaid, 2)
TempArray(i, j) = NamesPaid(i, j)
Next j
Next i
NamesPaidSize = NamesPaidSize + 1
ReDim NamesPaid(0 To NamesPaidSize, 0 To 1)
' NamesPaid = TempArray
For i = LBound(TempArray, 1) To UBound(TempArray, 1)
For j = LBound(TempArray, 2) To UBound(TempArray, 2)
NamesPaid(i, j) = TempArray(i, j)
Next j
Next i
End Sub
Esteja avisado que isso pode ser muito ineficiente para incrementos de 1. Você pode fazer a matriz inicial de tamanho 10, preencher isso, depois colocar na etapa de cópia e incrementar mais 10.