AccessRuntime
2014年05月19日
Access Runtime 業務利用のワナ・・・
KU です。
先週土曜日に、Access 2000 → Access Runtime に置き換える作業をやっていました。
結構、ハマります。。。課題が多い。。。
一般的に陥りそうな箇所を 3 点ご紹介!
フォームフィルタ・検索が一切、使用できない [1/3]
これは困りました。
↓ 検索と置換。これは Access Runtime にもあります。

↓ レコードのナビゲーション。ここの検索(全フィールドから検索)もあります。

↓ これがない! フィルター機能ですね…

案件のお客様には、簡単なキーワード検索機能を作って差し上げました。。。
こういう感じのコードです。
右クリックでメニューが表示できない [2/3]
これも困りました。基本的に何も表示されません。
しかし、ネットで調べていると、コピペメニューを出す方法が判りました。
↓ こういう感じのコンテキストメニューを表示できます。うーん、有り難い。

参考コード。Migikuri.bas:
使うときのコード。
VBAエラーを補足できない [3/3]

Access Runtime では、捕捉しないエラーは終了の原因になります。これは製品デザインのようなので、どうしようもありませんが…
エラー対策する必要があります。例:
- On Error GoTo や On Error Resume Next 参考
- OnError マクロ 参考
先週土曜日に、Access 2000 → Access Runtime に置き換える作業をやっていました。
結構、ハマります。。。課題が多い。。。
一般的に陥りそうな箇所を 3 点ご紹介!
フォームフィルタ・検索が一切、使用できない [1/3]これは困りました。
↓ 検索と置換。これは Access Runtime にもあります。

↓ レコードのナビゲーション。ここの検索(全フィールドから検索)もあります。

↓ これがない! フィルター機能ですね…

案件のお客様には、簡単なキーワード検索機能を作って差し上げました。。。
こういう感じのコードです。
Function FilterDate(ByVal V)
If CDate(V) < CDate("1981/1/1") Then Error 1
If CDate(V) > CDate("2034/1/1") Then Error 1
FilterDate = V
End Function
Private Sub bKW検索_Click()
Dim Keyword, Keywords$
Keywords = InputBox("部分一致、検索")
If Len(Keywords) = 0 Then
Me.FilterOn = False
Else
Dim Fil$
On Error Resume Next
Fil = "(TRUE)"
For Each Keyword In Split(Replace(Keywords, " ", " "), " ")
Keyword = Trim(Keyword)
If Len(Keyword) > 0 Then
Fil = Fil & "AND((FALSE)"
On Error Resume Next
Fil = Fil & "OR(長整数で検索 = " & CLng(Keyword) & ")"
Fil = Fil & "OR(部分一致で検索 LIKE '*" & Keyword & "*')"
Fil = Fil & "OR(完全一致で検索 = '" & Keyword & "')"
Fil = Fil & "OR(日付で検索 = '" & CDate(FilterDate(Keyword)) & "')"
On Error GoTo 0
Fil = Fil & ")"
End If
Next
Me.Filter = Fil
Me.FilterOn = True
End If
End Sub
右クリックでメニューが表示できない [2/3]これも困りました。基本的に何も表示されません。
しかし、ネットで調べていると、コピペメニューを出す方法が判りました。
↓ こういう感じのコンテキストメニューを表示できます。うーん、有り難い。

参考コード。Migikuri.bas:
Option Compare Database
Const msoBarPopup = 5
Const msoControlButton = 1
Public Sub 右クリック設定(ByVal F As Form)
CreateGeneralClipBoardMenu
' http://infith.com/system/access/access_runtime_syscmd/
If SysCmd(acSysCmdRuntime) Then
For Each W In F.Controls
' http://www.access-programmers.co.uk/forums/showthread.php?t=260351
If (TypeOf W Is TextBox) Or (TypeOf W Is ComboBox) Then
W.ShortcutMenuBar = "GeneralClipboardMenu"
End If
Next
End If
F. ShortcutMenuBar = "GeneralClipboardMenu"
End Sub
Function CreateGeneralClipBoardMenu()
On Error Resume Next
CommandBars("GeneralClipboardMenu").Delete
Dim cmb
Set cmb = CommandBars.Add("GeneralClipboardMenu", msoBarPopup, False, False)
With cmb
.Controls.Add msoControlButton, 21, , , True ' Cut
.Controls.Add msoControlButton, 19, , , True ' Copy
.Controls.Add msoControlButton, 22, , , True ' Paste
End With
Set cmb = Nothing
End Function
(5/20) レコードのコピペをなさりたい、とのことで、フォームにも適用するように修正。
使うときのコード。
Private Sub Form_Load()
右クリック設定 Me
End Sub
VBAエラーを補足できない [3/3]
Access Runtime では、捕捉しないエラーは終了の原因になります。これは製品デザインのようなので、どうしようもありませんが…
エラー対策する必要があります。例:
- On Error GoTo や On Error Resume Next 参考
- OnError マクロ 参考

