Wordのアウトラインをテキストへ
色々あってはてなへの書き込みペースが極端に落ちてしまいました。
久しぶりにマクロを公開したいと思います。
Wordで考えや各種整理ついていない項目をアウトラインで作ることがあります。しかし、不便なことに、これをそのままExcelへ持っていくことができないのです。
例えば、課題項目をアウトラインで思いつくままに作成し、それをカテゴリ毎に整理分類して頭を整理。その後、その項目をExcelへ持っていってToDoや工程の元にしたりするということをしたいのです。
ググってみたのですが、そのものずばりはない模様。似たものはありましたが、、、
結果、作ったのが次のちょんマクロです(word)。
固定名称のファイル(OutLinefile.txt)に階層構造に応じたタブをつけて出力します。
このファイルをExcelで取り込めばOK。
途中で改行があった場合も"でencodeして対応。→この場合は「アプリケーションから開く」でExcelを指定するという裏技が必要です。
Wordファイルの開き方によって、ファイルがMy Documentsにできたり、起動ディレクトリにできたりとしますが、、、 そこはまあ堅いことなしでということで。
見出し1〜9で記載することを前提に作ってあります。レベルがないものは、タブなしで出力されます。
Sub アウトラインのテキスト化() Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateFalse = 0 Dim fs, f, i, j, para Dim sNo As String, sSep As String, sStr As String Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("OutLinefile.txt", ForAppending, True, TristateFalse) For Each para In ActiveDocument.Sections(1).Range.Paragraphs j = para.Style.ListLevelNumber ' 箇条書き番号は、別なプロパティで取り出し sNo = para.Range.ListFormat.ListString ' かっこ付きなら文章はそのままつなげる If StrConv(Right(sNo, 1), vbNarrow) = ")" Then sSep = "" Else sSep = " " End If ' レベル分のタブを前に付ける → 階層にしないときは、vbtabを" "に変更 sStr = CleanChr(sNo & sSep & para.Range) If j >= 2 Then sStr = String(j - 1, vbTab) & sStr End If f.write sStr Next f.Close End Sub Function CleanChr(s As String) ' 改行(Shift-Enter)は、文字列上VerticalTabで入っているので、それを改行にする If InStr(1, s, vbVerticalTab, vbBinaryCompare) <> 0 Then s = """" & Replace(s, vbVerticalTab, vbCr, 1, -1, vbBinaryCompare) s = Left(s, Len(s) - 1) & """" & vbCrLf End If CleanChr = s End Function
今年はばっちりとホタル鑑賞
昨年に続き野生のホタルを見てきました。今年は結構な数いました。近くに降りてきて子供がしばらく追いかけしていました。お勧めです。
温暖化の影響でしょうか、昨年と同じ時期に行ったのですが、それほど寒くなかった。
データ
気をつけたいこと
- 長袖必須
昼は30度近くあっても、この時期夜は冷える。今回は、ウィンドブレーカーにて防備。 - 懐中電灯持参
道は暗くてほとんど見えず足元が不安。蛍生息地までは、ライトが必要。ただし、近くに行ったらすぐにライトは消しましょう。 - くつ
昨年はサンダルで失敗したので、今回はくつで快適でした。 - 公園内場所事前確認
昨年は遠回りで何とかたどり着いたのだが、今年はあっという間に到着。
公園内の場所はこちらの18番
ショートカットキーが遅い!
昨日から急にショートカットキーがものすごく遅くなる現象が出ています。
現象
電卓にCtrl+Alt+C, エディタにCtrl+Alt+Hを割り当ててているのだが、押してから何と5秒くらい経ってはじめて起動される。
詳細
以前のデスクトップの「テーマ」は、「Windowsクラシック(変更済)」だったが、一時的にテーマを変えるために保存した。別テーマで作業後、元のテーマを呼び出して使っていたのだが、、、
どうも自作のテーマを使うとショートカットキーが鬼のように遅くなるようです。
PIO病はあなどってはいけない
以前、PIO病のことを書きましたが、やはりディスクというものはある程度寿命があり、PIO病を発病した後は、非常に不安定になりました。
PIO病を治したと思ったのもつかの間、なんと一週間後には使っている最中にブルースクリーンになり、core(メモリダンプ)を吐き出しに・・・
吐き出しにあまりに時間がかかったので、途中で強制的に電源ボタンを押したところ、二度と立ち上がらなくなりました。
→ どうもブート辺りが壊れたようです。
近くのPCショップへ走り、内蔵ディスクを買ってきてひたすらリカバリをした週末でした。
フルバックアップは取っていなかったため、ツール類は一つずつネットからダウンロードして入れるはめになりました。
フルバックアップは大事ですね。
【教訓】バックアップは常日頃取る、PIO病が出たらそろそろディスクが危ない
PIO病
しばらく前に書いたパソコンが遅くなる件は、PIO病でした。
ハードディスクでエラーやタイムアウトが6回起きると、DMAモードからPIOモードという非常に遅いモードに勝手に変えられてしまうという病気。
勝手に変えられるのは少し困り物です。何か一言でいいからメッセージを出してくれればいいのに。たぶん、スタンバイモードでずっと使い続けていたせいと思われます。
Windows UPDATEを元に戻したら直ったのは、単にカウンタが元に戻っていたためと思われます。←未確認ですが。Windows UPDATEを元に戻した後でも遅くなってしまっていた。
結局、ドライバを削除するとともに、レジストリの一部(ResetErrorCountersOnSuccess)を書き換えて復旧しました。
PIO病は、結構ポピュラーな話みたいで、ググると結構たくさん出ますね。
中でも、下記が参考になると思います。
http://densen-sakana.at.webry.info/200511/article_25.html
http://hail2u.net/blog/software/transfer_modes_trouble.html
http://www.zechs-web.net/2005/10/07_130924.php
マイクロソフト公式
http://support.microsoft.com/default.aspx?scid=kb;ja;817472
PIO病判断のための具体的な表示
(2009/8/2追記)
PIO病を発病したときには、デバイスマネージャでドライバの状態を見るとディスクへのアクセスが、DMAモードからPIOモードに変わっています。
●Step1.コントロールパネル→システム→「ハードウェア」タブ→デバイスマネージャ→ディスクのプライマリIDEチャネルを見る
●Step2.詳細設定タブの「デバイス0」の「現在の転送モード」を見る
(下記は正常な場合)
●Step3.「現在の転送モード」に「DMA」という文字が入っていれば一先ず安心。もしPIOという文字があったならPIO病。
(画面のハードコピーが取れなかったので、無理にPIOにしてみた画面のハードコピーを添付)
(2009/8/2追記終了)
ちなみに今回のPIOが出るきっかけになったエラーは、次のもの。
ソース(S): atapi 分類(R):なし
種類(E):エラー イベントID(I):9
デバイス \Device\Ide\IdePort0 はタイムアウト期間内に応答しませんでした。
ディスクも少し調子悪くなっているかも。ちょっと様子見です。
もし、本当にディスクがまずいなら交換しなくては。。。
ディスクドライバの変遷(WindowsXP SP2、デバイスマネージャ上)
C:\Windows\system32\drivers\atapi.sys
モード | 日付 | version |
---|---|---|
PIO時 | 2001/7/1 | 5.1.2600.1106 |
ドライバ削除後のDMA時 | 2001/7/1 | 5.1.2600.2180 |
どうもドライバの実態は変わっていないのに、バージョンの最後の文字だけが変わっている雰囲気です。
●教訓