2017年10月2日

【Access】現在のシステム日時をミリ秒単位まで取得する


通常、現在のシステムの日付と時刻を取得するにはNow関数を使いますが、システム開発を行っていると、もっと細かい単位(ミリ秒単位)で時刻を取得したいといった場合があります。そういった場合は、VBAだけでは無理ですのでWin32APIのGetLocalTime関数を使います。

現在のシステム日時を取得してメッセージボックスに表示してみたいと思います。
'構造体定義
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek  As Integer
    wDay  As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

'Win32API宣言
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystem As SYSTEMTIME)

Public Sub GetDetailTime()

    Dim sysLocalTime    As SYSTEMTIME
    Dim result As String
    
    '// 現在のシステム日時を取得
    GetLocalTime sysLocalTime

    result = sysLocalTime.wYear & "/" & _
            Format(sysLocalTime.wMonth, "00") & "/" & _
            Format(sysLocalTime.wDay, "00") & " " & _
            Format(sysLocalTime.wHour, "00") & ":" & _
            Format(sysLocalTime.wMinute, "00") & ":" & _
            Format(sysLocalTime.wSecond, "00") & "." & _
            Format(sysLocalTime.wMilliseconds, "000")

    MsgBox "現在の詳細時刻:" & result

End Sub
まず、上記のようにSYSTEMTIME構造体定義とGetLocalTimeのWin32API宣言を行ってください。
あとは、GetLocalTimeを実行して現在のシステム日時を取得します。
取得したシステム日時は、引数に指定したSYSTEMTIME型構造体に格納されます。


実行結果







2017年10月1日

【Access】Timer関数を使って処理時間を算出する


システム開発を行っていると処理時間というものが気になることがよくあります。Timer関数を使うと処理時間を算出することが出来ます。

Timer関数は、午前0時からの経過秒数を単精度浮動小数点数型 (Single) で返します。

たとえば、下記のようなForループ処理の時間を算出してみます。
Public Sub TimerTest()

    Dim startVal As Single
    Dim endVal As Single
    Dim result As Single
    Dim i As Long
    
    '開始時間の取得
    startVal = Timer()
    
    For i = 1 To 1000000000
        
        i = i + 1
        
    Next
    
    '終了時間の取得
    endVal = Timer()
    
    '処理時間算出
    result = endVal - startVal
    
    MsgBox "処理時間:" & result & " 秒"

End Sub
Forループを開始する前と後でそれぞれTimer関数を使って時間を取得し、終了時間-開始時間で処理時間を算出しています。

実行結果







2017年9月30日

【注意】アップルを装った怪しいメールが来た

以前、『【注意】マイクロソフトを装った怪しいメールが来た』という記事を書きましたが、今度はアップルを装った怪しいメールが送られてきました。

そのメールがこちらです。


メールの内容を「Google翻訳」で訳すと以下のような内容になります。

2017年9月29日

【Access】システム起動時にスプラッシュ画面を表示させる


よくソフトを起動したときに最初にタイトル画面みたいなのが数秒間表示されることがありますが、あれをスプラッシュと言います。
Accessで作ったシステムでもスプラッシュ画面を表示させると見た目がちょっとかっこよくなります。また起動時にスプラッシュ画面を表示させている間に裏で初期設定などさせるなんてことにも使えたりします。

2017年9月28日

【Access】タイマー時イベントを使ってストップウォッチを作ってみる


Accessのフォームにはタイマー時イベントというものがあります。これを使うと一定間隔で処理を実行することが出来ます。

ここでは試しにストップウォッチを作ってみます。

まず、このようなフォームを作成します。
コントロールは、経過時間を表示するラベル(labelElapsedTime)、STARTボタン(buttonStart)、STOPボタン(buttonStop)です。

Private ElapsedTime As Long

Private Sub Form_Timer()

    ElapsedTime = ElapsedTime + 1

    '経過時間を表示
    Me.labelElapsedTime.Caption = CStr(ElapsedTime)
    
End Sub

Private Sub buttonStart_Click()
    
    Me.labelElapsedTime.Caption = 0
    ElapsedTime = 0

    'タイマ間隔を1000(1秒)にする
    Me.TimerInterval = 1000

End Sub

Private Sub buttonStop_Click()

    'タイマ間隔を0にする
    Me.TimerInterval = 0

End Sub
まず、STARTボタンのクリックイベントプロシージャでTimerInterval=1000(単位はミリ秒)にします。そうするとタイマーが1秒間隔で動き出します。ちなみにタイマーイベントでの最初の処理は、TimerIntervalで指定した時間が経過したのちです。

そして、STOPボタンでTimerInterval=0にするとタイマーイベントが停止します。

実行するとこのようになります。







2017年9月27日

【Access】フォームを[×]バツボタンで閉じさせないようにする


システムを開発していると、たまにフォームを[×]バツボタンで閉じさせたくないといった場合が出てきます。

たとえば、このようなフォームがあったとします。

「閉じる」ボタン(buttonClose)をクリックする以外は、フォームを閉じられないようにします。

Private closeFlag As Boolean

Private Sub Form_Load()

    closeFlag = False
    
End Sub

Private Sub Form_Unload(Cancel As Integer)

    If closeFlag = False Then
        
        Cancel = True
        
        MsgBox "[閉じる]ボタンで閉じてください。", vbExclamation, "注意"
    
    End If
    
End Sub

Private Sub buttonClose_Click()

    'フラグをTrue
    closeFlag = True
    
    'フォームを閉じる
    DoCmd.Close acForm, Me.Name

End Sub
まず、「閉じる」ボタンが押されたかどうかの判定をするフラグ(closeFlag)を設けます。次に「閉じる」ボタンのクリックイベントプロシージャでcloseFlag=Trueにして、フォームをCloseします。そして、フォームの読み込み解除時イベントプロシージャでcloseFlag=Falseの場合に「Cancel = True」にして実行をキャンセルします。


実際に動かしてみます。


[×]ボタンをクリック。



メッセージが表示されました。







2017年9月26日

【PowerShell】デスクトップ上にショートカットを作成してアイコンを変更する


昨日、VBAでショートカット作成とアイコンの設定の記事を書きましたが、これをPowerShellでやったらどうなるか試しに作ってみました。

#WshShellオブジェクトを作成
$shell = New-Object -ComObject WScript.Shell

#ショートカットへのオブジェクトを作成
$lnk = $shell.CreateShortcut("$Home\Desktop\見積書.lnk")

#リンク先パス設定
$lnk.TargetPath = "C:\work\powershell\見積書.accdb"

#アイコンファイルパス設定
$lnk.IconLocation = "C:\work\powershell\document_mitsumorisyo.ico"

#ショートカットを保存
$lnk.Save()



実行すると、このようにショートカットが作成されアイコンが変更されます。