ラベル マクロ の投稿を表示しています。 すべての投稿を表示
ラベル マクロ の投稿を表示しています。 すべての投稿を表示

2014/02/06

Access 2013 マクロの文字数制限

久しぶりで投稿の手順を忘れている。アカウントを増やしたくなかったので自前のブログに書くのだけど。

Access 2013 / 2010 の マクロエディタ / Logic designer 上で値を設定しようとするとき、文字数の制限を受けることがある。
 MSアクセスマクロWhere条件式に256文字制限
UI のバリデーションで先に進めないのですが、文字数制限を突破することが可能な場合はある。

2013/02/03

Access 2010 / 2013 OnError/エラー時 マクロ アクション

Office 2013 のヘルプは今後充実していくのだろうか。
"OnError/エラー時" マクロ アクション
 通常、先頭に書くことが多いのだろうけど途中に記述するのもかまわわない。マクロアクションが実行された後についてエラー時にどうなるかを宣言するということ。

Access 2010 / 2013 SetLocalVar/ローカル変数の設定

ひとつのマクロで使用できるローカル変数は最大256まで。そこまで消費することはないだろうけど。。。
使い方はいたって簡単。ちょっと置いといて的な値があるとき使う。
 値は "式引数" で設定するから、文字列や日付時間である場合それなりの手続きで設定すればよい。

2013/01/27

Access 2010 / 2013 マクロ ビルダー -5-

少し便利です。ユーザー インターフェイス (UI) マクロを作成する にある情報ではあるけど、文字情報がちょっと多い。
 マクロ の作成/更新中にほかのマクロの参照ができる。
 検索にも対応してるので、ささっと同じ処理や似た処理のマクロを記述できるという仕掛け。

2013/01/20

Access 2010 / 2013 マクロ ビルダー -4-

サブマクロ / SubMacro がコンパイルされない。そんな話。
 サブマクロがUI上では保存されているのだけど、実行可能な状態になっていないことがある。おそらくパーサが原因でしょう。ただし、影響を受けることはわずかだ。
 たとえば、この状態で保存されているマクロなのだが、サブマクロとして認識できないものがある。確認してみる。

Access 2010 / 2013 マクロでマクロ自身の名前を知る

がっつり昼寝した日の夜に徹夜して導き出した答え
 マクロ名をそのマクロ自身が知るためにはどうしたらよいのでしょうか? そんなこと考えたことはないですか?私はありません。
 でも、マクロ名ゲットだぜぇっ!
 夢が広がるよね。そう思える想像力豊かな人もしくは多少のことは気にならない心穏やかな人以外は、この先読む資格がありません。ちなみに私は大雑把な性格です。

2013/01/19

Access 2010 / 2013 マクロ ビルダー -3-

クエリ や データマクロ の パラメータ に値を渡しちゃう。
大してややこしいことではないのだけど。たとえば、
PARAMETERS Param01 Long;
SELECT ID, Field1, Field2
FROM Table1
WHERE ID = [Param01];
こんな クエリ があったとして、この クエリ を開く マクロアクション はこうなる。
パラメータ 句が解析されて入力できるようになる。VBA だと DoCmd.SetParameter ということ。ただ、少し注意しておくことがある。

2013/01/14

Access 2010 / 2013 マクロ ビルダー -2-

FAQ的な話。
マクロアクション:[値の代入]がない!なんて言わないの。
Unsafe Actionのひとつなので表示されていないだけ。
"すべてのアクションを表示"を押下すると表示される。
実行したい内容によっては、マクロアクション:[プロパティの設定]を使ったほうがよいし、存在を知らないというのはよくない。

Access 2010 / 2013 マクロ ビルダー -1-

UI操作について、補足的内容
 Access 2010 からマクロ ビルダーがガラッと変わっていて戸惑うことが多いのでしょう。まぁそれ以前に グリッドで表現されてた以前のバージョンよりは使いやすいのでいいんじゃないかなと。

ビデオ: マクロ ビルダーの概要
ビデオにない操作方法についてのメモ

2011/11/19

access2010 ユーザ毎にあれこれしたいとき

2007-2010形式だとユーザーと権限の管理をどうするかって。
各フォーラムでもけっこうあるあるトピックだし、できれば以前のファイル形式をを使わないでおきたいかなと思う次第。ないものは仕方がない、似たものを実装するしかないわけで。
起動時にユーザ名とパスワードを照合するってことは、ユーザ情報テーブルからユーザ名 And パスワードを条件にすればよいからまぁよいかなと思う。あとはフォームであるとかコマンドボタンの制御をどうしていくかなって感じ。
そこで、例としてコマンドボタンの使用可否をユーザ毎に操作してみようと考えた。
できるだけマクロで、定義域集計関数を使わずに、できるだけAccess2010もしくはAccess2007の機能を使いつつ。
なにはともあれ、こんな感じのコマンドボタンを制御していくことにする。名前は判りやすいようにしているけれども、見ての通りビット演算でさらっと処理予定。

2011/10/15

access2010 マクロアクションの引数

access2010のインポートエクスポート定義選択に関する不具合について話をしていた時のこと

この件の修正がSP1に含まれていないのでしばらくの間はFAQになってしまうんだろうなと。で、対応としてVBAで実行すればいいじゃないとなるのだけど、マクロのままでなんとかならないのかということだった。マクロだけで簡単に対応できるよっていう話。意外と知らない人が多いんだなぁと。

2011/04/05

access2010 TempVars/LocalVars/ReturnVarsコレクション

TempVarsコレクションは、access2007でも使える。Access共有のコレクションだからマクロとVBAの間でデータ交換に使用することができる。TempVarオブジェクトはVariantなのだけどObjectは格納できない。要は数値か文字列であるということ。また、TempVarsオブジェクトを一旦作成すると、データベースを閉じるかTempVarオブジェクトを削除するまでデータは保持される。Publicな変数みたいなのだけど、実行時エラーが発生しても失われることがない変数という感じ。使いどころとしては、ユーザログイン情報など持ちまわりたい情報を格納するのに向いていると思う。以前のバージョンだとデータの一時保存用にフォーム上のテキストボックスを使っていたものの代わりになるでしょ。
TempVars!var_name
TempVars(index)
TempVars("var_name")

2011/03/10

access2010 マクロエディタがいろいろと便利

いまさらだけど。IntelliSenseが使えて便利かなと。
新機能ゆえ、不具合も抱えているけど。
IF~Else~ElseIfが表現できる

2010/11/13

access2010 access2007 ナビゲーションウィンドウ Navigate to Category

ナビゲーションウィンドウ/Navigation Paneのタイトルバードロップダウンリストの設定
ナビゲーションウィンドウのカテゴリドロップダウン
 これを、DoCmd.SetDisplayedCategoriesメソッド/表示されるカテゴリの設定マクロアクションで調整する。コードなら、
Sub SetNaviCategory()
    DoCmd.SetDisplayedCategories 0, "acNavigationCategoryObjectType"
    DoCmd.SetDisplayedCategories 0, "acNavigationCategoryTablesAndViews"
    DoCmd.SetDisplayedCategories 0, "acNavigationCategoryModifiedDate"
    DoCmd.SetDisplayedCategories 0, "acNavigationCategoryCreatedDate"
    DoCmd.SetDisplayedCategories 0, "ユーザー設定"
End Sub

で、ここまでできて、残りはナビゲーションオプションで指定以外のチェックを外して完成。
DoCmd.LockNavigationPane True を仕上げにセット

access2010 access2007 無効モードとマクロとVBAマクロ

セキュリティの警告が表示されている状態が無効モード。この時、マクロとVBAマクロの動作は異なる。
Command0押下時、マクロは開始され、マクロアクションは実行される。
Command1押下時、マクロは開始されるが、Unsafe Actionを実行しようとした時点で中止される。
Command2押下時、イベントプロシージャは実行されない。エラーも出ない。
埋め込みマクロじゃなくても同じ。

無効モードについて、アプリケーション配布時にどうなるか理解をしておかないと、思わぬトラブルが発生することがある。Runtimeモード/Runtime環境への配布であれば、無効モードで実行されることはないからよいのだけれど、製品版環境へaccdb/accdeでの配布の場合、セキュリティ設定が要求を満たしていない場合仕込んだコードが実行されないということが発生する。

別件、なんで埋め込みマクロなのかを考えると、accdeの場合を想像するとわかりやすい。単体のマクロは編集できるが、埋め込みマクロは編集できない。a2010からデータマクロが使えるけれども、これも考えに入れておかないとだめね。マクロだからaccdeでも編集できる。重要なロジックが含まれているならなおさら要注意。なんだかんだ考えるとRuntimeで実行させるのが比較的安全なのかも知れない。ケースバイケースでいくしかないかな。

2010/10/14

access2007 ランタイム環境でのオプション/セキュリティ設定

access2007 Runtimeでセキュリティセンターの設定/Accessのオプションを設定する方法
レジストリを直接操作するより安全でいいんじゃないかな。Office2007が必須だけど大半は入ってるでしょ。なんでRuntimeでもできるのかちょっと考えるけど。
access2010からは使えない方法


撮り直しはしませんけど、office2007standard+access2007runtimeの組み合わせでできてますんで、そこんとこ、どうぞよろしく。
DoCmd.RunCommand acCmdStartupProperties コマンドの実行/起動時の設定と同意

2010/09/29

access2010 "SetProperty/プロパティの設定" マクロ アクション

"SetProperty/プロパティの設定" マクロ アクション の不具合メモ
<再現>
Form.DirtyイベントにSetProperty/プロパティを設定
  • コントロール名:(コントロール名)
  • プロパティ:値
  • 値:任意
 で、どうなるかというと、
<現象>
マクロが再帰呼び出しされる。カウンタをこさえて確認



<対処>
エラー時マクロアクションでエラーメッセージを表示させないことは可能だが、再帰呼び出しは発生する。なので、2007同様値の代入マクロアクションを使う。
もしくは、VBAで対応。
Private Sub Form_Dirty(Cancel As Integer)
    DoCmd.SetProperty Me.フィールド3.Name, acPropertyValue, Now()
End Sub

と、思い込んでたけど、VBAでもだめなんだな。値の代入であれば、Dirtyイベントが発生しないんだけど、Dirtyイベントでプロパティの設定を実行させた場合、さらにDirtyイベントが発生してしまうと。
Private i As Integer

Private Sub Form_Dirty(Cancel As Integer)
    DoCmd.SetProperty Me.フィールド1.Name, acPropertyValue, 1234
    i = i + 1
    Debug.Print i '73までカウントした
End Sub

サポート:現象確認済み

2010/09/28

access2010 "CloseWindow/ウィンドウを閉じる" マクロ アクション

"CloseWindow/ウィンドウを閉じる" マクロ アクションでの不具合メモ
<再現>
レポートのショートカットメニューをマクロで作成。
"CloseWindow/ウィンドウを閉じる" マクロ アクション
  • オブジェクトの種類:レポート
  • オブジェクト名:(レポート名)
  • オブジェクトの保存:任意
のサブマクロをショートカットメニューから起動させる設定。

<現象>
ダイアログモード+印刷プレビューで開いたレポートを閉じることは成功するが、以降、タスクバーでaccessを終了させる以外の操作が不能になる。
<対処>
メニューコマンドの実行/閉じるを使う。もしくは

マクロでショートカットメニューを作らなければ無事に作動する。
Option Compare Database
Option Explicit
'msoBarPopup=5
'msoControlButton=1
Sub CreateSC01()
    Dim cb As Object

On Error Resume Next
    CommandBars("testSC").Delete
    Set cb = CommandBars.Add("testSC", 5, False, False)

    With cb.Controls.Add(1, 15948)
        .Caption = "PrintDialogAccess"
    End With

    With cb.Controls.Add(1, 923)
        .Caption = "PrintPreviewClose"
    End With

    With cb.Controls.Add(1, 14782)
        .Caption = "CloseDocument"
    End With
    
    With cb.Controls.Add(1)
        .Caption = "メニューコマンドの実行:閉じる"
        .OnAction = "reportshortcut.メニューコマンドの実行閉じる"
    End With
   
    With cb.Controls.Add(1)
        .Caption = "メニューコマンドの実行:ウインドウを閉じる"
        .OnAction = "reportshortcut.メニューコマンドの実行ウインドウを閉じる"
    End With
    
    With cb.Controls.Add(1)
        .Caption = "ウインドウを閉じるアクション"
        .OnAction = "reportshortcut.ウインドウを閉じるアクション"
    End With
    
    Set cb = Nothing

End Sub

不具合確認済み

2010/09/21

access2010 アプリケーション配布時の設定 改

開いてれば閉じればいいじゃない。

いつまでたってもきりがない。Alt+F11とF11を処理してと。
別件、データマクロはaccdeであっても編集できちゃうから要注意で。
うぉ、コメントの関数名がまちがっとる。

AutoExec/AutoKeys 

2010/09/20

access2010 アプリケーション配布時の設定

2010になってちょっと考え直し。Runtime環境でのことも考えて。
基本的にはRuntimeかRuntimeモードで作動するようにしておくべきなんだけど、そうもいかない時もあるわけで、どうしようかなと。

まずもってコードは実行させたいから、CurrentProject.IsTrustedで仕分け。
いずれの場合であっても、ナビゲーションウインドウの非表示 。
念のためナビゲーションウインドウのロック、そして隠しオブジェクトにして非表示とナビゲーションオプションでグループの非表示。で、このとき最低一つは表示されるフォームがないとナビゲーションウインドウ非表示させる時にエラーになる。
まぁ、SysCmd(acSysCmdRuntime)でRuntime以外終了ということでもいいのだけれども。
残り、ショートカットキーを有効にする(allowspecialkeys)をFalse、allowbypasskeyをFalse、autokeysでショートカットキーの抑制を追加とそれでもこぼれるのはキーボードイベントで。最後にaccdeに。

リボンを非表示にしてしまってるけど、できればリボンのカスタマイズでいいかな。
なぜなら、 VBEが開いてる状態で、ファイルと開くコマンドで開くとVBEが使用できてしまうから。

AutoExec/AutoKeys