VBSでAccess2010のデーターベースのテーブルのIMEをOffにするスクリプト | えちゆちのめもめも

えちゆちのめもめも

覚え書きです。

Access 2010(32bit)がインストールされている(もしくはAccess2010以降の再配布可能なモジュールがインストールされていればいけると思う)のを前提としてかつOSはWin8,1の64ビット版

いろいろなサイトを参考にしてみてうまくいったのでメモ。

データベースに含まれているシステムテーブルでないテーブルのText型フィールドのみ対象。
メモなんでコメントなし。

こんな感じ。


option explicit
const accsdbpath = "C:\hoge\hoge.accdb"
const dbByte = 2
dim sh, engine, args, e, cmd
set sh = createobject("wscript.shell")
if sh.environment("Process").item("PROCESSOR_ARCHITECTURE") <> "x86" then
    if not wscript.arguments.count = 0 then
        for each e in wscript.arguments
          args = args & " """ & e & """"
        next
    end if
    if instr(lcase(wscript.fullname), "wscript") > 0 then
        engine = "wscript.exe"
    else
        engine = "cscript.exe"
    end if
    cmd = """" &  sh.environment("process").item("windir") & "\syswow64\" & engine & """ """ & wscript.scriptfullname & """" & args
    sh.run cmd
    wscript.quit
else
    main 
end if
sub main()
    dim dao, db, tdf, f, p,ip
    set dao = createobject("DAO.DBEngine.120")
    set db = dao.opendatabase(accsdbpath)
    for each tdf in db.tabledefs
        if tdf.attributes = 0 then
            for each f in tdf.fields
                if f.type = 10 then
                    on error resume next
                    f.properties("IMEMode") = 2
                    if err.number <> 0 then
                        err.clear: on error goto 0
                        set ip = f.createproperty("IMEMode", dbByte, 2)
                        f.properties.append ip
                        set ip = nothing
                    else
                        on error goto 0
                    end if
                end if
            next
        end if
    next
    set db = nothing
    set dao = nothing
    msgbox "終了しました!"
end sub


いじょ!