0

バリアント配列 (2 次元) を取り、それを通過してすべての日付を long に変更する関数を作成しようとしています。

Private Function mlDateHelper(a As Variant)
    Dim i, j As Integer
    For i = 1 To UBound(a.value, 1)
        For j = 1 To UBound(a.value, 2)
            If IsDate(a(i, j)) Then
                a(i, j) = CLng(a(i, j)) 'This line errors out
            End If
        Next j
    Next i
    mlDateHelper = a
End Function

基本的に、私は両方の次元で配列を反復処理しているだけで、日付があるときはいつでもその日付を long にリセットしようとしています。

デバッグしていると、 が正しく計算されていることがわかりCLng(a(i, j))ますが、その値を a(i, j) に代入しようとするとクラッシュします。

「アプリケーション定義またはオブジェクト定義のエラー」が表示されます。考え?ご協力いただきありがとうございます!

4

3 に答える 3

0

MS-Access 2007 VBA を使用して、Access ではコンパイルされないため、UBound ステートメントから .value を削除してこれをテストしました。これが私と同じように機能することを願っています (Dim arr(1 To 5, 1 To 7) として定義された配列を次の関数に渡す割り当てに問題はありませんでした:

Private Function mlDateHelper(a As Variant)
    Dim i, j As Integer
    For i = 1 To UBound(a, 1)
        For j = 1 To UBound(a, 2)
            If IsDate(a(i, j)) Then
                a(i, j) = CLng(a(i, j)) 'This line errors out
            End If
        Next j
    Next i
    mlDateHelper = a
End Function
于 2013-04-04T18:57:16.543 に答える
0

私の質問を調べてくれた人に感謝します。

a.Value2日付を日付に変換しようとしない Variantのプロパティを単純に使用できるため、この関数は必要ないことが実際にわかりました。

ドキュメントによると、「このプロパティと Value プロパティの唯一の違いは、Value2 プロパティが Currency および Date データ型を使用しないことです。これらのデータ型でフォーマットされた値を浮動小数点数として返すには、ダブルデータ型。

でも助けてくれてありがとう!

于 2013-04-04T19:02:57.720 に答える