« ダブルスペースの誤記をシングルスペースにするマクロ | トップページ | ワードマクロ本(これ、特におすすめです。) »

2009年6月27日 (土)

一年前の日付を表示:米国特許法第102条(b)に関連して

中間処理で審査官が提示した引例が、妥当なものであるかの判定ソフトを作成しております。

そのソフトでは、米国特許法第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

|

« ダブルスペースの誤記をシングルスペースにするマクロ | トップページ | ワードマクロ本(これ、特におすすめです。) »

マクロプログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/45469630

この記事へのトラックバック一覧です: 一年前の日付を表示:米国特許法第102条(b)に関連して:

« ダブルスペースの誤記をシングルスペースにするマクロ | トップページ | ワードマクロ本(これ、特におすすめです。) »