MS-ACCESS 2000 の隠しオブジェクト「WizHookオブジェクト」について調査してみました。 その調査結果を報告します。 ●サンプル動作の環境 ・OSは、Windows XP Home を、「C:\WINDOWS」にインストール ・ACCESS 2000 SP-3 を、「C:\Program Files\Microsoft Office 2000」にインストール ・日本語環境 ●なお、数箇所の参考にさせていただいたサイトがありますが、特に明記しません。 もし、そちらサイトのポリシー等に倫理的抵触しているようならば、 応援していただいた方々には申し訳ありませんが、このサイトの閉鎖も考慮しております。
概要 今回は、Access 2000 以降で [ファイルを開く] ダイアログを表示する方法です。 .....あっ、今アナタ、こう思いましたね? [ファイルを開く] ダイアログ? FAQ だね、FAQ。 Access 2000 には [ファイルを開く] ダイアログを表示する機能は無いんだから。 アレでしょ、Developer 版に付属しているコモンダイアログ コントロールを使うか、Excel 経由で GetOpenFileName メソッドを呼び出すか、さもなくば Windows API を使うっていう。 あ、それとも Access 2002 から追加された新機能の FileDialog メソッドを使う方法かな? でもそれだと Access 2000 では使えないから、やっぱり最初の 3 つの方法でしょ。 そんなの他のサイトにもたくさん載ってるし、毎週どこかの掲示板に上がってくる定番ネタじゃ
以下の関数を標準モジュールに貼り付ける。 Function GetFileName(OpenOrSaveFlg As Boolean) As String Dim returnValue As Integer Dim strFilePath As String WizHook.Key = 51488399 'WIZHOOKを有効化する returnValue = WizHook.GetFileName( _ 0, "", "", "", strFilePath, "", _ "テキストファイル (*.txt,*.csv,*.tab)|*.txt|*.csv|*.tab", _ 0, 0, 0, OpenOrSaveFlg _ ) WizHook.Key = 0 ' WizHook 無効化 GetFileName = strFilePath End Function 呼び出す側のプログラム例
記事概要 AccessのVBAでは、[ファイルを開く]もしくは、[名前を付けて保存]ダイアログボックスを表示するための標準的なメソッドが用意されていません。 ExcelにあるようなGetOpenFilename、GetSaveAsFilenameメソッドがなく、これらの[ファイルを開く]、[名前を付けて保存]ダイアログボックスの機能を簡単に利用すことができません。 以下は、非公開オブジェクトである"WizHook"オブジェクトを利用してAccessのVBAで[ファイルを開く]もしくは、[名前を付けて保存]ダイアログボックスを表示するために作成したユーザー定義関数のサンプルプログラムを覚書しておきます。 WizHookオブジェクトは、非公開のオブジェクトですが、このオブジェクトを利用することによってAccessのVBAでも[ファイルを開く]、[名前を付けて保存]ダイアログボックスをAPIなど
以前Accessの非公開オブジェクト"WIZHOOK"オブジェクトを使用して[ファイルを開く]ダイアログボックスを表示して利用するサンプルプログラムを記事にしたけれど、今回はAccessの"FileDialog"オブジェクトを使用して[ファイルを開く]ダイアログボックスを表示させて利用するサンプルプログラムを覚書。 動作させた環境はAccess 2010。 ちなみにFileDialogオブジェクトのヘルプを見ると、 「定数 msoFileDialogOpen および定数 msoFileDialogSaveAs は Access ではサポートされていません。」 と記載されいるので、ここでのサンプルプログラムは全部MSサポート対象外となるので、使う際は自己責任で。 FileDialogオブジェクトを使用した[ファイルを開く]ダイアログボックスを表示するサンプルプログラムの動作前提条件 後述する
ExcelVBAからワークシート関数呼び出し Excelの関数には、Visual Basic関数とワークシート関数の2種類があります。 ワークシート関数はワークシートのセル内に入力して使用できる関数で、 VB関数はVBA(マクロ)内で使用できる関数です。 同名の関数でも動作が全く違ったり、似ていても動作が微妙に違ったりします。 Ascはワークシート関数では全角文字列を半角に変換するが、VB関数では先頭一文字の文字コードを返す LenBはワークシート関数では半角文字を1バイト・全角文字を2バイトとしてバイト数を返すが、VB関数では半角文字も全角文字も2バイトとしてバイト数を返す。 VBA側から、ワークシート関数を呼び出すことができます。 Applicationのプロパティとして取得できるWorksheetFunctionオブジェクトが、VBAから呼び出せるワークシート関数を保持しています。
文字列の長さを取得する(Len/LenB関数) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート Len関数は、引数に指定した文字列の文字数を、LenB関数はバイト数を返します。 次のサンプルは、半角文字列、全角文字列、半角と全角が混在した文字列について、 文字数とバイト数をメッセージボックスに表示します。 ●サンプル1● Sub Sample() Dim HalfStr As String, FullStr As String, MixedStr As String HalfStr = "moug" '半角4文字 FullStr = "モーグ" '全角3文字 MixedStr = "Q&A掲示板" '半角3文字全角3文字 MsgBox HalfStr & " : " & Len(HalfStr) & vbCrLf & _ FullStr &
「キー」と「値」がセットになっていて、「神奈川県」というキーで「横浜市」という値を検索できるような仕組みです。Dictionaryオブジェクトでは、こうした連想配列にデータ(キーと値のセット)を追加したり、検索したり、任意のキーがすでに存在しているかどうかを調べことなどができます。なお、連想配列では同じキーを登録できません。 Dictionaryオブジェクトを使って重複しないリストを作成するには、次のように考えます。 セルA2からセルA8まで順にデータを取得します 取得したデータが連想配列に登録されていなかったら登録します 取得したデータが連想配列に登録されていたら何もしません 流れはこんな感じです。さて登録するデータですが、連想配列では「キー」と「値」の二つが必要です。今回のケースでは「名前」データしかありません。「名前」を「キー」にするとして、「値」には何を登録したらいいのでしょう。
◆関数名:fncWriteCheck 指定したファイルが書込み可能な状態で開けるかチェックします。 書き込み状態で開ける場合、Trueの場合ファイルは開きっぱなしにします。 ファイルが開いているか確認する関数fncXlsOpenと併用します。 ◆引数: strBookPath(String型)・・・チェックするブックのパス strBookName(String型)・・・チェックするブック名 ◆戻り値: ファイルが未使用中ならTrue、ファイルが使用中ならFlase コード Public Function fncWriteCheck(strBookPath As String, strBookName As String) As Boolean fncWriteCheck = True '◆ファイルを読み取り専用で開いている場合はいったん閉じる If fncXlsOpen(strBookNa
ある程度しっかりしたシステムをマクロで作成するとき、シートを非表示にするケースがよくあります。それは作業用に一時的なシートを使うような場合です。何らかの複雑な計算したり、グラフ用にダミーのリストを作成したりするとき、その動作をユーザーに見せたくありません。そんなときは、作業用として新しいワークシートを挿入し、そのシートを非表示にしてしまうと便利です。 シートの表示はVisibleプロパティ シートの表示と非表示を切り替えるには、WorksheetオブジェクトのVisibleプロパティを操作します。VisibleプロパティにTrueを設定すると表示され、Falseで非表示になります。次のコードはSheet2を非表示にしてメッセージを表示した後で、Sheet2を再表示します。 Sub Sample06() Worksheets("Sheet2").Visible = False MsgBox
ご訪問いただいたお客様へのお知らせ Information for customers visiting this Web site from SpinNet アクセスいただいたWebサービスは提供を終了いたしました。 長年にわたり、多くの皆様にご利用いただきましたことを心よりお礼申し上げます。 SpinNetトップページへ The Web service you are trying to access has been terminated. We would like to thank all of you for your patronage over the years. Go to the SpinNet
これまで人の思考をコンピューター上に具現化する、機能的側面から プログラミング言語は体系化や解説がなされてきました。当ホーム ページではプログラミング言語の構造や文法そのものが、逆に人の 思考や概念にどのような影響を及ぼすかを中心に分析しております。
前回書いたユーザー定義型のコードについてもう少し詳しく説明します。 ' 科目のユーザー定義型 Public Type Kamoku Name As String '科目名 Score As Variant '点数 End Type と ' 科目の配列を作成します。 Dim arryKamoku() As Kamoku でしたね。 ユーザー定義型はオリジナルの変数の型となる。 Publicは他のモジュールでも使いたいので付けています。Typeステートメントがこれからユーザー定義型を作るよ。という意味になり、その後にオリジナルの名前「Kamoku」があります。Typeの終わりはEnd Typeとなります。 その後、NameとScoreという2つの変数を作成していますね。 これで、KamokuはNameとScoreの2つの変数を扱うことができます。当然ですが、この中にはいくつでも変数を作成でき、
VBAの「ユーザー定義型」変数は、Cの構造体と同様のものである。 しかし、入門書には実践的な使い方が書いていないので、まとめておく。 Private Type uHoge '型定義:Cのstructに同じ ID As Long name As String End Type Private Sub MyInt () Dim Hoge() As uHoge 'uHoge型変数の動的配列宣言 Const MAX = 2 ReDim Hoge(MAX) '配列の個数を再定義(2個) '内部変数の指定方法はHoge(n).IDとするが、以下のようにWithも使える。 With Hoge(0) .ID = 55 .name = "taro" End With With Hoge(1) .ID = 88 .name = "Bill" End With '初期の(0)の"55:taro"を表
ユーザー定義型は、C言語でいう構造体のような仕組みです。 一般的な変数には、1つの値しか格納できません。配列には複数の値を同時に格納できますが、それは同じ型の値です。名前(文字列型)と年齢(長整数型)のように、異なる型の値をセットにして格納するには、配列ではなくユーザー定義型が便利です。ユーザー定義型は、次のようにして使います。 Type ○○ 要素1 As 型 要素2 As 型 End Type Sub Sample() Dim 変数名 As ○○ 変数名.要素1 = 値 変数名.要素2 = 値 End Sub ユーザー定義型の定義は、宣言セクションでします。宣言セクションとは、モジュールの一番上に記述したプロシージャの、さらに上の部分です。変数の宣言を強制するオプションを設定したとき、モジュールに挿入されるOption Explicitや、APIの宣言やパブリック変数の宣言などをするの
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く