最大整数サイズが原因でオーバーフローが発生する可能性があります。通貨タイプは、実際には多数の場合に非常にうまく機能します (ただし、地域の問題には注意してください)。Int64 の議論については、以下の編集を参照してください。
IsNumericに関する MSDN のドキュメントによると:
IsNumeric は、Expression のデータ型が Boolean、Byte、Decimal、Double、Integer、Long、SByte、Short、Single、UInteger、ULong、または UShort であるか、これらの数値型のいずれかを含むオブジェクトである場合に True を返します。また、Expression が数値に正常に変換できる Char または String である場合も True を返します。
IsNumeric は、Expression がデータ型 Date またはデータ型 Object であり、数値型を含まない場合、False を返します。Expression が数値に変換できない Char または String の場合、IsNumeric は False を返します。
Type Mismatch が発生しているため、Double が変換を妨げている可能性があります。IsNumeric は、それが整数であることを保証するものではなく、数値の可能性の 1 つに一致することだけを保証します。数値が 2 倍の場合は、地域設定 (カンマとピリオドなど) が例外の原因である可能性があります。
double に変換してから整数に変換してみてください。
' Using a couple of steps
Dim iValue As Integer
Dim dValue As Double
dValue = CDbl(SourceValue)
iValue = CInt(iValue)
' Or in one step (might make debugging harder)
iValue = CInt(CDbl(SourceValue))
編集:明確にした後、オーバーフロー変換が発生しているようです。まず、CInt() の代わりに Long と CLng() を使用してみてください。ただし、エントリが Int64 である可能性はまだありますが、これは VB6 を使用するとより困難です。
LARGE_INTEGER および Integer8 型 (両方とも Int64) に次のコードを使用しましたが、状況によってはうまくいかない場合があります。
testValue = CCur((inputValue.HighPart * 2 ^ 32) + _
inputValue.LowPart) / CCur(-864000000000)
この例はLDAP パスワードの有効期限の例からのものですが、前述したように、シナリオで機能する場合と機能しない場合があります。LARGE_INTEGER タイプがない場合は、次のようになります。
Private Type LARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
詳細については、LARGE_INTEGER および VB6 を検索してください。
編集:デバッグの場合、エラー処理を一時的に回避し、問題のある行を通過した後に再度オンにすると便利な場合があります。
If IsNumeric(strMaxAlternatives) And strMaxAlternatives <> "" Then
On Error Resume Next
iGlobalMaxAlternatives = CInt(strMaxAlternatives)
If Err.Number <> 0 Then
Debug.Print "Conversion Error: " & strMaxAlternatives & _
" - " & Err.Description
EndIf
On Error Goto YourPreviousErrorHandler
End If