ACCESSのVBAを使ったプログラムを製造していますが、ACCESSのVBAの場合、どうしても利用者に見えてしまいます。
EXCELのときは、確かコンパイルしてXLA形式にすると利用者からは見えなくなったのですが。
ACCESSのVBAを利用者から隠す方法を、どなたかご教授頂けませんか?
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

AccessをデフォでインストールするだけでMDEの作成は使える筈ですが・・・



・モジュールの編集画面で「全てのモジュールをコンパイル」は実行できますか?
・参照設定でエラーが出ている部分はありませんか?

この2点を確認してみてはどうでしょう?
これでダメだと再インストールですかね?
    • good
    • 0
この回答へのお礼

ありがとうございました。
コンパイルエラーが発生しておりました。エラー除去後、解決致しました。

お礼日時:2001/12/25 13:34

パスワードを設定する場合は、VBEから「ツール」「??のプロパティー」「保護」のタブでパスワードを設定する。



ACCESSのウインドウから「ツール」「データベースユーティリティ」「MDEファイルの作成」というのもあります。

MDEファイルは作ったことがないので、詳細は聞かないでください。
    • good
    • 0

MDEファイルを作成すれば、デザイン等も変更不可になります


メニューバー → データベースユーティリティ → MDEファイルの作成

この回答への補足

早速の回答ありがとうございます。

早速やってみましたが、「MDEファイルの作成」がディメットされていて、押せません。何か、問題があるのでしょうか?
(MSGBOXで文字列を出力すと言う簡単なモジュールを作って実験してみましたが、やっぱり駄目でした)

当方、ACCESS2002です。 すいません、宜しくお願い致します。

補足日時:2001/12/21 14:46
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

早速やってみましたが、「MDEファイルの作成」がディメットされていて、押せません。何か、問題があるのでしょうか?
(MSGBOXで文字列を出力すと言う簡単なモジュールを作って実験してみましたが、やっぱり駄目でした)

当方、ACCESS2002です。 すいません、宜しくお願い致します。

お礼日時:2001/12/21 14:44

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess VBA Split利用方法

お世話になります。

VBAを勉強している最中です。
Accessを利用して、txtファイルをインポート後、テーブルの項目を配列利用して
カンマ区切りにしたいのと、Splitを利用して、配列を条件分岐に利用して、テーブルに
書き込みをしたいとおもってます。

おそらく基本的なことで自分で勉強するべきと思うのですが
漠然なイメージしかない状態で、ヒントやこういう方法があるなど
教えていただけますでしょうか

基本的な使い方ですと
Private Sub XXX_Click()
str = Split("あああ いいい ううう")
  MsgBox str(1)
End Sub

上記の用な利用方法と思いますが、このような使い方ではなく
test(0)のような使い方をして、条件分岐で利用したいと
おもってます。

イメージとしては、下記のようなことをイメージしてます。

Public Sub Test()

  Dim test() As String
Dim row As String
  Dim iNum1 As Long,
  Dim iNum2 As Long
  
  DoCmd.SetWarnings False
  DoCmd.RunSQL "DELETE * FROM data"
 DoCmd.TransferText acImportFixed, "インポート定義", "data", "d:\data.txt"
  DoCmd.SetWarnings True

  iNum1 = 0
  iNum2 = 0

  Do While xxx
     If test(0) = 0 Then 
        iNum1 = iNum1 + 1
iNum2 = 1
     Else
        xxxx
     End If

  Loop
End Sub

ここでSplitを利用してどのように指定するのが望ましいのか考えてしまってます。
test = row.Split(" ") を利用する場合、どのように連結(row)させるのかが不明です。

知識不足もあり、説明がわかりづらいと思うのですが、よろしくお願いします。

お世話になります。

VBAを勉強している最中です。
Accessを利用して、txtファイルをインポート後、テーブルの項目を配列利用して
カンマ区切りにしたいのと、Splitを利用して、配列を条件分岐に利用して、テーブルに
書き込みをしたいとおもってます。

おそらく基本的なことで自分で勉強するべきと思うのですが
漠然なイメージしかない状態で、ヒントやこういう方法があるなど
教えていただけますでしょうか

基本的な使い方ですと
Private Sub XXX_Click()
str = Split("あああ いいい ううう")
  M...続きを読む

Aベストアンサー

No4について少し説明をしておきます。
No4のSub cmdFile2() について、

  Do While Not EOF(1)
    Line Input #1, LineofText
    '配列にデータを格納
    arrayText = Split(LineofText, ",")
    '配列の要素をテーブルに格納
      rs.AddNew
      For i = 0 To UBound(arrayText)
      rs.Fields(i) = arrayText(i)
      Next i
      rs.Update
  Loop


arrayTextの型はVariantですが、配列を格納する場合は
この型で行ないます。

(1)
Line Input #1, LineofText
はテキストファイルのデータを一行ずつ変数LineofTextに読み込む
コードで、たとえば、LineofTextに
関東,東京,群馬,神奈川,千葉
のようにデータが格納されている考えてください。

(2)
次に、
arrayText = Split(LineofText, ",")
によって、カンマを区切りとして配列を
arrayTextに作ります。

(3)
ここからが肝要ですが、補足に

>Dim aaa() As String のような状態にした場合、
>そこからどうテーブルの列をを認識させて、
>aaa(0)がフィールド1の配列として認識させる
>ことができるのかがよくわかっていないといいますか・・・
>わかりづらいでしょうか

とありますが、

    '配列の要素をテーブルに格納
      rs.AddNew
      For i = 0 To UBound(arrayText)
      rs.Fields(i) = arrayText(i)
      Next i
      rs.Update

は、ちょうどこの部分を表しているところで、
rs.Fields(i) = arrayText(i)
の、左側はテーブルのi番目のフィールドを表し、右側は
配列のi番目の要素を表しています。今、テーブルと
テキストファイルの列の数は同じとしているので、
rs.Fields(i) = arrayText(i)
のようにして、テーブルの列の位置と、配列の要素の位置
を簡単に同期させることができます。


(4)
一つの行の処理が終わったら、
Do While Not EOF(1)

Loop
によって、次の行に進み、データを同様に取得します。
なお、テーブルの次の行に新しくデータを格納するのは、
rs.AddNew

rs<Update
のくみあわせによって、新しい行にレコードを追加する
ことができることになります。そして新たにiは0から
始まるので行の先頭からレコードを追加できる、と
いうことになります。


なお、テキストファイルにNullがある場合、たとえば、

関東,東京,,神奈川,千葉
関西,大阪,兵庫,,奈良
中国,広島,岡山,鳥取,山口

のように、ところどころデータが空の部分がある場合、
No4のSub cmdFile2()を実行すると、長さが0の文字列
を格納できません、といったエラーが出ます。

そういった場合は、まさに条件分岐で、たとえば、

  Do While Not EOF(1)
    Line Input #1, LineofText
    '配列にデータを格納
    arrayText = Split(LineofText, ",")
    '配列の要素をテーブルに格納
      rs.AddNew
      For i = 0 To UBound(arrayText)
      If arrayText(i) <> "" Then
      rs.Fields(i) = arrayText(i)
      Else
      rs.Fields(i) = "空"
      End If
      Next i
      rs.Update
  Loop

のようにして、処理を行ないます。

なお、Accessのテーブルのフィールドの型は
テキスト型としています。

以上です。

No4について少し説明をしておきます。
No4のSub cmdFile2() について、

  Do While Not EOF(1)
    Line Input #1, LineofText
    '配列にデータを格納
    arrayText = Split(LineofText, ",")
    '配列の要素をテーブルに格納
      rs.AddNew
      For i = 0 To UBound(arrayText)
      rs.Fields(i) = arrayText(i)
      Next i
      rs.Update
  Loop


arrayTextの型はVariantですが、配列を格納する場合は
この型で行ないます。

(1)
Line Inpu...続きを読む

QACCESS VBAで別のACCESS(mdb)を起動できますか

ACCESS VBAで別のACCESS(mdb)を起動できますか?

その場合 呼び出し元の
ACCESSは、終了しますか?

できれば終了したほうが良いです。

教えてください。

よろしくお願いします。

Aベストアンサー

>ACCESS VBAで別のACCESS(mdb)を起動できますか?
ADOを使って読み書きは出来ます。

>ACCESSは、終了しますか?
>できれば終了したほうが良いです。
結論から言えば無理です。
VBAは現在開いているACCESSから起動しているわけですから現在のMDBを閉じた瞬間にVBAは終了してしまいます。
VBAでなくVBを考えたほうが早いと思いますが

QAccess2003VBA・MDBファイルの容量をVBAで知りたいです。

Access2003VBAで質問です。

(1)VBA実行中(自分自身)のMDBファイルの容量を、VBAで知ることはできますか?
CSVファイルを読み込む処理ですが、1.9ギガくらいで、処理をとめたいのです。

(2)VBA実行中(自分自身)のMDBファイルのディレクトリを取得する方法を教えて下さい。

(3)自分自身のMDBファイルは、最適化できませんよね。
DAOで、閉じてるMDBファイルをコピーするしかないのかな?

Aベストアンサー

1)&2)
Sub Test()
  Dim FS As Object
  Set FS = CreateObject("Scripting.FileSystemObject")
  Debug.Print "size=" & FS.getfile(CurrentProject.FullName).Size
  Debug.Print "path=" & CurrentProject.Path, "name=" & CurrentProject.Name
  Set FS = Nothing
End Sub

3)
自身を最適化する方法は色々な方が考えられています
ペン萩 さん
http://www.penhagi.com/access/tips/27_saiteki.htm
YU-TANG さん
http://x7net.com/~access/AcTipsGnrlHowToCompactCurrentMDB.html

QAccess vba 教えてください。 初心者です

以下のような
テーブルT_ソフトリスト、テーブルT_ソフト
フォームF_入力
があったときに、フォームの使用者のコンボボックスに入力をしたときに、
T_ソフトから使用者を探して、ソフトリストIDを取得し、そのソフトリストIDを元にT_ソフトソフトのソフト名をフォームのコンボボックスに表示させるようにしたいのですが、
どの様なソースコードを書けばよいでしょうか?



「T_ソフトリスト」←テーブル
==================================
ID  | ソフト名 |
──────────────
1   | A | 
2  | B | 
3  | C | 
4  | D | 
5  | E | 
==================================

「T_ソフト」←テーブル
==================================
ID |ソフトリストID | 使用者 |
───────────────────
1 |  4     | 佐藤  |
2 |  2     | 鈴木  |
3 |  5     | 斉藤  |
4 |  1     | 佐藤  |
5 |  3     | 田中  |
==================================

「F_入力」←フォーム
==================================
使用者  [コンボボックス]←Combo_UserType
ソフト名 [コンボボックス]←Combo_User
==================================

以下のような
テーブルT_ソフトリスト、テーブルT_ソフト
フォームF_入力
があったときに、フォームの使用者のコンボボックスに入力をしたときに、
T_ソフトから使用者を探して、ソフトリストIDを取得し、そのソフトリストIDを元にT_ソフトソフトのソフト名をフォームのコンボボックスに表示させるようにしたいのですが、
どの様なソースコードを書けばよいでしょうか?



「T_ソフトリスト」←テーブル
==================================
ID  | ソフト名 |
──────────...続きを読む

Aベストアンサー

遅くなりました。

(1) Combo_UserTypeの設定
集合タイプ   テーブル/クエリ
値集合ソース  T_使用者
列数      2
列幅      0cm,2cm
連結列     1
リスト幅    3cm


(2) フォームのコード

'######ここから########

Private Sub Combo_UserType_AfterUpdate()

'MsgBox Me!Combo_UserType.Column(0)
Me!Combo_User.RowSource = ""
Me!Combo_User.Requery
Me!Combo_User.Value = ""

'変数宣言
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim varSoft As String

'オブジェクト設定
Set db = CurrentDb
Set rs1 = db.OpenRecordset("T_ソフトリスト", dbOpenDynaset)
Set rs2 = db.OpenRecordset("T_ソフト", dbOpenDynaset)

'検索開始
If rs2.RecordCount > 0 Then
rs2.MoveFirst
Do Until rs2.EOF
'データが見つかった時の処理
If CLng(Me!Combo_UserType.Column(0)) = CLng(rs2![使用者]) Then
varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID])
Combo_User_NotInList varSoft, acDataErrAdded
End If
rs2.MoveNext
Loop
End If

rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub


Private Sub Combo_User_NotInList(NewData As String, Response As Integer)
If Me!Combo_User.RowSource = "" Then
Combo_User.RowSource = NewData
Else
Combo_User.RowSource = Combo_User.RowSource & ";" & NewData
End If
Response = acDataErrAdded
End Sub

'######ここまで######

Combo_UserTypeの更新後では、いくつか変更しました。

(1)
「'データが見つかった時の処理」のコメント以下の2行。
もし、If文の中に入らないようであれば、
If CLng(Me.Combo_UserType.Column(0)) = CLng(rs2![使用者]) Then
のように、両方、あるいはどちらか一方をCLngでキャストしてみて
ください。たぶん、それで入ると思います。

(2)
varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID])
にしましたが、もとの
varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID] & "")
でもデータは取れると思います。

(3)
Me.Combo_UserType.Column(0)
のようにして、コンボボックスでは名前を表示し、
非表示にしているIDをColumn(0)でコンボボックスの
列のインデックスで指定してIDを取得するように
しました。

(4)
最初に抜けていたオブジェクトの後処理を最後に
追加しました。


たぶん、KtoTtoAさんが言われたキャストはCLng
による型変換だろうと思います。。

遅くなりました。

(1) Combo_UserTypeの設定
集合タイプ   テーブル/クエリ
値集合ソース  T_使用者
列数      2
列幅      0cm,2cm
連結列     1
リスト幅    3cm


(2) フォームのコード

'######ここから########

Private Sub Combo_UserType_AfterUpdate()

'MsgBox Me!Combo_UserType.Column(0)
Me!Combo_User.RowSource = ""
Me!Combo_User.Requery
Me!Combo_User.Value = ""

'変数宣言
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim varSoft As String
...続きを読む

QVBA と コンパイル の関係

VBAのウィキを見ていると
http://ja.wikipedia.org/wiki/Visual_Basic_for_Applications
「基本的にはインタプリタ型の言語であるため、コンパイル(ビルド)の作業は不要である。」

との事ですが
VBE画面のデバッグ画面に「VBAProjectのコンパイル」と言う機能がなぜあるのはなぜでしょうか?
VBAでコンパイル作業は不要だけど、付属として「VBAProjectのコンパイル」機能があるのでしょうか?

Aベストアンサー

こんばんは

私の場合、VBAは何年も使っていますが「VBAProjectのコンパイル」
なんて機能は知りませんでした。

人に教える機会があって、そのときに使ったテキストに出ていたので、初めて知りました。
「VBAProjectのコンパイル」を使わなくても、問題なく動作します。

一つ、使い道をあげるならば、
「VBAProjectのコンパイル」を使うと、実行することなく、文法チェックできます。

もっとも、文法上のエラーがあれば、プログラムが実行される前にエラーが出るように
なっていますので、わざわざ一手間をかける理由は見つかりません。

たぶん、過去のバージョンを使っていた人が「この機能はどこへ行った?」と
ならないように残しているのではないかと思います。
そうはいっても、Excel2000でも、コンパイル操作なしに実行できますから、
当たってないかもしれません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報