memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

VBAでSleepする方法

タイトルについてぐぐると以下のページがヒットしました。ありがたいです。

Office TANAKA - Excel VBA Tips[CPUの使用率を抑える方法]

DoEvents懐かしい。。。Excelでシミュレータを作ったときにお世話になりました。で、このページに書かれていた通りにやるとできなかった(といってもわずかですが)、のでこうやると動いたよ、というメモです。ちなみに、確認した環境はMS-Excel 2016 (Windows10)です。PtrSafeを追加しただけです。これがないとエラーが出て動きません。それだけです、はい。

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ★修正前

Sub Sample()
    For I = 1 To 3
        Debug.Print "A"
        Sleep 1000 '1秒スリープしてくれます。
    Next
End Sub

<余談という背景>

数日前から暇をみて業務支援?用のツールをVBAで作成しています。前職では開発支援ツールの多くはVBAで開発していましたので懐かしいです。Macでも使えるんですが出番はかなり減りましたね。。。ちなみに、以下のような仕様のツールになります。本題ではないのですが。コンテキストもあわせて記録しておいた方が自分が思い出しやすいので。。。

  • 大学全体で出席管理システムを導入しています。学生証をタブレットNFC)にかざして出席データがサーバーにアップされます。このあたりは業者が開発しています。
  • 出席データは保護者様も閲覧できるようになっていて、できるだけリアルタイムに更新されることが望まれています(学生は望んでいない。。。^^;;;)。
  • 教員によってはタブレットを使用しない方もいてデータ更新が滞ることがあるそうです。
  • 未入力者宛に事務の方が複数のシステムを操作して苦労してデータをかき集めてExcelにまとめて一人ずつメールされてようで。。。かなり大変な仕事だったようです。数十人に異なるデータを貼り付けて作成して送る。。。想像しただけでわかりますよね?
  • で、教員がこの一部を肩代わりしましょうと提案した先生がいて、じゃ、ツールで対応しましょうと提案した次第です。

事務の方が使うのはWinマシンでデータはExcelに集められます。既存システムとの取り合いは契約や改造などが必要になるのでとりあえず触らず、基本データは現状通り、事務の方に集めていただき、そのデータをもとにデータを集約したり、メールアドレスを関連付けて、メールを送信するというあたりまでVBAでやっちゃおうという感じです。メールも送れちゃうんですね。。。これまでやったことはありませんでしたが。

WinでOfficeのデータをいじるならやはりVBAは効率がいいですからね。。。その他の開発環境も検討しましたが、Excelデータをコピペしたりすることを考えるとWebインタフェースを作るのが面倒。。。ということでExcelになりました。

さて、今日は3年生が開発したソフトウェア発表の日。楽しみです。