カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

フォームを開く/閉じる速度改善

MicroSoft ACCESSにて、フォームを開くとき、閉じるときの速度が遅い場合、
コードの書き方によって改善できることがあります。

以下のようにフォームを開くときにフィルターをかけていた場合

Private Sub Form_Load()

    DoCmd.ApplyFilter , "[Where条件]"

End Sub

上記の場合でいくと開くときにも時間がかかり、
更には、閉じるときにも時間がかかってしまいます。

改善するには、開くときにフィルター条件を引数に与えてしまいます。

Dim stDocName      As String
Dim stLinkCriteria As String

stDocName = "[フォーム名]"
stLinkCriteria = "[Where条件を指定]"

DoCmd.OpenForm stDocName, , , stLinkCriteria

この方法のほうが開く速度も閉じる速度も向上します。

7,915 views

クリップボードを扱う [VBA]

VBAでクリップボードのデータを扱うには、
Microsoft Forms 2.0 Object Libraryへの参照設定が必要です。

参照設定なしにクリップボードのデータを扱うには

Dim ClipB    As Object

Set ClipB = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

ClipB.GetFromClipboard
MsgBox ClipB.GetText 'クリップボードの文字列を表示

ClipB.SetText "テスト"
ClipB.PutInClipboard 'クリップボードにデータを送信

Set ClipB = Nothing
5,143 views

VBA CInt関数の注意点

CInt関数はデータ型を変換する際に使用する関数ですが、小数点以下の扱いがRound関数とは異なります。
CInt関数の場合は、四捨六入となり、0.5の場合のみ最も近い偶数に丸められます。

CInt(2.4) = 2
CInt(2.6) = 3

ここまでは通常の四捨五入と同じなのでわかりやすいと思います。

しかし、0.5だった場合だけ動作が異なります。

CInt(2.5) = 2
CInt(3.5) = 4

となります。

2,068 views

ショートカットの作成 VBA

ショートカットを作成する方法のご紹介。
本来は「Windows Script Host Object Model」を参照設定しますが、
今回は参照せずに実行する方法です。

Dim ws
Dim myShortcut

Set ws = CreateObject("WScript.Shell")

Set myShortcut = ws.CreateShortcut("[作成するショートカットのフルパス]")

With myShortcut
    .TargetPath = "[実ファイルのフルパス]"
    .Save
End With
16,169 views

VBEでマウスホイールを有効にする

Office2000を使用している場合、Visual Basic Editor(VBE)では
マウスホイールが使用できません。
開発する上で、非常に効率が悪いので私はアドインを使ってホイールを有効化しています。

まず、以下のURLから「VB6MouseWheel.exe」パッケージをダウンロードします。
http://support.microsoft.com/kb/837910/ja

1.「VB6MouseWheel.exe」をダブルクリックし、任意の場所にファイルを解凍します。

2.[スタート]から[ファイル名を指定して実行]で以下を入力します。

regsvr32 <path>\VB6IDEMouseWheelAddin.dll

3.解凍したファイルの中の「VBA Mouse Wheel Fix.reg」を
  ダブルクリックしてレジストリに登録します。

4.Visual Basic Editor(VBE)を起動し、メニューの[アドイン]-[アドインマネージャ]を選択し起動。

5.利用可能なアドインのリストに「MouseWheelFix」があるので、選択し
  ロード方法の「ロード/アンロード」「起動時にロード」両方にチェックを入れ、OKをクリックしてください。

3,646 views

文字列から日付(または時刻)に変換する

日付(または時刻)文字列をDate型(バリアント)へ変換するには以下のような関数があります。

DateValue
TimeValue
CDate

・書式

val = DateValue( "[日付文字列]" ) '戻り値:Variant型
val = TimeValue( "[時間文字列]" ) '戻り値:Variant型
val = CDate( "[日付文字列]" ) '戻り値:Date型

続きを読む…»

35,285 views

FileSystemObjectを利用してファイルをコピー

Scripting.FileSystemObjectを利用してファイルをコピーする方法

Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")

'ファイルをコピー
fso.CopyFile [コピー元ファイル], _
    [コピー先ファイル], _
    [上書きフラグ(Trueで上書き:省略可)]

'フォルダーをコピー
fso.CopyFolder [コピー元フォルダー], _
    [コピー先フォルダー], _
    [上書きフラグ(Trueで上書き:省略可)]

Set fso = Nothing
2,246 views

Excelオブジェクトを使用してフリガナ入力

ACCESSからVBAでフリガナを自動入力します。

Dim xlObj As Object

Set xlObj = CreateObject("Excel.Application")

Hurigana = xlObj.GetPhonetic("文字列")

Set xlObj = Nothing

ちなみにExcelだと、

Phonetic("文字列")

だけでできるようです。

1,678 views

ACCESSからExcelファイルが開いているか調べる

Dim xlApp   As Object
Dim xlBook  As Object

Dim FileName   As String

FileName = Environ("USERPROFILE") & "\デスクトップ\sample.xls"

Set xlApp   = CreateObject("Excel.Application")
Set xlBook  = xlApp.Workbooks.Open(FileName)

If xlBook.ReadOnly Then
    MsgBox "開いています。"
Else
    MsgBox "開いていません。"
End If

xlBook.Close

xlApp.Application.Quit

Set xlBook = Nothing
Set xlApp = Nothing
21,519 views

VBA DAOでカレントレコードの位置を取得・設定する

帳票フォームでカレントレコードの位置を取得・設定できます。
レコードを削除してその位置に戻りたい場合などに便利。

Dim rst As Object
Dim i As Integer

Set rst = Me.Recordset

'カレントレコードの位置を変数に代入(返り値:長整数型)
i = rst.AbsolutePosition

'カレントレコードを1つ先に移動させる
rst.AbsolutePosition = i + 1

Set rst = Nothing

相対位置を取得するPercentPositionというプロパティもあります。
この場合、全体を100とした浮動小数点型が返ります。

21,405 views