Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

タイトルRe^3: プログラムのコメント削除
記事No: 10598
投稿日: 2007/10/27(Sat) 01:01
投稿者: taro
> Access の非公開関数の中に、SaveAsText と LoadFromText というメソッドがあるそうです。

ありがとうございます。
ざっと試してみましたが、全てのフォームとレポートをテキスト化して、正規表現で
処理した後に元に戻せそうです。

もとより、VBEの操作には慣れず、複雑なコードを書くときはテキスト化してEmacsで
書くということをしておりましたので、通常のコーディングにも使えそうです。

(フォームのデザイン部もテキスト化されているので、そちらも変更してみましたが、
これは読み込めませんでした。)


別件でご提示いただいた方も大変参考になります。
即、使えるというわけでは無さそうですが、時間を見てコードを解析してみたいです。


現在のところ前者で処理することになりそうですが、もうしばらく情報をお待ちしたいと
思います。

タイトルRe^4: プログラムのコメント削除
記事No: 10603
投稿日: 2007/10/29(Mon) 13:51
投稿者: 小僧
taro さん、みなさま:
こんにちは。

適当な標準モジュールを1つ作り、
下記のコードを記載して実行されてみて下さい。
(かならず元ファイルのバックアップは取っておいて下さいね。)

Option Compare Database
Option Explicit

Sub コメント削除()
'要参照 Microsoft Visual Basic For Applications Extensibility x.x

Dim MyComp As VBComponent
Dim ActiveModuleName As String
Dim strLine As String
Dim i As Long
Dim KaigyoFLG As Boolean

ActiveModuleName = VBE.ActiveCodePane.CodeModule.Name

With VBE.ActiveVBProject
For Each MyComp In .VBComponents
If MyComp.Name <> ActiveModuleName Then
With MyComp.CodeModule
For i = 1 To .CountOfLines
strLine = .Lines(i, 1)
If CheckComment(strLine, KaigyoFLG) Then
.ReplaceLine i, Nz(strLine, "")
End If
Next i
End With
End If
Next
End With

MsgBox "終了!"

End Sub

Function CheckComment(strLine As String, FLG As Boolean) As Boolean
Dim i As Long
Dim SingleFLG As Boolean
Dim DoubleFLG As Boolean
Dim buf As String

If FLG Then
buf = ""
Else
For i = 1 To Len(strLine)
Select Case Mid(strLine, i, 1)
Case Chr(34)
DoubleFLG = Not DoubleFLG

Case Chr(39)
If DoubleFLG = False Then
SingleFLG = Not SingleFLG
End If
Case Else
End Select

If SingleFLG = False Then
buf = buf & Mid(strLine, i, 1)
End If
Next
End If

If strLine <> buf Then
FLG = (Right(strLine, 1) = "_")
strLine = buf
CheckComment = True
Else
FLG = False
End If
End Function


コメントの条件として
・ダブルクォートに囲まれたシングルクォートは無視する
・コメント行の最後に改行コードがあった場合は、
 次の行もコメントとみなす

ぐらいしか判断していない為、
考慮漏れがある可能性は充分にあります。



> 正規表現で処理した後に元に戻せそうです

AccessVBA でも正規表現は使えるのですが、
当方の技術不足のため、1文字ずつ精査しております。

(パターンマッチング1発の方法が見つからず、
2回に分けてやると置換ができないため…)


ざっとコードを組んだだけですのでエラー等が出る可能性は多々ありますが
(当方のPCに入ってるAccessファイルを10個程試して検証はしました)
こういったやり方もある、程度のご参考にして下さい。



※VBEの記述をVBEから書き換えるコードはあまり推奨されません。
 (悪意のあるプログラムが書けてしまうため)
 今回は「できる」「できない」といった可能性を示す為に記載してみましたが
 あまりこういった事はツール化しない方が望ましいかと思われます。

タイトルRe^5: プログラムのコメント削除
記事No: 10605
投稿日: 2007/10/29(Mon) 19:18
投稿者: taro
すごい!
思わず笑ってしまうほどでした。

ただ、多重化(?)されたコメントを取りこぼす様です。
'a 'b 'c 'd 'e
 ↓
'b 'd

実例だと、
Dim iCount as Integer '○○の数
を、行ごとコメント化した場合や、
strName = "さっちゃん" 'さっちゃんはね'サチコ'ていうんだほんとうはね。
sql="(略) Where f1='東京都'"  ''大阪府'だったっけ?
などで奇数目のコメントを取りこぼす様です。

この点については、(コードの効率的には最善とはいえないかもしれませんが)安易な改善策として
If 〜 EndIf を、While〜Wend
に変えることによって対処できそうです。

以上、すばらしいコードを有難うございました。

タイトルRe^4: プログラムのコメント削除
記事No: 10604
投稿日: 2007/10/29(Mon) 19:06
投稿者: taro
LoadFromTextを使う方法では、
・フォームの"説明プロパティ"が無くなる。
・load出来ないフォームがある。
 (おそらくMsysObjectsにクエリが登録される類のフォーム。)
などの注意点がある様です。(前者はむしろ利点か?)

その他、loadに時間がかかることや、処理後のファイルサイズの肥大化などもあまり好ましくはないですが、
速度を求める必要はさほどなく、後者も後で最適化すればいいので、これらはたいした問題ではなさそうです。

また、正規表現で云々と簡単そうに書いてしまいましたが、こちらも結構面倒そうです。
もしかすると、簡単な構文解析が必要かもしれません。

以上、とりあえず現状で気づいた点をご報告します。

ともあれ、有用な情報を有難うございました。

タイトルRe: プログラムのコメント削除
記事No: 10710
投稿日: 2007/11/25(Sun) 10:57
投稿者: taro
遅くなりましたがCloseします。
ありがとうございました。

[前頁]

このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

cPanel と PLESKをインストールした専用・共有レンタルサーバーを銀行振込でご提供中。契約書は一切不要です。
cPanel や PLESKをインストールした専用・共有レンタルサーバー
まずは1ヶ月から...。
日本国内の銀行振込がOK、契約書は不要です。

 

ページの先頭へ 前ページへ戻る