2017年10月31日

【Access】VBAからコントロールを作成する

CreateControlメソッドを使うとVBAからコントロールを作成することが出来ます。 構文CreateControl(フォーム名, コントロールの種類, [Section], [Parent], [ColumnName], [左位置], [上位置], [幅], [高さ]) []は省略可能。[左位置], [上位置], [幅], [高さ]はtwip単位で指定。 例たとえば、「フォーム1」にラベルを作成するには次のように記述します。 Public Sub CreateLabelControl() ...

2017年10月30日

【Access】VBAで指定したフォームを選択する

VBAで指定したフォームを選択するには、DoCmdオブジェクトのSelectObjectメソッドを使います。 例たとえば、「フォーム2」という名前のフォームを選択するには次のように記述します。 Public Sub SelectForm() DoCmd.SelectObject acForm, "フォーム2" End Su...

2017年10月29日

【Linux】Linux Mint にSQL Serverをインストールしてみた

(adsbygoogle = window.adsbygoogle || []).push({}); 先日、SQL ServerのLinux版が正式にリリースされたということで、試しにLinux Mintにインストールしてみました。 インストール手順 まずは下記のサイトに行きます。 https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads サイトに行ったら、Linuxのメニューから「Ubuntu...

2017年10月28日

【PowerShell】Bloggerのフィード情報を読み込んで最新記事5件分を表示するスクリプト

Bloggerのフィード情報を読み込んで最新記事5件分を表示するスクリプトを作ってみました。 $atom = Invoke-WebRequest https://hosopro.blogspot.com/feeds/posts/default $xml = [xml]$atom.Content $ent = $xml.GetElementsByTagName("entry") for ($i = 0; $i -lt 5; $i++){ #タイトル $ent[$i].Item("title")."#text" ...

2017年10月27日

【Access】現在開いている全てのフォームを参照する

現在開いている全てのフォームを参照するには、Formsコレクションを使った方法とAllFormsコレクションを使った方法があります。 たとえばこのようなデータベース(accdbファイル)があるとします。 開いている全てのフォーム名を取得するにはそれぞれ次のように記述します。 FormsコレクションPublic Sub GetOpenFormsInfo() Dim frm As Form Dim msg As String For Each frm...

2017年10月26日

【Access】データベース内の全てのフォームを参照する

データベース内の全てのフォームを参照するには、AllFormsコレクションを使います。 例たとえばこのようなデータベース(accdbファイル)があるとします。 このデータベース内の全てのフォームのフォーム名を取得するには次のように記述します。 Public Sub GetAllFormsInfo() Dim frm As AccessObject Dim msg As String For Each frm In CurrentProject.AllForms ...

2017年10月25日

【Access】フォームの背景色を変更する

フォームの背景色は、各セクションのBackColorプロパティに値を設定することで変更できます。 例たとえば、フォームヘッダー、詳細、フォームフッターの背景色を変更するには次のように記述します。 Private Sub Form_Load() Me.フォームヘッダー.BackColor = vbYellow Me.詳細.BackColor = vbCyan Me.フォームフッター.BackColor = vbGreen End Su...

2017年10月24日

【Access】帳票フォームでRequeryを行っても画面がチラつかないようにする

前回、「帳票フォームでRequeryを行ってもレコードの表示位置が変わらないようにする」方法を書きましたが、この方法だとレコード件数が多くなってくると画面のチラつきが気になってきます。 このような場合、フォームのPaintingプロパティを一時的にOFFにして描画を止めることによって画面のチラつきを抑えることが出来ます。 Private Sub buttonRequery_Click() Dim headerHeight As Long Dim curTop As Long ...

2017年10月23日

【Access】帳票フォームでRequeryを行ってもレコードの表示位置が変わらないようにする

帳票フォームでデータの更新などを行ってフォームのRequeryを実行するとレコードの表示が変わってしまうことがあります。そうするとシステムとしては非常に使いにくいものになってしまいます。 Accessではレコードの表示位置を覚えているわけではないのでこれは仕方ないことなのですが、ちょっとしたテクニックでこの表示位置を維持することが出来ます。 例たとえばこのような帳票フォームがあるとします。 このフォームの「再表示」ボタン(buttonRequery)をクリックしてもレコード位置が変わらないようにするためには、クリックイベントプロシージャに次のように記述します。 Private...

2017年10月22日

【PowerShell】Invoke-RestMethodを使って天気予報を取得してみる

最近、Web APIについてちょっと調べてたのですが、そのなかでお天気情報もWeb APIで取得できることが分かり、ためしにPowerShellで取得してみました。 まず、今回使用するWeb APIですが、livedoorの「お天気Webサービス」を使わせていただきました。 http://weather.livedoor.com/weather_hacks/webservice こういうお天気のWeb APIって有料のところが多く、なかなか無料で使わせてもらえるところは少ないのですが、livedoorの「お天気Webサービス」は個人利用に限って無料で使うことが出来ます。 それではまず、単純にAPIを叩いてお天気情報を取得してみたいと思います。 使い方は簡単です。 Invoke-RestMethodコマンドレットのあとにAPIのURIを指定するだけです。 レスポンスはJSONで返ってきます。 (adsbygoogle...

2017年10月21日

【Access】マウスホイールでフォームのスクロールが出来ない

今日、たまたま気づいたのですが、Accessのフォームでマウスホイールでのスクロールが出来なくなってしまいました。 あれっ、おかしいな? 以前はたしか出来ていたはずなのに。 使用しているのは、Access2016 バージョン 1708 (ビルド 8431.2107)です。 ちなみにOSは、Windows 10 Pro バージョン 1703 ネットで検索したところ同じような症状が出ている人がいました。 その人によるとアップデートしたところ治ったとのこと。 さっそくアップデートしてみました。 ⇒バージョン...

2017年10月20日

【Access】フォームOpenをキャンセルする

フォームを開くときに何かの理由でキャンセルしたい場合があったりします。 そういった場合、Openイベントプロシージャの引数CancelをTrueにします。 例次の例では、フォームOpen時にInputBoxでパスワードを入力させ、パスワードが一致していた場合だけフォームを開くようにしています。 'パスワード Private Const PWD As String = "tako" Private Sub Form_Open(Cancel As Integer) Dim pass...

2017年10月19日

【Access】実行中のフォームのコントロールを再描画する

Repaintメソッドを使って実行中のフォームのコントロールを再描画することが出来ます。 例たとえば、フォームにラベル(labelHello)が貼り付けてあり、このラベルのフォントサイズをボタン(buttonBig、buttonSmall)を押すことで変更させてみたいと思います。 各ボタンのイベントプロシージャに次のように記述します。 Private Sub buttonBig_Click() Me.labelHello.FontSize = Me.labelHello.FontSize...

2017年10月18日

【Access】VBAでフォームを作成する

VBAでフォームを作成するにはCreateFormメソッドを使います。 例たとえば、このようなaccdbファイルがあったとします。 ここで、次のプロシージャを実行してみます。 Public Sub MakeForm() CreateForm DoCmd.Restore End Su...

2017年10月17日

【Access】最大化/最小化されたフォームを元に戻す

最大化/最小化されたフォームを元に戻すにはDoCmd.Restoreを使います。 例たとえば、このようなフォームにボタンが2つ貼り付けてあるとします。 「最大化」ボタンでフォームを最大化、「元に戻す」ボタンでフォームを元に戻すようにするには次のように記述します。 Private Sub buttonMaximize_Click() '最大化 DoCmd.Maximize End Sub Private Sub buttonRestore_Click() ...

2017年10月16日

【Access】フォームをスクロールさせる

フォームのGoToPageメソッドを使ってフォームをスクロールさせることが出来ます。 書式Me.GoToPage ページ番号, 横移動量, 縦移動量 移動量に指定する数値の単位はtwipです。 twipの大きさはおよそ次ように変換できると考えてください。 約567twip = 1cm 約15twip = 1ピクセル 例たとえば、このようにフォームにフレームが縦に3つ並んでいるとします。 この各フレームに対してフォームヘッダー部にあるボタンで移動するには次のように記述します。 Private...

2017年10月15日

画像に矢印とか注釈を入れるソフトScreenpressoを使ってみた

これまでブログに載せる画像に矢印を入れたり、注釈を入れたりするのにGIMPを使っていたのですが、GIMPだと矢印の種類が少なく形もいまいちで、どうにも表現力に乏しすぎてなんとかならないかなと思っていました。 そこでネットでいろいろ調べてみたところ、どうやらみんなSkitchというソフトを使っているということが分かりました。 なるほど!そういうソフトがあったのか。それで早速自分も使ってみようと思い、Skitchのサイトに行ってみました。しかし、どこからダウンロードしていいか分かりません。なぜかいくら探してもどこにもそれらしいのが無いんですよ...

2017年10月14日

【Access】フォームの幅・高さ・位置を変更する

フォームの幅・高さ・位置を変更するには、DoCmd.MoveSizeを使います。 書式DoCmd.MoveSize 左位置, 上位置, 幅, 高さ 幅や位置に指定する数値の単位はtwipです。 twipの大きさはおよそ次ように変換できると考えてください。 約567twip = 1cm 約15twip = 1ピクセル 例たとえば、左位置2cm、上位置2cm、幅10cm、高さ6cmに変更する場合は次のように記述します。 Private Sub Form_Open(Cancel As Integer) ...

2017年10月13日

【Access】フォームを最小化する

フォームを最小化するには、DoCmd.Minimizeを使います。 例たとえば、このようなフォームにボタン(buttonMinimize)が付いているとします。 このボタンを押すとフォームが最小化するには次のように記述します。 Private Sub buttonMinimize_Click() DoCmd.Minimize End Su...

2017年10月12日

【Access】フォームを最大化する

フォームを最大化するには、DoCmd.Maximizeを使います。 例たとえば、このようなフォームにボタン(buttonMaximize)が付いているとします。 このボタンを押すとフォームが最大化するには次のように記述します。 Private Sub buttonMaximize_Click() DoCmd.Maximize End Su...

2017年10月11日

【PowerShell】MP3ファイルのファイル名をトラック番号付きのファイル名に変更する

MP3ファイルのファイル名をトラック番号付きのファイル名に変更するスクリプトを作ってみました。 Rename-Mp3File.ps1 param($targetDir) $sh = New-Object -ComObject Shell.Application $music = $targetDir $folder = $sh.Namespace($music) $items = Get-ChildItem -Path $music -Include *.mp3 -Name   foreach($f...

2017年10月10日

【Access】エラーログ処理をクラス化する

以前、エラーログ出力の方法を書きましたが、こういうログ処理というのはクラスにまとめてしまうと使い勝手がよくなります。 LogClass今回、VBEでクラスモジュールを追加し、名前をLogClassとしました。 プロパティでログファイルの最大サイズやローテーション世代数を設定出来るようにしています。 '定数 Private Const MAX_FILE_SIZE As Long = 4096 'ログファイルサイズ(KB) Private Const LOG_FILE_NAME...

2017年10月9日

【Access】ログファイルをローテーションする

ログファイルにどんどん追記していくと際限なくファイルサイズが増大していってしまいます。そこでログファイルがある一定のファイルサイズを超えたらローテーションして古いファイルを削除したりして増大するのを防ぎます。 標準モジュール今回、標準モジュールに下記のようなプロシージャを作成しました。 ログファイルの最大サイズ、ログファイル名、ログファイルの拡張子、あとローテーション世代数を定数で設定しています。 ローテートは、最大サイズを超えたらファイル名に数字をプラスしていきます。そして、ローテーション世代数を超えたファイルは削除するようにしています。 error.log ↓ error1.log ↓ error2.log ↓ error3.log ↓ 削除 '定数 Private...

2017年10月8日

Embedlyを使ってブログカードを作ってみた

以前からほかのブログとかを見てると、埋め込みでサムネイル付きのリンクが貼り付けてあって、こういうの自分もやってみたい!って思っていたのですが、調べてみると「はてなカード」と言って、はてなブログ用のサービスらしいんです。 このブログはBloggerですので、残念ながら「はてなカード」は使えないんですよね。 そこで他に何かいい方法はないかと探してみたところ、今日、Embedlyというサービスを見つけました。 試しにブログカードを作ってみましたので、その使い方をちょっとご紹介したいと思います...

2017年10月7日

【Access】エラーログを出力する

システムでエラーが発生したときにファイルにエラーログを出力する方法です。 参照設定まず、今回ファイルの作成やフォルダの作成にFileSystemObjectオブジェクトを使ので参照設定で「Microsoft Scripting Runtime」を選択してください。 標準モジュール次に標準モジュールに下記のように記述します。 'Win32API Private Declare Sub GetLocalTime Lib "kernel32" (lpSystem As SYSTEMTIME) '構造体 Private...

2017年10月6日

【Access】マウスポインターの形状を変更する

通常、Accessでマウスカーソルを砂時計に変更するにはDoCmd.Hourglassを使いますが、ScreenオブジェクトのMousePointerプロパティを使っても変更することが出来ます。 MousePointer プロパティの設定値 設定値 内容 0既定値 1標準の選択 (矢印) 3テキスト選択 (I字型ポインター) 7上下に拡大/縮小 9左右に拡大/縮小 11待ち状態 (砂時計) 1 矢印Application.Screen.MousePointer...

2017年10月5日

【Access】エラー発生時の終了処理

そのプロシージャを終わらせるにあたって実行しなければいけない処理というのがある場合があります。たとえば、データベースへの接続オブジェクトのクローズ処理だったり、戻り値の設定をすることだったり。ただ、エラーが発生してしまい途中でエラー処理に飛ばされてしまうことがあります。 そのような場合、エラー処理を行ったあとにResumeステートメントで終了処理に飛ばしてあげます。 例下記の例では、マウスカーソルを砂時計に変更し、エラー発生時でも必ずマウスカーソルを元に戻すようにしています。 Public...

2017年10月4日

【PowerShell】ファイルの拡張子を一括で変更するスクリプト

ファイルの拡張子を一括で変更するスクリプトを作ってみました。 「Change-FileExtension.ps1」 #引数(該当フォルダ, 変更前拡張子, 変更後拡張子) param($targetDir, $oldExt, $newExt) #正規表現の指定 $matStr = '.' + $oldExt $oldStr = '\.'+ $oldExt + '$' $newStr = '.' + $newExt #該当するファイルの拡張子を置換 Get-ChildItem -Path...

2017年10月3日

【Access】エラー処理

システム開発をする上で重要になってくるのがエラー処理です。エラー処理を正しく行っていないとエラーによりAccess自体を強制終了しなければいけないといったことになってしまうことがあります。 Access VBAのエラー処理は2つの方法があり、一つはエラーが起きても無視して処理を続行させる方法と、もう一つはエラーが起きたら特定の行に処理を移す方法があります。 エラーが起きても無視して処理を続行させる方法まずは何もエラー処理してない場合です。下記のコードは0除算エラーが発生します。 Public...