none
WIn7 + vb6 で DateAddを使用すると実行時エラー5 RRS feed

  • 質問

  • Windows7にvb6(SP6)をインストールしました。

    WinXPでは、 DateAdd関数でエラーが出ていませんでしたが、

    Win7で実行すると DateAdd関数で

    実行時エラー5

    プロセジャーの呼出し、又は引数が不正です。

    のエラーがでてしまいます。

    この現象について情報はありますか? 対策は?

     

    2010年8月3日 2:27

回答

すべての返信

  • 以下のコードで確認してみましたが、私のところではエラーは発生しませんでした。
    (Windows7 に最初から入っている VB のランタイム上で確認しました。)
    (補足追記:Windows7 には VB6 の開発環境は入れていないので、別 OS で作成した exe ファイルを Windows7 で実行しました。)

    Dim d As Date
    d = DateSerial(2010, 8, 3)

    d = DateAdd("yyyy", 1, d)
    d = DateAdd("q", 1, d)
    d = DateAdd("m", 1, d)
    d = DateAdd("y", 1, d)
    d = DateAdd("d", 1, d)
    d = DateAdd("w", 1, d)
    d = DateAdd("ww", 1, d)
    d = DateAdd("h", 1, d)
    d = DateAdd("n", 1, d)
    d = DateAdd("s", 1, d)

    OS の日付書式の設定による問題かと考えたのですが、その場合は別のエラーメッセージが表示されますので、そうではないですね。
    どのようなコード(引数値)でエラーが発生するのでしょうか?

    • 編集済み TH01 2010年8月3日 4:54 補足の追記
    2010年8月3日 4:46
  • TH01さん ありがとうございます。 

        For Counter = 1 To 6
            Command1(Counter).Caption = DateAdd("d", Counter, Date)
        Next

    のようなコードです!!

     

    2010年8月3日 4:58
  • TH01さんへ

    ちなみに、コンパイル後のEXEベースではエラーは発生しません。

    ディバッグでのインタプリタ実行でエラー発生します。

    2010年8月3日 5:02
  • exe ではエラーにならないのですね。
    VB6 の IDE は Windows7 ではサポートされていませんので、
    何か問題があってもどうしようもないかもしれないです。

    Windows Vista®、 Windows Server 2008®、および Windows 7 における
    Visual Basic 6.0 のサポートについて
    http://msdn.microsoft.com/ja-jp/vbasic/cc707268.aspx

    • 回答の候補に設定 山本春海 2010年8月20日 7:00
    • 回答としてマーク 山本春海 2010年8月30日 7:13
    2010年8月3日 5:25
  • TH01さん ありがとうございます。 

        For Counter = 1 To 6
            Command1(Counter).Caption = DateAdd("d", Counter, Date)
        Next

    のようなコードです!!


    ボタン3つと実行ボタン1つ置いて試しましたが、普通にデバッグできました。
    他に原因がなさそうですか?

    【環境】
    OS:Microsoft Windows 7 Ulitimate x64 [Version 6.1.7600]
    VS:Visual Basic 6(SP6)

    【検証したフォーム】form1.frm

    VERSION 5.00
    Begin VB.Form Form1 
     Caption   = "Form1"
     ClientHeight = 3030
     ClientLeft  = 120
     ClientTop  = 450
     ClientWidth  = 4560
     LinkTopic  = "Form1"
     ScaleHeight  = 3030
     ScaleWidth  = 4560
     StartUpPosition = 3 'Windows の既定値
     Begin VB.CommandButton Command2 
      Caption   = "実行"
      Height   = 615
      Left   = 3120
      TabIndex  = 3
      Top    = 1080
      Width   = 1455
     End
     Begin VB.CommandButton Command1 
      Caption   = "Command1"
      Height   = 495
      Index   = 2
      Left   = 120
      TabIndex  = 2
      Top    = 1680
      Width   = 1695
     End
     Begin VB.CommandButton Command1 
      Caption   = "Command1"
      Height   = 495
      Index   = 1
      Left   = 120
      TabIndex  = 1
      Top    = 1080
      Width   = 1695
     End
     Begin VB.CommandButton Command1 
      Caption   = "Command1"
      Height   = 495
      Index   = 0
      Left   = 120
      TabIndex  = 0
      Top    = 480
      Width   = 1695
     End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Private Sub Command2_Click()
     For i = 1 To Command1.Count - 1
     Command1(i).Caption = DateAdd("d", i, Date)
     Next
    End Sub
    
    2010年8月4日 3:51
  • 環境のせいにするのは少し安易すぎたと後で思っていました。
    私の返信に書きましたコードを新規に作成したプロジェクトで記述し、すけさんの環境でデバッグ実行した場合、エラーが発生するかどうかも気になります。
    それだと正常動作する場合は、他に原因があるのかもしれないですね。

    2010年8月4日 4:23
  • ボタン3つと実行ボタン1つ置いて試しましたが、普通にデバッグできました。
    他に原因がなさそうですか?


    最小コードで実行しても、やはり同様のエラーが発生しますか?
    名前がぶつかったりしていませんか?真面目に型変換しても同様の結果ですか?

     Private Sub Command2_Click()
    Dim Counter As Integer
    For Counter = 1 To Command1.Count - 1
        Command1(Counter).Caption = CStr(DateAdd("d", Counter, DateTime.Date()))
    Next

    End Sub

    2010年8月5日 1:32
  • Chukiさんへ

    何度もお気遣いいただき、ありがとうございます!!

    ボタン3つ+実行ボタンで新規に作成 AND 真面目に型変換

    でも同様の結果でした。

     

    2010年8月5日 2:16
  • ボタン3つ+実行ボタンで新規に作成 AND 真面目に型変換

    でも同様の結果でした。

    参照がおかしかったり、名前がぶつかっていたりすると、以下のようにすれば大丈夫だと思うのですが、
    残念ながら、こちらでは同様の現象を確認できませんでしたorz
    TH01さんの最初の返信内にあるコードでもやはり同様のエラーがでますか?

     Command1(Counter).Caption = CStr(VBA.DateTime.DateAdd("d", Counter, VBA.DateTime.Date()))

    2010年8月5日 5:10
  • TH01さんのコード

    Dim d As Date
    d = DateSerial(2010, 8, 3)

    d = DateAdd("yyyy", 1, d)
    d = DateAdd("q", 1, d)
    d = DateAdd("m", 1, d)
    d = DateAdd("y", 1, d)
    d = DateAdd("d", 1, d)
    d = DateAdd("w", 1, d)
    d = DateAdd("ww", 1, d)
    d = DateAdd("h", 1, d)
    d = DateAdd("n", 1, d)
    d = DateAdd("s", 1, d)

     

    d = DateAdd("yyyy", 1, d)だけはエラーでませんでした。

    以外は、全てエラーです。

     

     

     

     

    2010年8月11日 8:17
  • 検証お疲れ様です。

    結果からすると、VBA(MSVBVM60.DLL)が壊れているようにも思います。
    ランタイムは更新パックなどで更新できるので、入れてみられてはいかがでしょうか

    「Windows Vista<sup>®</sup>、 Windows Server 2008<sup>®</sup>、および Windows 7 における Visual Basic 6.0 のサポートについて」http://msdn.microsoft.com/ja-jp/vbasic/cc707268.aspx

    • 回答の候補に設定 山本春海 2010年8月20日 7:00
    • 回答としてマーク 山本春海 2010年8月30日 7:13
    2010年8月11日 9:28
  • 私の場合、「Microsoft Visual Basic 6.0」を[互換モード]で実行していたためにこの[DateAdd関数エラー]が発生していました。

    なのでプロパティから[互換モードでこのプログラムを実行する]のチェックを外すとエラーが発生しないようになりました。

    2016年7月27日 9:01