AccessRuntime
2014年05月19日
Access Runtime 業務利用のワナ・・・
KU です。
先週土曜日に、Access 2000 → Access Runtime に置き換える作業をやっていました。
結構、ハマります。。。課題が多い。。。
一般的に陥りそうな箇所を 3 点ご紹介!
フォームフィルタ・検索が一切、使用できない [1/3]
これは困りました。
↓ 検索と置換。これは Access Runtime にもあります。
↓ レコードのナビゲーション。ここの検索(全フィールドから検索)もあります。
↓ これがない! フィルター機能ですね…
案件のお客様には、簡単なキーワード検索機能を作って差し上げました。。。
こういう感じのコードです。
これも困りました。基本的に何も表示されません。
しかし、ネットで調べていると、コピペメニューを出す方法が判りました。
↓ こういう感じのコンテキストメニューを表示できます。うーん、有り難い。
参考コード。Migikuri.bas:
使うときのコード。
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 SubVBAエラーを補足できない [3/3]
Access Runtime では、捕捉しないエラーは終了の原因になります。これは製品デザインのようなので、どうしようもありませんが…
エラー対策する必要があります。例:
- On Error GoTo や On Error Resume Next 参考
- OnError マクロ 参考