下のコードは文字列を生の文字コードに(マクロ暗号化)、生の文字コードを文字列に変換するコード(マクロ復号化)です。生の文字コードでは
ダメだというならば前回、書いたとおり「0~9、A~F」を適当な文字に
置換するコードを「マクロ暗号化」の最後に付け加えるという手もあります。
(その時には、マクロ「復号化」の頭にもとの文字に戻す処理を
加えて下さい)
'------------------------------------------------------------
Sub 暗号化()
Dim CharaCnt As Long
Dim i As Long
Dim MyExit As Integer
Dim NetCharaNum As Long
CharaCnt = Selection.Characters.Count
For i = 1 To CharaCnt
If (AscW(Mid(Selection.Text, i, 1)) > 30) Or (AscW(Mid(Selection.Text, i, 1)) < 0) Then NetCharaNum = NetCharaNum + 1
Next
For i = 1 To NetCharaNum
Selection.Collapse
Selection.MoveRight wdCharacter, 1, True
Selection.ToggleCharacterCode
Selection.Collapse wdCollapseEnd
Do While Selection.Text = Chr(9) Or Selection.Text = Chr(11) Or Selection.Text = Chr(13)
Selection.MoveRight wdCharacter, 1
MyExit = MyExit + 1
If MyExit > 20 Then Exit Sub
Loop
MyExit = 0
Next
End Sub
'------------------------------------------------------------
Sub 復号化()
Dim CharaCnt As Long
Dim i As Long
Dim MyExit As Integer
Dim NetCharaNum As Long
CharaCnt = Selection.Characters.Count
For i = 1 To CharaCnt
If AscW(Mid(Selection.Text, i, 1)) > 30 Then NetCharaNum = NetCharaNum + 1
Next
For i = 1 To NetCharaNum \ 4
Selection.Collapse
Selection.MoveRight wdCharacter, 4, True
Selection.ToggleCharacterCode
Selection.Collapse wdCollapseEnd
Do While Selection.Text = Chr(9) Or Selection.Text = Chr(11) Or Selection.Text = Chr(13)
Selection.MoveRight wdCharacter, 1
MyExit = MyExit + 1
If MyExit > 20 Then Exit Sub
Loop
MyExit = 0
Next
End Sub
暗号化した後の、文字コードの変換ですが・・・
例えば3と0を入れ替えたりするほうが面白いかな~
3を@に置換
0を3に置換
@を0に置換
・・・で文字列化・・・
これで訳のわからない文字列出現・・・
投稿情報: くまぷー | 2008年11 月30日 (日曜日) 午前 07時58分
質問1
なんで、選択範囲を対象にしてるのでしょうか?
文書全体を対象にすべきと思いますが?
質問2
MyExit = MyExit + 1
If MyExit > 20 Then Exit Sub
なんで、こんなエスケープが必要なんですか?
投稿情報: y sakuda | 2008年11 月30日 (日曜日) 午前 10時39分
sakudaさん、どもです。
質問1ですが、全部やろうとした時
図表なんかがあるとコケルからです。(^^ゞ
質問2ですが改行文字がある時にはカーソルをひとつ移動させているのですが、
文章末に行った時、それ以上カーソルを
進めることができず、Doループから
抜けられなくなってしまうからです。
うまく、「文章末までカーソルがきたら
Doループを抜ける」というコードが
書ければよかったのですが、わかりませんでした。
20回も改行文字が続いているような
Documentはなかろうという横着な発想です(^^ゞ
投稿情報: くまぷー | 2008年11 月30日 (日曜日) 午後 12時27分
>図表なんかがあるとコケルからです。(^^ゞ
アンカーがくっついてるとエラーになることは私も最初のトライ(これを使うと書かれた時すぐずっこけましたw)
>うまく、「文章末までカーソルがきたら
ContentsのRange.Endと現在SelectされているRange.Endを比較するとか?
投稿情報: y sakuda | 2008年11 月30日 (日曜日) 午後 07時25分
>ContentsのRange.Endと現在SelectされているRange.Endを比較するとか?
最初に思いついたのは、Selectionの中の
1.改行文字等を最初に数えておく。
2.Doループでカーソルを動かすついでに
改行文字等を数え、1.で数えた数と
一致したら、Doループを抜けるなんてので
ごまかそうと思いましたが、結局、横着してしまいました。
Range.EndとSelection..Endを比較するとか
そういう定石みたいなもんを全然知らんのです。
Excelの10分の1くらいでもWORD VBAの
書籍があれば・・・
本当に暗中模索です。
ToggleCharacterCodeなんてのも
偶然の発見です。
投稿情報: くまぷー | 2008年11 月30日 (日曜日) 午後 07時44分
私はWordVBAはMougで回答付けて覚えました
(本末転倒の極みw)
投稿情報: y sakuda | 2008年11 月30日 (日曜日) 午後 07時58分
>Mougで回答付けて覚えました
おいらには無理です。
Wordの一般機能も知らないものの方が
多いくらいです。
「Excelの10分の1くらいでもWORD VBAの書籍があれば・・・」と書きましたが
ホントのことをいうと資料の少ないものを
あれこれ試行錯誤しながら、やるほうが
楽しいです。攻略本を見ながらダンジョンを歩くよりも・・・手探りの方が面白いので・・・
・・・で気がついたら一太郎マクロや、三四郎マクロに
手を出していました(^^ゞ
投稿情報: くまぷー | 2008年11 月30日 (日曜日) 午後 08時16分
>Wordの一般機能も知らないものの方が多いくらいです。
×2です
ですから、ニュースグループでもMougでもWordプロパーでレス入れるのは、初歩的なものとトラブル専門ですwww
Wordの機能とVBAは別物です^^;
投稿情報: y sakuda | 2008年11 月30日 (日曜日) 午後 08時48分
>Wordの機能とVBAは別物です^^;
同感です。
投稿情報: くまぷー | 2008年11 月30日 (日曜日) 午後 08時57分