2010/10/31
access2010 IRibbonControl ID/Tag/Context プロパティ
コールバックプロシージャで参照できるIRibbonControlについて確認
コントロールのid属性値はリボンでユニークだから、IDプロパティを参照することでプロシージャ実行時コントロールを特定できる。だから、同じコールバックプロシージャでも処理を分岐して仕分けができる。tag属性値は、id属性値に使用できない文字とか処理分岐のキーとして使う方法も考えられる。AccessコントロールのTagプロパティと同じ感じでいいかな。Contextプロパティで参照できるのはAccessアプリケーションオブジェクトだから特に使うことはないんじゃなかろうか。
ラベル:
access 2010,
RibbonUI,
VBA
access2010 Windows7 SP1でADOに修正がはいる
Win7SP1がRCになったことで確認中。SP1に含まれるHotFixを覗いてみたところ影響ありそうなのが数件。多分、この件が解消。わーい。
"Type Mismatch" error message when you run a VBA macro in a 64-bit version of an Office 2010 application http://support.microsoft.com/kb/983246
RecordCount(ADO)の値Typeの件。Win7に限らず、offce2010(64bit)で影響するから、まぁXPは少ないだろうけど、64bitOS(Vista/Server2008とか)全部関係するでしょうな。
その他accessに関係しそうなのが、
A computer that is running Windows 7 or Windows Server 2008 R2 takes four minutes to open a Microsoft Office 2003 document from a network share http://support.microsoft.com/kb/982860
4分かかるて、、、。Win7混じるとa2003が遅いって話しあったけどこれなのかな。
"Type Mismatch" error message when you run a VBA macro in a 64-bit version of an Office 2010 application http://support.microsoft.com/kb/983246
RecordCount(ADO)の値Typeの件。Win7に限らず、offce2010(64bit)で影響するから、まぁXPは少ないだろうけど、64bitOS(Vista/Server2008とか)全部関係するでしょうな。
Option Compare Database Option Explicit Sub ADOtest() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = Application.CurrentProject.AccessConnection rs.CursorLocation = adUseClient rs.Open "select * from table01", cn, adOpenKeyset, adLockOptimistic Debug.Print rs.RecordCount, TypeName(rs.RecordCount) rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 'Win7の場合、rs.RecordCountは、Longlong → Win7SP1の場合、Long Sub DAOtest() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("select * from table01") rs.MoveLast Debug.Print rs.RecordCount, TypeName(rs.RecordCount) Set db = Nothing End Sub 'Win7/Win7SP1変わらず、LongADO関係のファイルバージョンが、6.1.7601.17105に。
その他accessに関係しそうなのが、
A computer that is running Windows 7 or Windows Server 2008 R2 takes four minutes to open a Microsoft Office 2003 document from a network share http://support.microsoft.com/kb/982860
4分かかるて、、、。Win7混じるとa2003が遅いって話しあったけどこれなのかな。
ラベル:
access 2010,
ADO,
VBA,
メモ
access2010 リボンをVBAで操作する Invalidate InvalidateControl
リボンに配置してあるコントロールには、VBAから直接に参照することはできない。フォーム上に配置されたaccessコントロールのようにプロパティの参照や設定ができないということ。
リボンのコントロール要素には、on~、get~というコールバックを示す属性があるので、これらとIRibbonUIオブジェクトのInvalidate/InvalidateControlメソッドを使用することでリボンコントロールを制御する。
コールバック属性に示されるプロシージャは、該当のリボンコントロールがキャッシュされるときに実行され、プロシージャから渡される値がコントロールの属性値になる。
例えば、enabled属性にはgetEnabledコールバック属性があり、属性値が示すプロシージャによってenabled属性値を取得する。取得した値がfalseであれば使用不可の状態になる。
コールバックプロシージャはキャッシュ時のみ動作でVBAから直接に実行を指示できないから、キャッシュ値を無効にするメソッドInvalidate/InvalidateControlを実行しリボンにシグナルを送信。
リボンは自動的に再キャッシュを開始し、コールバックプロシージャを実行させ属性値を取得する。このとき、属性値として取得される変数をVBAで制御すれば、リボンコントロールの制御をすることになる。
リボンコントロールの再キャッシュ動作はVBAと非同期に実行されるから、リボンの動作に左右されるようなクリティカルな使い方をしちゃだめ。コントロールがキャッシュされる順番などは保証されないから、リボンコントロール間でも同じことが言える。
ラベル:
access 2010,
MS-Access,
RibbonUI,
VBA
2010/10/30
access2010 オプションとかUIから操作しにくくする設定メモ
UI操作でオプションなどに遷移するコマンドを使用不可にしてみた。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <commands> <command idMso="QuickAccessToolbarCustomization" enabled="false" /> <command idMso="RibbonCustomization" enabled="false" /> <command idMso="AccessNavigationOptions" enabled="false" /> <command idMso="ApplicationOptionsDialog" enabled="false" /> </commands> </customUI>
ナビゲーションウインドウ→ナビゲーションオプション |
QATカスタマイズメニュー |
QATカスタマイズとリボンカスタマイズ |
backstage |
ラベル:
access 2010,
MS-Access,
メモ
access2010 access2007 CurrentDb.Properties("DocUICustomization")
クイックアクセスツールバー(documentControls)の格納先は、
CurrentDb.Properties("DocUICustomization")
CurrentDb.Properties("DocUICustomization")
<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2006/01/customui"> <mso:ribbon> <mso:qat> <mso:documentControls> <mso:control idQ="mso:ImportAccess" visible="true"/> </mso:documentControls> </mso:qat> </mso:ribbon> </mso:customUI>
ラベル:
access 2010,
MS-Access,
メモ
access2010 customUI onLoad
customUIのonLoadについて
- ribbonXmlの内容がキャッシュされる時に発生
- なので、一度しか発生しない
- そして、リボンは非同期で処理が進む
IRibbonUIオブジェクトを参照できなければエラーになるのは当たり前。onLoad開始時からIRibbonUIオブジェクトが参照できるようになるまでの時間は配置コントロール要素次第だと思うから、待つか予めにキャッシュ(LoadCustomUIメソッド)させておく、もしくは使いどころを別に考える。
どえらい要素数のリボンでキャッシュ済みであった場合どうなるのか見ておけばいいのか。あてにしない方がよいかもだ。
ちょっと考えなおした。LoadCustomUIメソッドではキャッシュされずに読み込まれるだけ。読み込まれていても、未使用のリボンはキャッシュされていないと思う。
リボンを動的に操作するためには、onLoadでIRibbonUIオブジェクトを参照できるようにしなければならない。オブジェクトは実行時エラーが発生すると初期化されてしまうからエラー処理は特に大事。キャッシュはアプリケーション終了まで保持される。
要素:customUI
属性:onLoad(コールバック)
call back signature:Sub onLoad(ribbon as IRibbonUI)
ラベル:
access 2010,
RibbonUI
2010/10/27
access2010 クイックアクセスツールバー(qat)をRibbonXmlで設定
まぁ特に複雑なことはない。
組み込みコントロールであれば、idMsoで指定。カスタムボタンであればonActionでプロシージャ指定。
startFromScratch="true"じゃないとだめ。また、qatに配置されるカスタムコントロールのIDはユニークで。
ラベル:
access 2010,
RibbonUI
access2010 アプリケーションパーツ その7
インスタンスフォーム使用の自作アプリケーションパーツを使用したとき、フォームを閉じないまま、データベースを閉じる/accessを終了すると、以下の状況になる。フォームモジュールの残骸が残ってしまい以降アプリケーションパーツを使うことができなくなる。
こうなってしまうとこの後どうにもならないので、新規ファイルにオブジェクトをインポートして再構成。
なので、フォームには閉じるコマンドボタンを設置し、コマンドボタン押下以外ではフォームが閉じれないようにしておく。やっぱだめかも。モーダル+ポップアップの方が確実かもしれん。
また、テンプレートに含まれるテーブル/フィールド名に等に "<" 、">"、 引用符等含めてはダメ。
フォーム/レポートなどはSaveAsTextでエクスポートされているようなのでよさそうだけど、テーブル定義などはXmlで出力されていて、うまく読めこめない状態になってしまう模様。ステータスはちょっと違うけど読み込めない旨のエラーがでる。
こうなってしまうとこの後どうにもならないので、新規ファイルにオブジェクトをインポートして再構成。
なので、フォームには閉じるコマンドボタンを設置し、コマンドボタン押下以外ではフォームが閉じれないようにしておく。やっぱだめかも。モーダル+ポップアップの方が確実かもしれん。
また、テンプレートに含まれるテーブル/フィールド名に等に "<" 、">"、 引用符等含めてはダメ。
フォーム/レポートなどはSaveAsTextでエクスポートされているようなのでよさそうだけど、テーブル定義などはXmlで出力されていて、うまく読めこめない状態になってしまう模様。ステータスはちょっと違うけど読み込めない旨のエラーがでる。
ラベル:
access 2010,
VBA,
メモ
access2010 ribbon startFromScratch
ribbon要素のstartFromScratchをいじって確かめた。
startFromScratch="true"とすることで組み込みタブは非表示となるが、
- TabPrintPreviewAccess(印刷プレビュー)も非表示になる
- クイックアクセスツールバーの設定をRibbonXmlで設定可能になる
- contextualTabs(組み込みツールタブ)は非表示にならない
起動時の設定、CurrentDb.Properties("CustomRibbonID")に指定したribbonXmlでの設定は、アプリケーション全体に反映。
印刷プレビュータブは表示したいという場合、
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon startFromScratch="true" > <tabs> <!-- idMsoで指定し明示する --> <tab idMso="TabPrintPreviewAccess" visible="true" /> </tabs> </ribbon> </customUI>※これが仕様なのかわからんけど、まぁ期待通りの動作はしている。
組み込みツールタブを非表示とする場合、
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <contextualTabs> <!-- idMsoで指定し明示する tabSetは他にもある--> <tabSet idMso="TabSetFormDatasheet" visible="false" /> </contextualTabs> </ribbon> </customUI>
ちょっと話外れて、組み込みタブ内の要素を設定することもできる。
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <tabs> <!--ホームタブ--> <tab idMso="TabHomeAccess"> <!--表示グループ--> <group idMso="GroupViews" visible="false" /> <!--クリップボードグループ--> <group idMso="GroupClipboard" visible="false" /> <!--レコードグループの後ろにマクログループを挿入--> <group idMso="GroupMacro" insertAfterMso="GroupRecords" /> </tab> </tabs> </ribbon> </customUI>
組み込みタブの制御はあまりないかもだけど、ちょこっとだけ変えたい場合とかに使うのかな。組み込みタブに要素を追加した場合、キャッシュに追加されてしまうようだから、削除したくてもできなくなるんではないかと思う。非表示にはできるんでないかい。
要素:ribbon,contextualTabs,tabSet
属性:startFromScratch
ラベル:
access 2010,
RibbonUI
2010/10/25
access2010 access2007 Runtimeベースでの配布時 その1
Runtime環境もしくはRuntimeモードで使用するaccessアプリケーションの配布時には、たとえコードが含まれていなくてもaccdeにしておくべき。
ちょっと悪い子への対策ということも含まれるが、accdbの状態で配布をした場合、配布先環境ががRuntimeであってもフォームの追加変更保存ができてしまう場合があるから。その他オブジェクトについては確認していないが、まぁおそらく同様だと思う。実際には必要なコンポーネントがなかったりするだろうから役にはたたないけど、配置コントロール修正削除とかできる。異常系の操作や動作ではなく可能で、各機能の仕様内での設定を重ねると可能になってしまう。でも、想定外の設定ということではあると思う。いらぬ心配だとは思うけど、クリック数回なのだからやっておいていいんじゃないかなと。
Runtimeとはなんぞやと思っていた。基本的には製品/Runtimeのいずれも同じもので、機能制限が何らかの方法で課せられているという認識でいたわけだが、これが大まかに実証されたということくらいでしかない。インストールされたRuntime版を修復しようとしたとき、シリアル投入のフォームが出せるわけで、実際にシリアルいれたら製品版になるかっていうのは多分ないだろうけど。できちゃったりして。
続くものがあるような気がするから、その1
ちょっと悪い子への対策ということも含まれるが、accdbの状態で配布をした場合、配布先環境ががRuntimeであってもフォームの追加変更保存ができてしまう場合があるから。その他オブジェクトについては確認していないが、まぁおそらく同様だと思う。実際には必要なコンポーネントがなかったりするだろうから役にはたたないけど、配置コントロール修正削除とかできる。異常系の操作や動作ではなく可能で、各機能の仕様内での設定を重ねると可能になってしまう。でも、想定外の設定ということではあると思う。いらぬ心配だとは思うけど、クリック数回なのだからやっておいていいんじゃないかなと。
Runtimeとはなんぞやと思っていた。基本的には製品/Runtimeのいずれも同じもので、機能制限が何らかの方法で課せられているという認識でいたわけだが、これが大まかに実証されたということくらいでしかない。インストールされたRuntime版を修復しようとしたとき、シリアル投入のフォームが出せるわけで、実際にシリアルいれたら製品版になるかっていうのは多分ないだろうけど。できちゃったりして。
続くものがあるような気がするから、その1
ラベル:
access 2010,
MS-Access,
Runtime,
メモ
2010/10/24
access2010 パッケージソリューションウィザード その8
インストール済みのパッケージソリューションウィザードを
[Accessのオプション]→[アドイン]→[管理(COMアドイン)]→[設定]→[COMアドイン]でチェックを外し、起動時にアクティブにしないように設定したら、以降アクティブにできなくなることがあった。いままでやってみたことないことだったからちょっと慌ててメモ。
Officeの修復/機能の削除追加で治るものかなとやってみたけど今一つ。で、やったおかげで余計に手間がかかった感がある。レジストリをAccessPW.14でキー検索し、通常に使用できるマシンと比較しながら復旧はできた。遠回りしたけど、復旧できるのはレジストリ1件の変更のみであることがわかった。
HKEY_CURRENT_USER\Software\Microsoft\Office\Access\Addins\AccessPW.14
LoadBehavior 値が2になってるはずだから3へ変更
特に変なことしてなければこれで復活するんじゃないかな。
Package Solution Wizard まとめはこちら
[Accessのオプション]→[アドイン]→[管理(COMアドイン)]→[設定]→[COMアドイン]でチェックを外し、起動時にアクティブにしないように設定したら、以降アクティブにできなくなることがあった。いままでやってみたことないことだったからちょっと慌ててメモ。
Officeの修復/機能の削除追加で治るものかなとやってみたけど今一つ。で、やったおかげで余計に手間がかかった感がある。レジストリをAccessPW.14でキー検索し、通常に使用できるマシンと比較しながら復旧はできた。遠回りしたけど、復旧できるのはレジストリ1件の変更のみであることがわかった。
HKEY_CURRENT_USER\Software\Microsoft\Office\Access\Addins\AccessPW.14
LoadBehavior 値が2になってるはずだから3へ変更
特に変なことしてなければこれで復活するんじゃないかな。
Package Solution Wizard まとめはこちら
ラベル:
access 2010,
パッケージソリューション,
メモ
2010/10/23
access2010 backstageをいじってみた その2
backstageにある組み込みtabとbuttonを非表示としたが、コマンドの実行を抑制したわけではない。
なので、commands要素内でcommandにenabled/onAction属性を設定しUIからの実行抑制っぽくしてみた。
enabled="false"のcommandは、コードで実行させると実行時エラーになる。onAction属性が設定されていると指定アクションが実行される。たぶん、きっと。全部確かめたわけでないし。
ちょっとした例外がある。backstageビューにある開く(FileOpen)ボタンについて。
backstage要素でvisible=falseとすることで表示はされなくなるが、commands要素で
<command isMso="FileOpen" onAction="actionHogehoge">
としていても、actionHogehogeは実行されない。実行させるためには、
<command isMso="FileOpenDatabase" onAction="actionHogehoge">
とする必要があったと思い込んでいる。フォームなどに紐付くリボンでcommands要素を設定するとあれれれ?ってなる。これは少し不可解なところなんだけど、access2007だとFileOpenDatabaseが使われていたが、access2010ではFileOpenが使用されているからかなぁと。
多分、問題ないと思うけどこんなことあるよってことで、[すべてのメニューを表示する]をOffにすると、リボンなどの表示はRuntimeモードと同じようになるっつーこと。
要素:backstage commands command
属性:idMso onAction
ラベル:
access 2010,
RibbonUI,
VBA
2010/10/21
access2010 backstageをいじってみた その1
いじったというか消しただけ。
backstage上の組み込みbutton要素/tab要素をvisible属性値で非表示を設定
<customUI xmlns="">
<backstage>
<button idMso="" visible="false" />
<tab idMso="" visible="false" />
</backstage>
</customUI>
要素:backstage button tab
属性:idMso visible
ラベル:
access 2010,
RibbonUI
access2010 CurrentDB.Properties("VBAArchitecture")
そういえば、CurrentDB.Properties("MDE")ってのがあったなと、ふと思い出しaccess2010でどうなってるのかなと確認していたところ。まぁ当然にあった。
で、 CurrentDB.Properties("VBAArchitecture")というのも確認できた。
accde/mde/adeを作成した場合
64bit Long で 2
なので、
CurrentDB.Properties("MDE")="T" で、CurrentDB.Properties("VBAArchitecture")が存在しない2007形式のファイルはaccess2007で作成されたものと判断できる。だからどうした。
で、 CurrentDB.Properties("VBAArchitecture")というのも確認できた。
accde/mde/adeを作成した場合
- CurrentDB.Properties("MDE")
- CurrentDB.Properties("VBAArchitecture")
64bit Long で 2
なので、
CurrentDB.Properties("MDE")="T" で、CurrentDB.Properties("VBAArchitecture")が存在しない2007形式のファイルはaccess2007で作成されたものと判断できる。だからどうした。
ラベル:
access 2010,
互換性
access2010 カスタムリボンを作ってみた その3 -マクロとプロシージャを割り当て-
また続き
リボンに配置したボタンのコントロール押下時にマクロとプロシージャを実行できるようにしてみる。
マクロはサブマクロの指定ができる。プロシージャはFunctionプロシージャで引数も可。
IRibbonUIオブジェクトとか使用していないから動的な処理は無理だけど、なんにせよさっくりと。
ラベル:
access 2010,
RibbonUI
access2010 カスタムリボンを作ってみた その2 -buttonを追加-
続き
フォームにリボンを割り当てて、フォーム開いたときに該当のリボンを表示
組み込みのコマンドはidMsoで指定。イメージだけを使用する場合は、imageMsoで指定。
組み込みタブを表示/非表示は、ribbonタグstartFromScratchで指定すると。
startFromScratch=trueを起動時の設定でribbonで設定したとき/フォームに割り当てたribbonで設定したときそれぞれどうなるかを見ておかないと。
ラベル:
access 2010,
RibbonUI
access2010 カスタムリボンを作ってみた その1
つらつらーと作ってみた。
カスタムリボンを使用するにあたり、RibbonXmlをどの方法でキャッシュさせるかなんだけど、USysRibbonsテーブルを使うのが一番シンプルなのは明白。フィールドをRibbonName RibbonXml とすることで自動的に探して読み込んでくれる。実際にキャッシュされるのは、該当のリボンを最初に使用するときになる。他の手段として
・ファイルから読み込む
・C/S環境でServerから取り出して読み込む
・コードでRibbonXmlを生成して読み込む
など、いろいろ考えられるわけで。
カスタムリボン作成時には、[Accessのオプション]→[クライアントの設定]→[アドインユーザ-インターフェイスに関するエラーを表示する]をOnにすればエラー情報が見れるようになる。
ラベル:
access 2010,
RibbonUI
2010/10/20
Office365 おもしろそう
Access Team Blog
http://blogs.msdn.com/b/access/archive/2010/10/19/office-365-and-access-web-databases.aspx
Office365
http://office365.microsoft.com/en-US/online-services.aspx
つら~と、詳細見ると、Office 365 for small buisinessesが1~25ユーザ(Max 50)の中小向けで、$6 / €5.25 / ¥600 per user per month。
http://blogs.msdn.com/b/access/archive/2010/10/19/office-365-and-access-web-databases.aspx
Office365
http://office365.microsoft.com/en-US/online-services.aspx
つら~と、詳細見ると、Office 365 for small buisinessesが1~25ユーザ(Max 50)の中小向けで、$6 / €5.25 / ¥600 per user per month。
- Office Web Apps web productivity applications
- Exchange Online for email, mobile access, calendar, contacts , anti-virus, anti-spam
- SharePoint Online for team sites, Access services, and an easy-to-build public website
- Lync Online for instant messaging and online meetings
- 24x7 moderated community-based support
- Simplified setup and management
2010/10/19
access2010 access2007 RibbonUI設定の共通化
いろいろ考えるとややこしいのでパターンだけメモ
onActionを =OptionOnClick() としているのでOfficeObjectLibraryの参照はなくてもいい。
2010で製造時14.0を参照していても、2007が12.0に読み替えてるから(思い込みじゃないか)、コールバックでもいい。
2007はofficeMenu/2010はbackStageを振り分ける。contextualTabsもあったかな。
カレントデータベースのリボン名を予め設定
AutoExecでCreateRibbonを実行
今のところ無事作動。
とはいえ、あんまり使えないか。ソースコードありきの互換性だし。
#if vba6 = 1 then
const flg = 0
#else
const flg = -1
#end if
にして、a2007でaccde化したらa2010(32)でも動くかもしれん。
onActionを =OptionOnClick() としているのでOfficeObjectLibraryの参照はなくてもいい。
2010で製造時14.0を参照していても、2007が12.0に読み替えてるから(思い込みじゃないか)、コールバックでもいい。
2007はofficeMenu/2010はbackStageを振り分ける。contextualTabsもあったかな。
カレントデータベースのリボン名を予め設定
AutoExecでCreateRibbonを実行
今のところ無事作動。
とはいえ、あんまり使えないか。ソースコードありきの互換性だし。
#if vba6 = 1 then
const flg = 0
#else
const flg = -1
#end if
にして、a2007でaccde化したらa2010(32)でも動くかもしれん。
Option Compare Database Option Explicit #If VBA7 = 1 Then Const flg = -1 #Else Const flg = 0 #End If Public Function OptionOnClick() MsgBox "OptionButtonClick" End Function Function CreateRibbon() On Error GoTo ErrHnd Dim xdoc As New DOMDocument Dim xelem(10) As IXMLDOMElement Set xelem(0) = xdoc.createElement("customUI") If flg Then xelem(0).setAttribute "xmlns", "http://schemas.microsoft.com/office/2009/07/customui" Else xelem(0).setAttribute "xmlns", "http://schemas.microsoft.com/office/2006/01/customui" End If xdoc.appendChild xelem(0) Set xelem(1) = xdoc.createElement("commands") xelem(0).appendChild xelem(1) Set xelem(2) = xdoc.createElement("command") xelem(2).setAttribute "idMso", "ApplicationOptionsDialog" xelem(2).setAttribute "onAction", "=OptionOnClick()" xelem(1).appendChild xelem(2) Set xelem(1) = xdoc.createElement("ribbon") xelem(1).setAttribute "startFromScratch", "true" xelem(0).appendChild xelem(1) ' Debug.Print xdoc.XML Application.LoadCustomUI "backoffice", xdoc.XML Done: Exit Function ErrHnd: If Err.Number <> 32609 Then MsgBox Err.Number & vbCrLf & Err.Description End Function
ラベル:
access 2010,
MS-Access,
RibbonUI,
VBA,
メモ
access2010 ribbonUI テストコード
'Form Option Compare Database Option Explicit Private Sub Form_Open(Cancel As Integer) rbn01.CreateRibbon Me.RibbonName = rbn01.rbnName End Sub
'module:rbn01 Option Compare Database Option Explicit Public Const rbnName = "rbn01" Private rbn As IRibbonUI Public Function Onload(ribbon As IRibbonUI) Set rbn = ribbon End Function Sub CreateRibbon() If Not rbn Is Nothing Then Exit Sub On Error GoTo ErrHnd Dim xdoc As New DOMDocument Dim xelem(10) As IXMLDOMElement Dim i As Integer, j As Integer Set xelem(0) = xdoc.createElement("customUI") xelem(0).setAttribute "xmlns", "http://schemas.microsoft.com/office/2009/07/customui" xelem(0).setAttribute "onLoad", "Onload" xdoc.appendChild xelem(0) Set xelem(1) = xdoc.createElement("ribbon") xelem(1).setAttribute "startFromScratch", "true" xelem(0).appendChild xelem(1) Set xelem(2) = xdoc.createElement("tabs") xelem(1).appendChild xelem(2) For j = 0 To 8 Set xelem(3) = xdoc.createElement("tab") xelem(3).setAttribute "id", "tab" & Format(j, "00") xelem(3).setAttribute "label", "タブ" & Format(j, "00") xelem(2).appendChild xelem(3) Set xelem(4) = xdoc.createElement("group") xelem(4).setAttribute "id", "group" & Format(j, "00") xelem(4).setAttribute "label", "グループ" & Format(j, "00") xelem(3).appendChild xelem(4) For i = j * 1000 To (j + 1) * 1000 - 1 Set xelem(5) = xdoc.createElement("button") xelem(5).setAttribute "id", "button" & Format(i, "0000") xelem(5).setAttribute "label", "B" & Format(i, "0000") xelem(5).setAttribute "imageMso", "HappyFace" xelem(4).appendChild xelem(5) Next Next ' Debug.Print xdoc.XML Application.LoadCustomUI rbnName, xdoc.XML Done: Exit Sub ErrHnd: If Err.Number <> 32609 Then MsgBox Err.Number & vbCrLf & Err.Description End Sub
ラベル:
access 2010,
RibbonUI,
VBA
2010/10/18
access2010 テキスト型フィールドのフィールドサイズ変更
0~255の数値であるのにインフォメーションが出現し、サイズを修正できない。
どうやらオブジェクトデザイナーの設定値に影響を受けている模様。オブジェクトデザイナーでの設定値が50の場合、フィールドサイズ変更は0~50の間しか受け付けてくれない。Webテーブルの場合、デザインビューを使用することができないからちょっと困るなぁ。
なので、オブジェクトデザイナーの設定値は、最大値:255にしておく方がよい場合がある。
不具合じゃねぇの?と、サポートへ。
お返事がありました。不具合です。ありがちなパターンで2通り、目をつぶる/いつのまにか直すでしょう。と、いうのが私の予想
ラベル:
access 2010,
メモ,
不具合
access2010 ALTER COLUMN に問題アリ
access2010/64bitでALTER COLUMNが使用できない状況。
エラー:3420 オブジェクトが正しくないか、現在設定されていません。 となる。
対処方法が解らんのでサポートへ。32bitは問題ない。
お返事きました。直さないといけないリストに載ってるそうです。SP1予定って感じ。修正スケジュールは未定。予定は未定。
実装したい場合は、ADOやらDAOでフィールドを削除して追加して更新。要は使わなきゃいい。
エラー:3420 オブジェクトが正しくないか、現在設定されていません。 となる。
対処方法が解らんのでサポートへ。32bitは問題ない。
お返事きました。直さないといけないリストに載ってるそうです。SP1予定って感じ。修正スケジュールは未定。予定は未定。
実装したい場合は、ADOやらDAOでフィールドを削除して追加して更新。要は使わなきゃいい。
Option Compare Database Option Explicit Sub test() On Error GoTo ErrHnd Dim db As Database Set db = CurrentDb db.Execute "CREATE TABLE test01 (ID AUTOINCREMENT PRIMARY KEY, f01 char(20), f02 char(30))" '64bitはALTER COLUMNに問題あり db.Execute "ALTER TABLE test01 ALTER COLUMN f01 char(30)" db.Execute "ALTER TABLE test01 ALTER COLUMN f01 memo" Done: db.Execute "DROP TABLE test01" Set db = Nothing Exit Sub ErrHnd: MsgBox Err.Number & vbCrLf & Err.Description Resume Next End Sub
ラベル:
access 2010,
メモ,
不具合
2010/10/14
access2007 ランタイム環境でのオプション/セキュリティ設定
access2007 Runtimeでセキュリティセンターの設定/Accessのオプションを設定する方法
レジストリを直接操作するより安全でいいんじゃないかな。Office2007が必須だけど大半は入ってるでしょ。なんでRuntimeでもできるのかちょっと考えるけど。
access2010からは使えない方法
撮り直しはしませんけど、office2007standard+access2007runtimeの組み合わせでできてますんで、そこんとこ、どうぞよろしく。
DoCmd.RunCommand acCmdStartupProperties コマンドの実行/起動時の設定と同意
レジストリを直接操作するより安全でいいんじゃないかな。Office2007が必須だけど大半は入ってるでしょ。なんでRuntimeでもできるのかちょっと考えるけど。
access2010からは使えない方法
撮り直しはしませんけど、office2007standard+access2007runtimeの組み合わせでできてますんで、そこんとこ、どうぞよろしく。
DoCmd.RunCommand acCmdStartupProperties コマンドの実行/起動時の設定と同意
2010/10/10
access2010 オブジェクトの色指定/Tint/Shade
ThemeColorIndexはまだ良いとして、Shade/Tint がよくわからないというので。
TintとShadeの関係はこんな感じ。
Tint = 0 であれば白100%、Tint = 100 Shade = 0 であれば黒100%
Tint = 100 Shade = 100 が、ThemeColorの標準な色
TintとShadeの関係はこんな感じ。
Tint = 0 であれば白100%、Tint = 100 Shade = 0 であれば黒100%
Tint = 100 Shade = 100 が、ThemeColorの標準な色
ラベル:
access 2010,
VBA,
メモ
access2010 セキュリティセンター 信頼済みドキュメント
開発時にセキュリティの警告が出ないのに、accdb/accdeからaccdrに拡張子を変更してRuntimeモード起動すると、セキュリティに関する通知が出る件についての回答。
Office2010から[信頼済みドキュメント]が追加されている。
セキュリティの警告が出ていて、[コンテンツの有効化]を押下した場合、該当ファイルのフルネームでレジストリに登録される仕組みになっています。なので、リネームすると信頼済みドキュメントに該当しなくなり、[セキュリティの警告]/[セキュリティに関する通知]が出現ということです。
[信頼できる場所]のように追加するUIはなし。すでに登録されている[信頼済みドキュメント]の情報を消すにはクリアを押下。[信頼済みドキュメントを無効にする]にチェックをいれるとOffice2007相当の使い方ができるのではないかと。
Office2010から[信頼済みドキュメント]が追加されている。
セキュリティの警告が出ていて、[コンテンツの有効化]を押下した場合、該当ファイルのフルネームでレジストリに登録される仕組みになっています。なので、リネームすると信頼済みドキュメントに該当しなくなり、[セキュリティの警告]/[セキュリティに関する通知]が出現ということです。
[信頼できる場所]のように追加するUIはなし。すでに登録されている[信頼済みドキュメント]の情報を消すにはクリアを押下。[信頼済みドキュメントを無効にする]にチェックをいれるとOffice2007相当の使い方ができるのではないかと。
ラベル:
access 2010,
Office 2010,
メモ
access2010 Microsoft Common Control MSComCtl MSComCt2
access2010に限っての話ではなく、Office2010(64bit)の件。
access2010でTreeViewが使えないんだけどって質問に対して。
ちなみに、Office2010 KB情報
access2010でTreeViewが使えないんだけどって質問に対して。
- 64 ビット版 Office について
- Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性
- Compatibility Between the 32-bit and 64-bit Versions of Office 2010
- Office 2007 以前のバージョンから Office 2010 へアップグレード インストールした場合、UserForm 上の Common コントロールを表示できない
ちなみに、Office2010 KB情報
ラベル:
access 2010,
Office 2010,
互換性
2010/10/08
access2010 access2007 分割フォームのモジュール変数
質問に対しての回答というか対策方法。
データシート側で、モジュール変数を参照できない件について
基本的な対策としては、TempVarsを使用と考えられます。
必ず取得できるのは、TempVars/PublicなConst/PrivateなConstの模様。
上記コードで確認できる差はFormCurrent時イベント。2010ならばすべて取得可能。
仕様というか不具合というか、たぶん修正されないと思われるレベルの事象かな。
データシート側で、モジュール変数を参照できない件について
基本的な対策としては、TempVarsを使用と考えられます。
Option Compare Database Option Explicit Private Const ConstVar = "Constvar" Public PublicVar Private PrivateVar Private Sub ShowVars() Debug.Print "PublicConstVar:" & PublicConstVar Debug.Print "ConstVar:" & ConstVar Debug.Print "PublicVar:" & PublicVar Debug.Print "PrivateVar:" & PrivateVar Debug.Print "TempVar:" & TempVars("tVar") End Sub Private Sub Form_Close() TempVars.RemoveAll End Sub Private Sub Form_Open(Cancel As Integer) PublicVar = Now PrivateVar = Now TempVars("tVar") = Now End Sub Private Sub Form_Current() Debug.Print "*** Form_Current ***" ShowVars End Sub Private Sub Field01_BeforeUpdate(Cancel As Integer) Debug.Print "*** Field01_BeforeUpdate ***" ShowVars End Sub Private Sub Field02_AfterUpdate() Debug.Print "*** Field02_AfterUpdate ***" ShowVars End Sub
Option Compare Database Option Explicit Public Const PublicConstVar = "PublicConstVar"access2010/access2007の間でも取得可否が異なるので確認しながらということになります。
必ず取得できるのは、TempVars/PublicなConst/PrivateなConstの模様。
上記コードで確認できる差はFormCurrent時イベント。2010ならばすべて取得可能。
仕様というか不具合というか、たぶん修正されないと思われるレベルの事象かな。
ラベル:
access 2010,
MS-Access,
VBA,
メモ,
互換性
2010/10/03
access2010 access2007 Runtimeのセキュリティアラートのこと
最近確かめた事があるのでメモ。
Runtimeを使用しaccessアプリケーションを配布したとき、起動時に表示されるセキュリティに関する通知を表示させない方法。製品版で表示されるセキュリティ警告も同じ。
リンクテーブル作成時についてはこっち。
1.パッケージソリューションを使用する。
ウィザードを使用すると必要な設定をしてくれるので、簡易で確実にできる。アプリケーションアンインストールで書き込まれたレジストリを消してくれる。但し、2010のウィザードについてはレジストリ設定が間違っているので修正/追加する必要がある。詳細1 詳細2 まとめ
2.レジストリを手作業で変更する。
RegEditでレジストリを編集し、信頼できる場所を設定する。
HKEY_CURRENT_USERに登録すればカレントユーザに、HKEY_LOCAL_MACHINEに登録すればマシン全体に影響する。警告自体を出さない方法もあるけど、セキュリティ的にどうなんですか?と。
3.Runtimeでセキュリティセンターの設定を使用
2007であれば、Runtimeであっても[Accessのオプション]を使うことができる。但し、Office2007がインストールされていること。2010はダメだった。
CommandBars.FindControl(1, 3627).Execute を実行。
DoCmd.RunCommand acCmdStartupProperties ってのもあったことをつい先ほど発見
なんかこの落書きへのアクセスがやたら多い、、、。項番3についての落書きは、ここにも。
4.インストーラを自作する
まぁ、あんまりコストをかけたくないから、フリーのツールだとWiXとか。開発製品持ってるならそっちでインストールプロジェクトをこさえる。その時にレジストリを追加。
5.実行時に追加する
Win32API使ったコードで実行時に追加する。ただし、HKCU。そんでもって不要になったときの削除をどうするか考えておく。
Runtimeを使用しaccessアプリケーションを配布したとき、起動時に表示されるセキュリティに関する通知を表示させない方法。製品版で表示されるセキュリティ警告も同じ。
リンクテーブル作成時についてはこっち。
1.パッケージソリューションを使用する。
ウィザードを使用すると必要な設定をしてくれるので、簡易で確実にできる。アプリケーションアンインストールで書き込まれたレジストリを消してくれる。但し、2010のウィザードについてはレジストリ設定が間違っているので修正/追加する必要がある。詳細1 詳細2 まとめ
2.レジストリを手作業で変更する。
RegEditでレジストリを編集し、信頼できる場所を設定する。
HKEY_CURRENT_USERに登録すればカレントユーザに、HKEY_LOCAL_MACHINEに登録すればマシン全体に影響する。警告自体を出さない方法もあるけど、セキュリティ的にどうなんですか?と。
3.Runtimeでセキュリティセンターの設定を使用
2007であれば、Runtimeであっても[Accessのオプション]を使うことができる。但し、Office2007がインストールされていること。2010はダメだった。
CommandBars.FindControl(1, 3627).Execute を実行。
DoCmd.RunCommand acCmdStartupProperties ってのもあったことをつい先ほど発見
なんかこの落書きへのアクセスがやたら多い、、、。項番3についての落書きは、ここにも。
4.インストーラを自作する
まぁ、あんまりコストをかけたくないから、フリーのツールだとWiXとか。開発製品持ってるならそっちでインストールプロジェクトをこさえる。その時にレジストリを追加。
5.実行時に追加する
Win32API使ったコードで実行時に追加する。ただし、HKCU。そんでもって不要になったときの削除をどうするか考えておく。
ラベル:
access 2010,
MS-Access,
Runtime,
VBA,
パッケージソリューション
登録:
投稿 (Atom)