« 暗号化・復号化(3) | メイン | 暗号化・復号化(5) »

2008年11 月29日 (土曜日)

コメント

y sakuda

別にWordでやってもやることは同じでは?
パラグラフ単位に取り出して、改行コードを無視するようにして、以下同文・・・

くまぷー

>別にWordでやってもやることは同じでは?

同じではなかった・・・
Excelでは書式情報がセルに残っているがワードでは・・・

ちなみにおいらのコード(その1)・・・

Sub 暗号化X()
Dim i As Integer
Dim j As Integer
Dim Mojisu As Long
Dim DanrakuNum As Long
Dim MyFont As String
Dim Moji As String
Dim CodeNum As Long
Dim Bun As String




Set R = Selection.Range
MyFont = R.Font.Name
DanrakuNum = R.Paragraphs.Count

Mojisu = R.Characters.Count

str = R.Text

Bun = ""
For i = 1 To Mojisu
Moji = Mid(str, i, 1)
CodeNum = AscW(Moji)
Moji = ChrW(CodeNum * -1)

Bun = Bun + Moji
Next
Selection.TypeText Bun
End Sub

くまぷー

上のコードでは書式情報が失われてしまうんです(T.T)

文字サイズも、文字の色も、
センタリングなどの文字位置も・・・

Excelだったら、セルに書式情報が残っているのに・・・( iдi ) ハウー

くまぷー

でもね、何とかあがいて手は見つけました・・・( ̄^ ̄)

y sakuda

なるほど、パラグラフフォーマットなんかが消えちゃいますね。
ただ、こんな簡単なのでは、部分書式に対応できませんね。
また、テキストボックスなんかはStoryRangeコレクションでまわせば良いのですが、アンカーが付いているパラグラフが変更されるとアンカーもろともテキストボックスが消えちゃいますねw

くまぷー

>テキストボックスなんかは

そんなもの凄いところまで
面倒みようとは思ってはいないのですが
wordは手強いです。

・・・で、次の「暗号化・復号化(5)」を
ご覧下さい。m(__)m

y sakuda

とりあえず、Alignment、パラグラフ全体のサイズ、色のみ対応
Sub aaa()
Dim wPara As Paragraph, wText As String, wNText As String, I As Long, J As Long
Dim wFormat As Long
With ThisDocument.Content
 For J = .Paragraphs.Count To 1 Step -1
  Set wPara = .Paragraphs(J)
  wText = wPara.Range.Text
  wNText = ""
  For I = 1 To Len(wText)
   wCode = AscW(Mid(wText, I, 1))
   If Abs(wCode) 1 Then
    wFormat = wPara.Range.ParagraphFormat.Alignment
    With wPara.Range
     .Text = wNText
      .ParagraphFormat.Alignment = wFormat
    End With
  End If
 Next
End With
End Sub

フォントタイプはハングルに変わったとこで替えられちゃう^^;

くまぷー

さっそく、参加して頂きありがとうございます。

>If Abs(wCode) 1 Then

ここのところはどうなっていますか?
エラーになってしまいます。

y sakuda

>If Abs(wCode) 1 Then
ありゃ、半角の不等号が消えちゃってますね。

If Abs(wCode)<15 Then

です。
つまり、FFやらCR,LFは変換しないという意味です。

y sakuda

少し変えて部分書式にも対応しました。
(文字列の途中でフォントサイズや色が変わっていても保存されます)

Sub bbb()
Dim wPara As Paragraph, I As Long, J As Long, N As Long, P As Long
Dim wCode As Long
With ThisDocument.Content
For J = .Paragraphs.Count To 1 Step -1
Set wPara = .Paragraphs(J)
With wPara.Range
N = Len(.Text)
P = .Start
For I = N To 1 Step -1
wCode = AscW(Mid(.Text, I, 1))
If Abs(wCode) > 14 Then
ThisDocument.Range(P + I - 1, P + I).Text = ChrW(wCode * -1)
End If
Next
End With
Next
End With
End Sub

面倒なので、インデント直すのやめました。
悪しからず。

くまぷー

>If Abs(wCode)<15 Then

上記の通りにして試してみましたが
「End Withに対応するWithがありません」と
怒られてしまいます。
よく見てみるとForループが2つあるのに
Nextが一つしかないようですが・・・

くまぷー

あ、上のコメントはaaaに対してのものです。
早速、bbbを試してみます。

y sakuda

もう一箇所不等号使ってましたwww
全部再掲します。失礼しました。
Sub aaa()
Dim wPara As Paragraph, wText As String, wNText As String, I As Long, J As Long
Dim wFormat As Long, wCode As Long
With ThisDocument.Content
For J = .Paragraphs.Count To 1 Step -1
Set wPara = .Paragraphs(J)
wText = wPara.Range.Text
wNText = ""
For I = 1 To Len(wText)
wCode = AscW(Mid(wText, I, 1))
If Abs(wCode) < 15 Then
wNText = wNText & ChrW(wCode)
Else
wNText = wNText & ChrW(wCode * (-1))
End If
Next
If Len(wNText) >1 Then
wFormat = wPara.Range.ParagraphFormat.Alignment
With wPara.Range
.Text = wNText
.ParagraphFormat.Alignment = wFormat
End With
End If
Next
End With
End Sub

くまぷー

サンプルを2つも作って頂き、ありがとうございます。
早速、aaa、bbbともに実行してみました。
aaaはbbbに比べると超速ですね。

aaaがまとめて書き込むのに対して
bbbは一文字ずつ書き込んでいるのですね。でも色とサイズは保存されるのに
どうして事態は保存されないのだろう?
不思議だ(?_?)

y sakuda

>どうして事態は保存されないのだろう?
結局暗号化した代物がハングルなんで、フォント変えざる得ないんじゃないでしょうか?
それにしても、やはり、どうやってもレンジをいじるとアンカーつぶれちゃうな・・・・
なんとかしたいんですが^^;

くまぷー

>結局暗号化した代物がハングルなんで

なるほど・・・ 下の文章で実験してみました。

「なるほど、パラグラフフォーマットなんかが消えちゃいますね。

ただ、こんな簡単なのでは、部分書式に対応できませんね。
また、テキストボックスなんかはStoryRangeコレクションでまわせば良いのですが、アンカーが付いているパラグラフが変更されるとアンカーもろともテキストボックスが消えちゃいますねw」

bbbを実行してもハングルにならない文字が
いくつかありますが、その文字に関しては
字体がちゃんと保存されますね。

くまぷー

>アンカーつぶれちゃうな・・・・
なんとかしたいんですが^^;

それができたらもう完璧ですね!!

y sakuda

しかしねーー
WordVBAで遊んでても誰も寄ってこないとオモフ・・・・・
MougのWordVBAの板でも回答者が少ないと言うより、質問者自体が極めて少数www

くまぷー

>WordVBAで遊んでても誰も寄ってこないとオモフ・・・・・

(;゚゚)ウッ!
そ、それを言っては・・・

くまぷー

>>WordVBAで遊んでても誰も寄ってこないとオモフ・・・・・

でも、おいらは必要もないのに
一太郎マクロとか
三四郎マクロに
手を染めてしまった男・・・
http://kumapooh2007.hp.infoseek.co.jp/Taro_Macro_01.html
http://kumapooh.justblog.jp/blog/2007/04/post_29ec.html

コメントの確認

コメントのプレビュー

プレビュー中です。コメントはまだ投稿されていません。

処理中...
コメントを投稿できませんでした。エラー:
コメントを投稿しました。 さらにコメントを投稿する

入力された文字と数字は画像と一致していません。再度入力してください。

最後に、下の画像の中に見える文字と数字を入力してください。これはプログラムを使ってコメントを自動的に投稿するのを防ぐために行われています。

画像を読み取れない場合は 別の画像を表示してください。

処理中...

コメントを投稿

アカウント情報

(名前は必須です。メールアドレスは公開されません。)

2024年8 月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

TOP メニュー