めも

パスワードを思い出したので、メモ再開

Excel x64の場合のエラー

このプロジェクトのコードは、64 ビット システムで使用するために更新する必要があります。Declare ステートメントの確認および更新を行い、次に Declare ステートメントに PtrSafe 属性を設定してください。

Officeのx64と x86VBAマクロに非互換があるなんて知らなかった。

#If Win64 Then
  ' 64Bit 版
  Private Declare PtrSafe Function GetPrivateProfileInt _
      Lib "kernel32" Alias "GetPrivateProfileIntA" _
      (ByVal lpApplicationName As String, _
       ByVal lpKeyName As String, _
       ByVal nDefault As Long, _
       ByVal lpFileName As String) As Long
#Else
  ' 32Bit 版
  Private Declare Function GetPrivateProfileInt _
      Lib "kernel32" Alias "GetPrivateProfileIntA" _
      (ByVal lpApplicationName As String, _
       ByVal lpKeyName As String, _
       ByVal nDefault As Long, _
       ByVal lpFileName As String) As Long
#End If

※DeclareをDeclare PtrSafeにするだけ。


追記
サンプルが悪かった。
引数も非互換があった。
ポインタはLongからLongPtrに、ハンドルはLongからlonglongへ変更する必要あり。
docs.microsoft.com
www.saka-en.com

momo7w Windows 10 バージョン1903(May 2019 Update)

WindowsUpdateがずっと失敗してたので、調査したら1809に失敗してた。
内部ストレージを4Gちょっと空ける必要あるようで、SDカードだけではダメな模様。
ディスククリーンナップを行っても2.4Gくらい空きが足りなかったので、以下のことを実施。

  • Windows10の最新版isoをダウンロード

Windows10のダウンロードページでツールをダウンロード。
ツールを実行してisoファイルをダウンロードして、SDメモリへ保存。
最新は1903だった。

powercfg /h off

1.仮想メモリをCドライブからSDメモリのドライブへ移動【失敗】
仮想メモリの設定で、SDカードの方に仮想メモリを移したところ、
起動時にドライブが認識できてないらしく、結局Cドライブに作成されてしまった。


2.仮想メモリを止める【失敗】
仮想メモリの設定で「ページングファイルなし」を選択。
再起動後に動作が不安定になり、更新アシスタントが起動しなかった。

3.仮想メモリを小さくする【成功】
仮想メモリをカスタムにして、最少16、最大512にする。

  • アップデート実行

isoイメージを仮想DVDとしてマウント。
ルートフォルダにある「setup.exe」を実行。
空き容量確認で弾かれなければOK。


3時間たってもアップデートが終わらないので放置して就寝。
朝にはアップデートが終わってた。
仮想メモリをシステム管理サイズに戻して、ハイバネーションをonにして終了。
特に問題は出てない。そろそろ寿命がくるかもしれないが。
softether入れて、VPNサーバとして常時稼動中
・radikool入れて、ラジオ録音機として常時稼動中

複数のMS-WordのドキュメントをPDFへ変換する

結論としては、pdfにしてからまとめればいいことにする。
まとめるのはスクリプトじゃできないから、個々にpdf化するスクリプトに変更した。
PDFにするのに変更履歴とかコメントが不要だったので、それも潰した。

本当は結合までしたかったけど、VBScriptでのやり方が分からない。
iTextSharpとpowershell使えばできるんだが、、、COMじゃないとVBSから呼べないし。
結局、pdfをまとめるのは、CubePDF Pageを使った。
自動化したかったらPDFtkを使えばいいし。

Option Explicit

' 検索対象ファイル拡張子
Dim targetFileExp
targetFileExp = Array("doc", "docx")

Dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")

Dim objWord
Set objWord = CreateObject("Word.Application")

Dim objDoc
Dim objView
Dim strInFile
Dim strOutFile

' 一応見せておく
objWord.Visible = True

' カレントディレクトリのファイルリストから抽出する
Dim exp
Dim file

For Each exp in targetFileExp
    For Each file In objFso.GetFolder("./").Files
        if UCase(objFso.GetExtensionName(file)) = UCase(exp) Then
            strInFile = file.path
            strOutFile = objFso.BuildPath( file.ParentFolder , objFso.GetBaseName(file.Name) & ".pdf" )

            WScript.Echo "PDF変換:" & file.Name

            Set objDoc = objWord.Documents.Open(strInFile)
            If Err.Number = 0 Then
                ' 変更履歴マージ
                objDoc.Revisions.AcceptAll
                ' 変更履歴オフ
                Set objView = objWord.ActiveDocument.ActiveWindow.View 
                objView.RevisionsView = 0               ' 0:wdRevisionsViewFinal
                objView.ShowRevisionsAndComments = False

                'PDF形式で保存
                objDoc.SaveAs2 strOutFile, 17           ' 17:PDF
                objDoc.Close
            Else
                WScript.Echo "エラー:" & Err.Description
            end if
        End If
    Next
Next

objWord.Quit

set objFso = Nothing
set objDoc = Nothing
set objWord = Nothing

MsgBox "終了"

はてな記法シンタックスハイライトにVBScriptが無いので、vbで表示

複数のMS-Wordのドキュメントを1つにまとめる

たくさんあるMS-Wordのドキュメントを1つにまとめたくてスクリプト作ってみた。
でもいまいちだな。
セクション単位で追加してるけど、印刷設定は元のドキュメントを引き継いでくれないから、
常に先頭の印刷書式に依存してしまう。
全部同じなら使えそうなので、一応メモしておく。
(エラーとはか考えてない)

Option Explicit

' 検索対象ファイル拡張子
Dim targetFileExp
targetFileExp = Array("doc", "docx")

Dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")

Dim objWord
Set objWord = CreateObject("Word.Application")

Dim objNewDoc
Dim strInFile
Dim strOutFile

dim objSelection

' 一応見せておく
objWord.Visible = True

' カレントディレクトリのファイルリストから抽出する
Dim exp
Dim file

For Each exp in targetFileExp
    For Each file In objFso.GetFolder("./").Files
        if UCase(objFso.GetExtensionName(file)) = UCase(exp) Then
            strInFile = file.path
            If strOutFile = "" Then
                ' 親フォルダ名を結合ファイル名に
                strOutFile = objFso.BuildPath( file.ParentFolder , objFso.GetFileName(file.Name) & "_ALL." & objFso.GetExtensionName(file) )
                WScript.Echo "doc結合:" & strOutFile
                'Set objNewDoc = objWord.Documents.Add                      ' 新規の場合はこっち
                Set objNewDoc = objWord.Documents.Open(strInFile)           ' 先頭の書式に合わせる場合はこっち
                Set objSelection = objWord.Selection
            Else
                WScript.Echo "  +:" & file.Name

                objSelection.InsertFile(strInFile)
                objSelection.InsertParagraphAfter
                objSelection.InsertBreak(2)             ' 2:wdSectionBreakNextPage
                objSelection.Collapse(0)
            End if

        End If
    Next
Next

objSelection.WholeStory() 
objSelection.Fields.Update()

objNewDoc.SaveAs2 strOutFile
objNewDoc.Close

objWord.Quit

set objFso = Nothing
set objNewDoc = Nothing
set objWord = Nothing

MsgBox "終了"

はてな記法シンタックスハイライトにVBScriptが無いので、vbで表示

SSPIを使ったSSL/TSLのソース

www.geocities.jp

nPOPukSSPIj、nPOPukのクライアント証明書のサポートしたやつ。
ジオシティーズのせいで消滅しちゃうサイト。
消える前にソースのダウンロードした方がいいやつ。

SSPIってなんであんなに面倒なインタフェースなんだろうか。