あなたの問題は最初の行です。Option Strict
それ以外の場合はまったくコンパイルされないため、プロジェクト(恥ずかしがり屋です!)がオフになっているようです。
Format(Now, "yyyyMMdd")
その方法でフォーマットされた現在の日付を文字列として生成します。Date
問題は、その出力(文字列)を変数に割り当てようとしていることです。オフになっているためOption Strict
、コンパイラはこの変換を暗黙的に示し、ランタイムは非標準の日付文字列を日付に変換しようとしています。これが失敗していることです。
コードをできるだけ変更しないでください。次のようになります。
Dim curDate As Date = Now.Date
Dim srDate As Date = DateTime.ParseExact(dr(6).ToString(), "yyyyMMDD", CultureInfo.InvariantCulture).Date
Dim M As Long = DateDiff(DateInterval.Weekday, curDate, srDate)
ステップ0:オプション制限をオンにする
このオプションをオフにして新しいコードを作成する必要がある理由はありません。コンパイル時に(このように)オフにすると簡単にキャッチされるランタイムエラーの可能性が多すぎます。これは、言語から完全に追放されるべき機能です。
ステップ1:標準の.NETタイプと機能を採用する
これは必須ではありませんが、他の開発者がコードを読みやすくし、他の開発者のコードが読みやすくなります。、、などFormat
はすべてVB固有の関数であり、主に従来のVB6アプリケーションを.NETに簡単に移植できるようにするために存在します。言語固有のバージョンを使用する特別な理由がない限り、代わりに標準の.NET関数を使用することをお勧めします。DateDiff
Now