今日もお仕事です。
月次報告書作るために、VBA使ってみようと思ったりしたのですが…
ADOのConnection.Openで現在のワークシートを開いてSELECTやらINSERTやらをしまくっていたらPCがむちゃくちゃ重くなるではないですか。
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Open "driver=Microsoft Excel Driver (*.xls);DBQ=" & ThisWorkbook.FullName & ";ReadOnly=False;"
こんな感じで開いて、200件くらいしかないデータを
SELECT **** FROM ****
とかで取り出して、その結果によって
UPDATE xxxx SET yyyy = yyyy + 1 WHERE **** = ####
を実行しまくるというものなのですが。
タスクマネージャで見たらメモリ500MBとか消費していやがります(汁
しかもそのブックを閉じてもダメで、Excel終了しないとメモリが開放されないという酷さ。
これってバグとちゃうの?
と思ったらMSのサイトに載ってました…
http://support.microsoft.com/kb/319998/en-us
RESOLUTION
The memory used by the ADO queries cannot be reclaimed by closing and releasing the ADO objects. The only way to release the memory is to quit Excel.
If possible, query the Excel worksheet only while the file is not open in Excel.
ひどい(;´д`)
と思ったけど、Query the Excel worksheet while the file is not open in Excel が possible なので普通のVBScriptにしようと思います(ぉ
ていうか、そんな内容じゃVBAにする意味がほとんどなかったんじゃ・・・(汗)