'--------------------------------------------------
'プロシージャの概要:
'処理名:detectコメント部分
'概要:コード行にコメント部分が含まれるか判定
'strCode:判定対象のコード文字列
'戻り値:コメントが含まれる場合True
'--------------------------------------------------
Public Function detectコメント部分(ByVal strCode As String) As Boolean
Dim binInString As Boolean
Dim strChar As String
Dim intI As Integer
binInString = False
'ダブルクオートで囲まれた文字列内かどうかを判定しながら解析
For intI = 1 To Len(strCode)
strChar = Mid(strCode, intI, 1)
'ダブルクオートの処理
If strChar = """" Then
'エスケープされたダブルクオート("")かチェック
If intI < Len(strCode) And Mid(strCode, intI + 1, 1) = """" Then
intI = intI + 1 'エスケープされたダブルクオートをスキップ
Else
binInString = Not binInString '文字列リテラルの開始/終了を切り替え
End If
'シングルクオートの処理(文字列外の場合のみコメント開始と判定)
ElseIf strChar = "'" And Not binInString Then
detectコメント部分 = True
Exit Function
End If
Next intI
detectコメント部分 = False
End Function
'--------------------------------------------------
'プロシージャの概要:
'処理名:markコメント含有レコード
'概要:コメントを含むレコードにチェックを入れる
'--------------------------------------------------
Public Sub markコメント含有レコード()
Dim dbsCurrent As DAO.Database
Dim rsCode As DAO.Recordset
Dim strSQL As String
Set dbsCurrent = CurrentDb()
'初期化:全てのフラグをFalseに設定
strSQL = "UPDATE tCode SET [コード内コメントあり] = False"
dbsCurrent.Execute strSQL
'tCodeテーブルの全レコードを取得
strSQL = "SELECT TrimCode, [コード内コメントあり] FROM tCode"
Set rsCode = dbsCurrent.OpenRecordset(strSQL, dbOpenDynaset)
'全レコードを処理
With rsCode
Do Until .EOF
'コメントが含まれているかチェック
If detectコメント部分(!TrimCode) Then
.Edit
![コード内コメントあり] = True
.Update
End If
.MoveNext
Loop
.Close
End With
Set rsCode = Nothing
Set dbsCurrent = Nothing
End Sub