'---------------------------------------------------------------
' ¿¹¹® ¹øÈ£ÀÇ ÀçÁ¤·Ä Renumber 1.33 (C) 2009-2012 T.Tanomura
'---------------------------------------------------------------
Sub Renumber()
Dim fn, en, wn, m1, m2, m3, m4, m5, z, tr, m, d, p, n, u
Dim map(999) As Integer
fn = False ' °¢ÁÖÀÇ ¿¹¹®¹øÈ£¸¦ ó¸®ÇÑ´Ù(True)/ÇÏÁö ¾Ê´Â´Ù((False)
en = False ' ¹®¸»°¢ÁÖÀÇ ¿¹¹®¹øÈ£¸¦ ó¸®ÇÑ´Ù((True)/ÇÏÁö ¾Ê´Â´Ù((False)
wn = True ' ¿¹¹® ¹øÈ£ÀÇ Áߺ¹À» °æ°íÇÑ´Ù(True)/ÇÏÁö ¾Ê´Â´Ù(False)
m1 = "ó¸®ÁßÀÔ´Ï´Ù..."
m2 = "󸮰¡ Á¾·áµÇ¾ú½À´Ï´Ù."
m3 = "Á¤ÀǵÇÁö ¾ÊÀº ¿¹¹® ¹øÈ£°¡ ÂüÁ¶µÇ¾î ÀÖ½À´Ï´Ù."
m4 = "¿¹¹® ¹øÈ£¿¡ Áߺ¹ÀÌ ÀÖ½À´Ï´Ù."
m5 = "°æ°í"
z = "¡Ú"
Application.StatusBar = m1
Application.ScreenUpdating = False
tr = ActiveDocument.TrackRevisions
ActiveDocument.TrackRevisions = False
With ActiveDocument
Erase map
m = 0
d = ""
For Each p In .Paragraphs
n = get_exnum(LTrimPlus(p.Range.Text))
If 0 < n Then
If map(n) = 0 Then
m = m + 1
map(n) = m
Else
If wn Then append_exnum d, map(n)
End If
End If
Next
u = ""
rewrite_exnum .Range, map, z, u, m1
If fn And 0 < .Footnotes.Count Then
rewrite_exnum .Footnotes(1).Range, map, z, u, m1
End If
If en And 0 < .Endnotes.Count Then
rewrite_exnum .Endnotes(1).Range, map, z, u, m1
End If
End With
ActiveDocument.TrackRevisions = tr
Application.ScreenUpdating = True
Application.ScreenRefresh
Application.StatusBar = m2
report_errors u, d, m3, m4, m5
End Sub
Function get_exnum(p)
Dim i
get_exnum = 0
If Left(p, 1) = "(" And Mid(p, 2, 1) <> "0" Then
i = 0
While is_a_digit(Mid(p, 2 + i, 1))
i = i + 1
Wend
If 1 <= i And i <= 3 Then get_exnum = Val(Mid(p, 2, i))
End If
End Function
Function is_a_digit(c)
is_a_digit = "0" <= c And c <= "9"
End Function
Function LTrimPlus(p)
LTrimPlus = LTrim(Replace(p, vbTab, " "))
End Function
Sub rewrite_exnum(r, map, z, u, m1)
Dim ls, n
r.SetRange 0, 0
With r.Find
ls = IIf(Application.International(wdListSeparator) = ";", ";", ",")
.Text = "\([0-9]{1" + ls + "4}"
.MatchWildcards = True
While .Execute
With .Parent
n = Val(Mid(.Text, 2))
If Mid(.Text, 2, 1) <> "0" And n < 1000 Then
If n <> map(n) Then
.SetRange .Start + 1, .End
If 0 < map(n) Then
.Text = CStr(map(n))
Else
.Text = z + CStr(n)
append_exnum u, n
End If
.SetRange .End, .End
End If
End If
End With
Wend
End With
End Sub
Sub append_exnum(ByRef s, n)
If s <> "" Then s = s + ", "
s = s + "(" + CStr(n) + ")"
End Sub
Sub report_errors(u, d, m3, m4, m5)
Dim s, e
s = " "
If u <> "" Then u = m3 + s + vbCr + u + s
If d <> "" Then d = m4 + s + vbCr + d + s
e = u + IIf(u <> "" And d <> "", vbCr + vbCr, "") + d
If e <> "" Then MsgBox e, , "Renumber - " + m5
End Sub