Code:
Public Function PasswordGenerator(ByVal lngLength As Long) _
  As String

        On Error GoTo Err_Proc
        Dim strResult As String

        Dim iChr As Integer
        Dim c As Long

        Dim iAsc As String



        For c = 1 To lngLength

            ' Randomly decide what set of ASCII chars we will use
            iAsc = Int(3 * Rnd() + 1)

            'Randomly pick a char from the random set
            Select Case iAsc
                Case 1
                    iChr = Int((Asc("Z") - Asc("A") + 1) * Rnd() + Asc("A"))
                Case 2
                    iChr = Int((Asc("z") - Asc("a") + 1) * Rnd() + Asc("a"))
                Case 3
                    iChr = Str((Asc(" ") - Asc("@") + 1) * Rnd() + Asc("@"))
                Case 3
                    iChr = Asc((Asc("9") - Asc("0") + 1) * Rnd() + Asc("0"))
                Case Else
                    Err.Raise(20000, , "PasswordGenerator has a problem.")
            End Select

            strResult = strResult & Chr(iChr)

        Next c

        PasswordGenerator = strResult

Exit_Proc:
        Exit Function

Err_Proc:
        MsgBox(Err.Number & ": " & Err.Description, _
           vbOKOnly + vbCritical)
        PasswordGenerator = vbNullString
        Resume Exit_Proc

    End Function