作(zuò)者:韓建偉
親愛的小夥伴,大(dà)家有沒有被專利申請(qǐng)文件(jiàn)的補正所煩惱,本文通過使用宏可(kě)以檢查出一種會導緻補正出現的情況。我呢(ne),隻是一個專利代理(lǐ)人(rén),所以文中涉及的代碼隻是供小夥伴們參考,還(hái)有很多需要改進的地方,大(dà)家共同研究,共同進步。
Word中的宏在哪裡(lǐ)?
在WPS中,點擊"開發工(gōng)具",點擊VB編輯器,将本文中的代碼(完整代碼在文章(zhāng)的最後)拷貝到編輯器中,點擊保存。
在Word中,點擊開發工(gōng)具中的"Visual Basic",在打開的窗(chuāng)口左欄依次點擊"Normal""Microsoft Word 對象""ThisDocument",就(jiù)可(kě)以在右側出現空白(bái)窗(chuāng)口,将文中的代碼拷貝到空白(bái)處即可(kě),點擊保存。如(rú)果沒有"開發工(gōng)具"則打開"Word選項",在"常用"一欄中将"在功能區顯示開發工(gōng)具"選中,點擊确定即可(kě)。
下圖是WPS的圖:
關閉VB編輯器,點開宏。
發現多了一個"PIC",驚不驚喜?
選擇"PIC",點擊"運行"即可(kě)。
那麽,這個宏是做什麽用的呢(ne)?
我分(fēn)析了一些補正,發現有相(xiàng)當一部分(fēn)的補正是具體(tǐ)實施例中出現了某個圖,但(dàn)是附圖說(shuō)明書(shū)中沒有。例如(rú),具體(tǐ)實施方式中出現了"圖5",但(dàn)是,附圖說(shuō)明中并沒有"圖5"。這個宏就(jiù)是用來(lái)提示具體(tǐ)實施方式中出現了哪些圖在附圖說(shuō)明中沒有的。
原理(lǐ)是什麽?
我簡單介紹一下代碼中的邏輯,抛磚引玉,希望大(dà)家寫出更好的代碼,改正我代碼中一些傻乎乎的地方。
SearchStr1 = "具體(tǐ)實施方式"
SearchStr2 = "附圖說(shuō)明"
For i = 1 To ActiveDocument.Paragraphs.Count
If (InStr(ActiveDocument.Paragraphs(i).Range.Text, SearchStr1) = 0) Then
Else
SslNum = i
Exit For
End If
Next i
For是一個循環,ActiveDocument.Paragraphs.Count是當前文檔中一共有多少個段落,For循環從(cóng)第一段落開始找,直到找到包括SearchStr1的第一段落,SearchStr1是什麽?就(jiù)是"具體(tǐ)實施方式"。說(shuō)簡單點,這段代碼就(jiù)是找到第一個包括"具體(tǐ)實施方式"這幾個字的段落是第幾段,SslNum就(jiù)記錄了這個段落。
For j = 1 To ActiveDocument.Paragraphs.Count
If (InStr(ActiveDocument.Paragraphs(j).Range.Text, SearchStr2) = 0) Then
Else
FtsmNum = j
Exit For
End If
Next j
同理(lǐ),這個段落是爲了找到第一個包括"附圖說(shuō)明"這幾個字的段落是第幾段,FtsmNum就(jiù)記錄了這個段落。
For k = (FtsmNum + 1) To (SslNum - 1)
Ftsm = Ftsm + ActiveDocument.Paragraphs(k).Range.Text
Next k
這一段同樣做了一個循環,把"附圖說(shuō)明"和"具體(tǐ)實施方式"之間的每個段落中的文字都(dōu)賦值給Ftsm。
For g = (SslNum + 1) To ActiveDocument.Paragraphs.Count
Ssl = Ssl + ActiveDocument.Paragraphs(g).Range.Text
Next g
同理(lǐ),這一段把"具體(tǐ)實施方式"到文尾的每個段落中的文字都(dōu)賦值給Ssl。
也就(jiù)是說(shuō),上述兩段把"附圖說(shuō)明"和"具體(tǐ)實施方式"中的文字都(dōu)拷貝到了兩個變量中(這似乎看(kàn)起來(lái)效率并不是很高的做法)。
下面到了關鍵部分(fēn),這部分(fēn)的内容的核心思想是找到具體(tǐ)實施方式中的"圖"字,找到"圖"字之後,找到該字後面的一個到兩個字。
例如(rú),這段話(huà):"需要說(shuō)明的是,本發明的說(shuō)明書(shū)和權利要求書(shū)及上述附圖中的術(shù)語"第一"、"第二"等是用于區别類似的對象,而不必用于描述特定的順序或先後次序。例如(rú),圖1中的第一以及圖2中的第二。應該理(lǐ)解這樣使用的數據在适當情況下可(kě)以互換,以便這裡(lǐ)描述的本發明的實施例能夠以除了在這裡(lǐ)圖示或描述的那些以外的順序實施"。
下面的代碼就(jiù)是隻要找到這段文字中的"圖"字,然後再向後查找1個或2個字符。這段代碼中找的内容是"圖中""圖1""圖2""圖示"以及"圖中的""圖1中""圖2中""圖示或"。找到這個文字之後,判斷哪些是圖的名字,判斷方式很簡單,"圖"字後面第一個字是數字就(jiù)是圖的名字,例如(rú),圖1和圖2,并且,後面第一個字是數字以及後面第二個是字符的也是圖的名字,例如(rú),圖1b。
找到這些圖的名字之後,去(qù)"附圖說(shuō)明"中找這些圖的名字,沒有找到就(jiù)提示。
好,現在看(kàn)代碼:
For r = 1 To 60 /*做一個循環,我估計(jì)具體(tǐ)實施方式中不會有超過60個圖的名字,所以就(jiù)用60,如(rú)果嫌少就(jiù)用100,當然,也可(kě)以通過一個函數讀(dú)取一個究竟有多個少圖字,大(dà)家可(kě)以改一下*/
p = InStr(Ssl, "圖") /*找圖字*/
If Val(Mid(Ssl, p + 1, 1)) > 0 Then/*根據圖字後面是不是有數字判斷是不是圖的名字*/
TuNum1 = Mid(Ssl, p, 2)
TuNum2 = Mid(Ssl, p, 3)
If InStr(Ftsm, TuNum1) = 0 Then/*在附圖說(shuō)明中查找兩字的圖的名字,例如(rú):圖1、圖2等*/
MsgBox "具體(tǐ)實施方式中"" & TuNum1 & ""在附圖說(shuō)明中沒有"/*沒有找到就(jiù)提示*/
End If
If InStr(Ftsm, TuNum2) = 0 And (Val(Mid(Ssl, p + 2, 1)) > 0 Or (Asc(Mid(Ssl, p + 2, 1)) > 64 And Asc(Mid(Ssl, p + 2, 1)) < 123)) Then/*在附圖說(shuō)明中查找三個字的圖的名字,例如(rú):圖1a、圖2b等*/
MsgBox "具體(tǐ)實施方式中"" & TuNum2 & ""在附圖說(shuō)明中沒有"/*沒有找到就(jiù)提示*/
End If
End If
Ssl = Mid(Ssl, (p + 1), (Len(Ssl) - p - 1)) /*找下一個圖字*/
Next r
/*爲了容錯還(hái)可(kě)以加上p是否大(dà)于0的判斷*/
上述代碼中/**/中的内容是注釋。
同理(lǐ),也可(kě)以檢查附圖說(shuō)明中有的圖号在具體(tǐ)實施方式中沒有的。需要說(shuō)明的是,在一些舊版本機(jī)器上運行速度可(kě)能會稍微慢(màn)一點。
通過上述宏可(kě)以查找一些簡單的錯誤,大(dà)家也可(kě)以編寫一些查找其他(tā)錯誤的代碼,一起來(lái)消滅補正!
附完整代碼如(rú)下:
Sub PIC()
Dim SearchStr1
Dim SearchStr2
Dim SslNum
Dim FtsmNum
Dim Ftsm
Dim Ssl
Dim p
Dim TuNum1
Dim TuNum2
SearchStr1 = "具體(tǐ)實施方式"
SearchStr2 = "附圖說(shuō)明"
For i = 1 To ActiveDocument.Paragraphs.Count
If (InStr(ActiveDocument.Paragraphs(i).Range.Text, SearchStr1) = 0) Then
Else
SslNum = i
Exit For
End If
Next i
For j = 1 To ActiveDocument.Paragraphs.Count
If (InStr(ActiveDocument.Paragraphs(j).Range.Text, SearchStr2) = 0) Then
Else
FtsmNum = j
Exit For
End If
Next j
For k = (FtsmNum + 1) To (SslNum - 1)
Ftsm = Ftsm + ActiveDocument.Paragraphs(k).Range.Text
Next k
For g = (SslNum + 1) To ActiveDocument.Paragraphs.Count
Ssl = Ssl + ActiveDocument.Paragraphs(g).Range.Text
Next g
For r = 1 To 100
p = InStr(Ssl, "圖")
If p > 0 Then
If Val(Mid(Ssl, p + 1, 1)) > 0 Then
TuNum1 = Mid(Ssl, p, 2)
TuNum2 = Mid(Ssl, p, 3)
If InStr(Ftsm, TuNum1) = 0 Then
MsgBox "具體(tǐ)實施方式中" & TuNum1 & "在附圖說(shuō)明中沒有"
End If
If Len(Ssl) >= (p + 2) Then
If InStr(Ftsm, TuNum2) = 0 And (Val(Mid(Ssl, p + 2, 1)) > 0 Or (Asc(Mid(Ssl, p + 2, 1)) > 44 And Asc(Mid(Ssl, p + 2, 1)) < 123)) Then
MsgBox "具體(tǐ)實施方式中 " & TuNum2 & " 在附圖說(shuō)明中沒有"
End If
End If
End If
If (Len(Ssl) - p - 1) >= 0 Then
Ssl = Mid(Ssl, (p + 1), (Len(Ssl) - p))
End If
'MsgBox Ssl
Else: Exit For
End If
Next r
Dim Ssl1
Dim Ftsm1
For a = (FtsmNum + 1) To (SslNum - 1)
Ftsm1 = Ftsm1 + ActiveDocument.Paragraphs(a).Range.Text
Next a
For b = (SslNum + 1) To ActiveDocument.Paragraphs.Count
Ssl1 = Ssl1 + ActiveDocument.Paragraphs(b).Range.Text
Next b
'MsgBox Ssl1
'MsgBox Ftsm1
For x = 1 To 100
y = InStr(Ftsm1, "圖")
'MsgBox y
If y > 0 Then
If Val(Mid(Ftsm1, y + 1, 1)) > 0 Then
TuNum11 = Mid(Ftsm1, y, 2)
TuNum22 = Mid(Ftsm1, y, 3)
If InStr(Ssl1, TuNum11) = 0 Then
MsgBox "附圖說(shuō)明中的" & TuNum11 & "在具體(tǐ)實施方式中沒有"
End If
If InStr(Ssl1, TuNum11) > 0 And (Asc(Mid(Ssl1, InStr(Ssl1, TuNum11) + 2, 1)) > 47 And Asc(Mid(Ssl1, InStr(Ssl1, TuNum11) + 2, 1)) < 58) Then
MsgBox "附圖說(shuō)明中的" & TuNum11 & "在具體(tǐ)實施方式中沒有"
End If
If Len(Ftsm1) >= (y + 2) Then
If InStr(Ssl1, TuNum22) = 0 And (Val(Mid(Ftsm1, y + 2, 1)) > 0 Or (Asc(Mid(Ftsm1, y + 2, 1)) > 44 And Asc(Mid(Ftsm1, y + 2, 1)) < 123)) Then
MsgBox "附圖說(shuō)明中的 " & TuNum22 & " 在具體(tǐ)實施方式中沒有"
End If
End If
End If
If (Len(Ftsm1) - y - 1) >= 0 Then
Ftsm1 = Mid(Ftsm1, (y + 1), (Len(Ftsm1) - y))
End If
Else: Exit For
End If
Next x
MsgBox "未檢查出其他(tā)錯誤,檢查完畢! 韓一星出品!"
End Sub