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()



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






2017年9月25日

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


作成したAccessのファイル(accdbファイル)のショートカットをデスクトップ上に作成して、さらにアイコンも変更したいといったことがあると思います。そういった場合、たいていは手動で作成すると思うのですが、accdbファイルのファイル名が変更になってしまったりするとその都度ショートカットを作り直さなければいけません。

そこで、デスクトップへのショートカット作成とアイコンの設定をVBAで自動で行うようにしてみます。

たとえば、「見積書.accdb」というファイルがあったとします。このファイルを開いたときに自動でデスクトップ上にショートカットを作成してみたいと思います。また、ショートカットのアイコンも下記のアイコンに変更してみます。


見積書のイラスト | かわいいフリー素材集 いらすとや

Public Function Main() As Boolean

    Dim shell As Object
    Dim shortCut As Object
    Dim linkFile As String
    Dim desktopPath As String
    
    'WshShellオブジェクトを作成
    Set shell = CreateObject("WScript.Shell")

    'デスクトップフォルダのパスを取得
    desktopPath = shell.SpecialFolders("Desktop")
    
    'ショートカット名
    linkFile = desktopPath & "\見積書.lnk"
    
    'ショートカットへのオブジェクトを作成
    Set shortCut = shell.CreateShortcut(linkFile)
    
    'リンク先パス設定
    shortCut.TargetPath = CurrentProject.FullName
    
    'アイコンファイルパス設定
    shortCut.IconLocation = CurrentProject.Path & "\" & "document_mitsumorisyo.ico"
    
    'ショートカットを保存
    shortCut.Save
    
    Set shortCut = Nothing
    Set shell = Nothing

    Main = False
    
End Function
WshShellオブジェクトのCreateShortcutメソッドを使ってショートカットの作成を行っています。
アイコンは、IconLocationプロパティで設定することが出来ます。

このMain()プロシージャをAccessファイルを開いたときに実行するようにAutoExecマクロで設定します。
AutoExecマクロの詳しい設定方法はこちらをご覧ください。


では、ファイルを開いてみます。

このように自動でショートカットが作成されます。






2017年9月24日

【本】スタンフォード式 最高の睡眠


スタンフォード式 最高の睡眠
西野精治

最近よくテレビなどでも紹介されている話題の本です。

私も夜ぐっすり眠れない、寝つきが悪い、そもそも寝る時間が確保できないといった悩みがありまして、思わずこの本を買ってしまいました。

タイトルにも書いてありますが、アメリカのスタンフォード大学というのは睡眠の研究では世界最高なんだそうで、すでに1960年代から本格的な研究が行われてきたそうです。

この本を読んでまず驚いたのは、レム睡眠とノンレム睡眠は90分周期じゃないということです。

この睡眠の周期というのは人によってかなり個人差があるらしく、90~120分と幅があるらしいです。昔から90分の倍数で眠るといいみたいなことが言われてきましたが、どうやらそれほどこだわる必要はないらしいです。

ただ、入眠からの最初の90分はすごい大事だそうで、この90分の質が悪いと自律神経のバランスも整えられなく、またグロースホルモンの分泌もされず、翌日のパフォーマンスに大きく影響してきてしまうそうです。

では、最初の90分を質の高い睡眠にするにはどうすればいいか。

いろいろ方法があるというか、一日の生活の中で気を付けなければいけないポイントがいくつかあるのですが、そのなかで一つ言えるのは、寝る前に深部体温を下げるということです。

通常、覚醒時は体の深部体温が皮膚温度より2℃ほど高いらしいんですが、寝る際に皮膚温度を上げて熱放散すると深部体温が下がり、そうすると深部体温と皮膚体温の差が縮まり入眠しやすくなるそうです。

そして、この深部体温と皮膚体温の差を縮めやすくするのが「入浴」とのことです。

入浴することにより深部体温が一時的に高くなり、これが入浴後に熱放散で下がってきてスムーズに入眠できようになるそうです。

この寝る前に入浴するといいというのは昔から言われてきたことで、まったく目新しことではないんですが、科学的にどういう仕組みでそうなっているのかがこの本を読んでよく分かりました。

あと、自分の寝つきの悪い理由もはっきりしましたね。最近、入浴してないからです。お風呂に入ったとしてもシャワーで体を洗うだけで、ゆっくり湯船につかるということをしてないですからね。これではダメですね。

研究者の間では眠りが足りてない状態を「睡眠負債」と呼んでいるらしいのですが、この睡眠負債は確実に脳と体にダメージを与えて寿命を縮めていくそうです。

私も、これから睡眠時間と質に気を付けていきたいと思います。





2017年9月23日

【Access】VBAでアプリケーションアイコンを設定する


VBAでアプリケーションアイコンを設定することが出来ます。

VBAで設定する前に、まず、オプション画面であらかじめアプアリケーションアイコンを入力しておきます。(こうしておかないとエラーになってしまいます。)



次に、VBAでアプリケーションアイコンを設定します。

ここでは試しにこのようなアイコンを設定してみたいと思います。

見積書のイラスト | かわいいフリー素材集 いらすとや

Public Function Main() As Boolean

    CurrentDb.Properties("AppIcon") = CurrentProject.Path & "\" & "document_mitsumorisyo.ico"
    Application.RefreshTitleBar

    Main = False
    
End Function
CurrentDb.Properties("AppIcon")でアプリケーションアイコンを設定します。
設定したら、Application.RefreshTitleBarで更新をします。これをしないと表示が変わりません。

(注)このMain()プロシージャはAccessファイルを開いたときに実行するようにAutoExecマクロで設定しています。詳しくはこちらをご覧ください。


では、Accessファイルを開いてみたいと思います。


タスクバーに表示されるアイコンが設定したアイコンに変わりました。


また、オプション画面で「フォームとレポートのアイコンとして使用する」にチェックを入れておくと、下記のようにフォームのタブのところとかにアイコンが表示されるようになります。


フォームのタブにアイコン







2017年9月22日

【Access】VBAでアプリケーションタイトルを設定する


VBAでアプリケーションタイトルを設定することが出来ます。

VBAで設定する前に、まず、オプション画面であらかじめアプアリケーションタイトルを入力しておきます。(こうしておかないとエラーになってしまいます。)



設定するとタイトルが表示されます。



次に、VBAでアプリケーションタイトルを設定します。
ここでは試しに「見積書」というタイトルにしてみたいと思います。
Public Function Main() As Boolean

    CurrentDb.Properties("AppTitle") = "見積書"
    Application.RefreshTitleBar

    Main = False
    
End Function
CurrentDb.Properties("AppTitle")でアプリケーションタイトルを設定します。
設定したら、Application.RefreshTitleBarで更新をします。これをしないと表示が変わりません。

(注)このMain()プロシージャはAccessファイルを開いたときに実行するようにAutoExecマクロで設定しています。詳しくはこちらをご覧ください。


では、Accessファイルを開いてみたいと思います。


タイトルが「見積書」に変わりました。






2017年9月21日

【Access】起動時にプロシージャを実行させるには


Accessのファイルを開いたときに、フォームを開く前にプロシージャを実行させたいといったことがあります。

そういった場合は、AutoExecマクロを使います。

たとえば、標準モジュールにあるMain()というプロシージャを起動時に実行させたいとします。

Public Function Main() As Boolean

    MsgBox "起動中..."
    
    Main = False
    
End Function
※必ずFunctionプロシージャで作成してください。Subプロシージャだと下記のAutoExecマクロで実行できません。


まず、マクロを作成します。

リボンの「作成」メニューからマクロをクリックします。

2017年9月20日

【Access】帳票フォームから指定のレコードの単票フォームを開く方法


帳票フォームから指定のレコードの単票フォームを開く方法です。

たとえば、このような帳票フォームから指定のレコードをダブルクリックしたら、そのレコードの単票フォームを開くようにしてみたいと思います。



まず、帳票フォーム(F_名物リスト)のフォームのダブルクリック時イベントプロシージャに次のように記述します。
Private Sub Form_DblClick(Cancel As Integer)

    DoCmd.OpenForm "F_名物", acNormal, , , , , CStr(Me.ID.Value)

End Sub
OpenFormの7番目の引数にダブルクリックしたレコードのIDを指定します。


次に、単票フォーム(F_名物)の
Private Sub Form_Load()

    Dim strCondition As String
    
    '検索条件を組み立て
    strCondition = "ID = " & CStr(Me.OpenArgs)

    '検索条件に該当するレコードから先頭のレコードを表示(DAO)
    Me.Recordset.FindFirst strCondition

End Sub
FindFirst(DAO)を使って、検索条件に該当するレコードから先頭のレコードを表示しています。

ちなみに「F_名物」のレコードソースにはテーブル「名物」を指定しています。
また、フォームはポップアップを「はい」にしています。


では、実行してみたいと思います。

まず、帳票フォームを開き、ID=5のレコードセレクタをダブルクリックしてみます。

すると、このように単票フォームが開き、ID=5のレコードが表示されました。







2017年9月19日

BloggerにMilliardを使って関連記事を表示させる

今日、というか先ほどなんですが、いつものようにブログを書こうと思って、何気なくこのブログの記事を見ていたところ、あることに気づきました。

あれっ、「関連記事」が表示されてない!

今使っているテンプレートには記事の下に関連記事が5個ぐらい自動で表示されるようになっているのですが、それが全く表示されてないんです。

一応、いろいろな記事を見てみてみましたが、どれも表示されません。

うーん、困ったなぁ。。。

仕方ないんで、またネットで何かいいものがないか探してみました。

そして、Googleで「Blogger 関連記事」というキーワードで検索して一番目にヒットしたのがこのサイト。

Bloggerの関連記事を表示するにはMilliardがいいのでは

さっそくこのサイトを参考に試してみました。


まず、下記のサイトに行きます。
Milliard関連ページプラグインについて | シスウ株式会社


そして、利用方法の「Bloggerをお使いの方はこちら」を選びます。

あとは、開いたページのとおりに操作すれば出来ます。
そんなに難しくないので誰でも出来ると思います。



一応、私は今回この設定にしてみました。

上記参考サイトで、スマホでの表示はスクロールを無効にしたほうがいいということなので、同じように設定させてもらいました。


そして、あとは出来上がったコードをテンプレートに貼り付けるのですが、実際どこに貼り付ければいいか場所がよく分からなくて困りました。

それで試行錯誤しながらいろいろ試した結果、もとの関連記事が表示されるようになっていた <div id='related-posts'></div> 内に貼り付けたところ思い通りに行きました。

この辺はお使いのテンプレートによって変わってくると思いますので、テンプレートのタグなどを見ながらいろいろ試してみてください。


実際に表示されるとこんな感じになります。

何もしなくてデフォルトでブログのデザインに完全に溶け込んでいます。

なかなか素晴らしいと思います。

簡単に出来ますので気なる方はぜひ試してみてください。


2017年9月18日

【Access】単票フォームを開いたときにレコードの新規入力状態にする方法


単票フォームを開いたときにレコードの新規入力状態にする方法です。

たとえば、このようなテーブルをもとに単票フォームを作ってみます。



手っ取り早くウィザードを利用して単票フォームを作成してみました。こんな感じになります。
一応、テキストボックスのサイズとかラベルの文字位置とかは調整しています。

これで、普通にフォームを開くと通常一番最初のレコードが表示されます。上の図の状態です。


これを新規入力の状態でフォームを開くには、フォームを開く際のイベントプロシージャに次のように記述します。、
Private Sub Form_Load()

    '新規レコード
    DoCmd.GoToRecord , , acNewRec

End Sub
DoCmd.GoToRecordの第二引数に「acNewRec」と指定します。こうすると新規入力状態になります。


実際に開いてみるとこのようになります。







2017年9月17日

【本】伝えることから始めよう


伝えることから始めよう
ジャパネットたかた創業者 高田明

ジャパネットたかたの元社長で現在はV・ファーレン長崎の社長をされている高田明さんが、自らの半生を振り返りつつ、ジャパネットたかたの社長を退任するまでの1年間に社員に伝えてきたエッセンスをまとめた本です。

高田さんは、コミュニケーションで最も大切なことは「伝えること」ではなく「伝わること」だと言います。

伝えたいことが相手に伝わっているか。自分の気持ちがちゃんと伝わっていなければいい関係は築けない。自分は伝えたつもりでも、相手にはまったく伝わっていなければダメなんだと。

2017年9月16日

【Access】別に開いたモーダルフォームから戻り値を取得する方法



別に開いたモーダルフォームから戻り値を取得したいといったことがよくあるのですが、そのような場合はフォームのプロパティを使うことが出来ます。


まず、フォーム1にこのようにテキストボックス(textMessage)と開くボタン(buttonOpen)を配置します。



次にフォーム2にコンボボックス(comboFruits)とOKボタン(buttonOK)を配置します。



ちなみに今回コンボボックスにこのように値リストを入れています。


そして、それぞれのフォームに次のように記述します。

フォーム1
'メンバ変数
Private mRetnValue As String

'プロパティ
Public Property Let RetnValue(ByVal Value As String)
    mRetnValue = Value
End Property

Public Property Get c() As String
    RetnValue = mRetnValue
End Property

Private Sub buttonOpen_Click()

    mRetnValue = ""
    
    DoCmd.OpenForm "フォーム2", acNormal, , , , acDialog
    
    'フォーム2で選択した値をテキストボックスに表示
    Me.textMessage.Value = mRetnValue
    
End Sub

フォーム2
Private Sub buttonOK_Click()

    Form_フォーム1.RetnValue = Me.comboFruits.Value
    
    DoCmd.Close acForm, Me.Name
    
End Sub


では実行してみます。


フォーム1を起動したら、「開く」ボタンをクリックします。



フォーム2が開いたら、コンボボックスから値を選択し、OKボタンをクリックします。



すると、フォーム1のテキストボックスにフォーム2で選択した値が表示されました。


解説

フォーム2からの戻り値を取得するのにプロパティを使用しています。このプロパティを用いる方法はよくやるやり方で、設定値やキャンセルフラグを受け取ったりします。また、フォーム2をモーダル(第6引数にacDialogを指定するとモーダルでフォームが開く)で開くと、その開いたフォームが閉じられない限り処理がストップしていますので、OpenFormのあとに戻り値をテキストボックスに表示する処理を行っています。






2017年9月15日

【Access】別フォームのテキストボックスに値を入力する



別フォームのテキストボックスに値を入力する方法です。



まず、親フォームにテキストボックス(textMessage)と開くボタン(buttonOpen)を配置します。



次に、子フォームにも同じようにテキストボックス(textMessage)と書込みボタン(buttonWrite)を配置します。
あと、フォームのプロパティでポップアップを「はい」にしてください。


そして、それぞれのイベントプロシージャに次のように記述します。

親フォーム
Private Sub buttonOpen_Click()

    DoCmd.OpenForm "子フォーム", acNormal, , , , acDialog
    
End Sub

子フォーム
Private Sub buttonWrite_Click()

    Forms!親フォーム!textMessage.Value = Me.textMessage.Value

End Sub


では実行してみます。



親フォームを起動したら、「開く」ボタンをクリックします。



子フォームが開いたらテキストボックスに値を入力して「書込み」ボタンをクリックします。
すると親フォームのテキストボックスに値が入力されます。


解説

Forms![フォーム名]![コントロール名]と指定すると別フォームのコントロールにアクセスするこが出来ます。ただし、対象のフォームが開いていることが条件ですので注意してください。