中間処理で審査官が提示した引例が、妥当なものであるかの判定ソフトを作成しております。
そのソフトでは、米国特許法第102条(b)でひかれた引例が、出願人の米国への特許出願日前1年より前に、公知となったものかどうかを判定します。
そのときの判断に使う基準日の算出のために書いてみました。
●工夫
入力する日付の書式を間違えると、再度入力画面(inputbox)が表示されるようにしました。
実際に入力できる書式はいろいろとありまして、今年の年月であれば「6/27」と入力するだけで、「2009/6/27」を意味するようになります。
また、「09/6/27」でも大丈夫です。
「98/6/27」であれば、「1998/6/27」と判断されます。
このあたりのルールは、ワード任せであり、パソコンの時計と連動しているように思います。
年末(たとえば、2008/12/20)に、「1/1」と入れると、2008/1/1ではなくて、2009/1/1に間違えられたりしたように記憶しています。
あいまいですみません。
●個別説明
40行から90行で、inputboxを使って日付を入力するコードが書かれています。
なぜ、わざわざvariant形式のデータ変数(varDate)を使って入力をさせて、その後、date形式のデータ変数(myfileD)に入力して変更した理由を説明します。
date形式のものにinputboxでデータを入力すると、キャンセルボタンを押したときにdate形式のデータ変数に""が入力されてしまいます。
つまり何もない状態です。
そうすると、date形式のデータ変数にあわない(想定していない文字列)であるために、その時点でエラーが発生してしまいます。
よって、キャンセルしたいのに、エラー発生(エラーコード13)と判定されてしまうわけです。
エラーは、2005/5/5/5のように、日付が誤入力された場合にも同じエラーコード13が発信されます。
よって、キャンセルボタンが押されたことを、日付のご入力から正確に区別するためには、inputboxで受ける変数のデータ形式がdateであると都合が悪いわけです。
そういう理由から、以下のような長いコードになったわけです。
これは経験則でやっているだけで、別の書き方もあるんじゃないかなと思っていますが、とりあえず今はこういう書き方にしています。
●質問(どなたかご存じの方、教えてください。)
2回続けて日付の入力書式を間違えると、エラーが表示されます(30行と40行の間にある「ErrReturn:」にコントロールが戻ってくれません)。
理由がわかる方、教えてください。
●プログラム
しかし、やたら長いですね。
もっと短くできるはず。しかし、私みたいに、短く書くすべを知らなくても、なんとかプログラムが機能してほしい結果が得られてしまうところがいいですね。
パソコンの能力が高いので、多少面倒な遠回りの処理をしても、体感速度は全く変わりませんからね。
Sub グレースピリオド()
Dim varDate As Variant
Dim myfileD As Date '本願US出願日
Dim gracePDY As Integer '本願US出願1年前の年
Dim gracePDM As Integer '本願US出願1年前の月
Dim gracePDD As Integer '本願US出願1年前の日
Dim gracePD As Date '本願US出願1年前の日付
Dim Message As String
Dim Title As String
10 On Error GoTo グレースピリオド_Error
20 Title = "US引例の判定"
30 Message = "本願のUS出願日を入力してください。" & vbCr _
& "書式: 2009/6/27"
ErrReturn:
40 varDate = InputBox(Message, Title)
50 If varDate = "" Then
60 End
70 Else
80 myfileD = varDate
90 End If
100 gracePDY = Year(myfileD) - 1
110 gracePDM = Month(myfileD)
120 gracePDM = Day(myfileD)
130 gracePD = gracePDY & "/" & gracePDM & "/" & gracePDM
140 MSGBOX "グレースピリオドの基準日は" & gracePD & "です。"
150 On Error GoTo 0
160 Exit Sub
グレースピリオド_Error:
170 If Err = 13 Then
180 GoTo ErrReturn
190 Else
200 MSGBOX "エラーが発生しましたので終了します。"
210 End If
End Sub
最近のコメント