工場にてACCESS97を使い、営業からの発注に対して納期の回答やもろもろのデータをメールにて任意のアドレスに送りたいのですが、当方VBAはまったく使えず、クエリーの使い倒しとマクロにて、結構ややこしい処理をしています。
マクロにてオブジェクトの送信で行うと、
マクロの記述内でアドレスを書きこむかあるいはブランクにしておき、送信時に送り先を入力するかしか手がないのでしょうか?
該当する営業にその人に関わるデータのみ送りたいので
営業全員におくるわけもゆかないのです。
VBを使うしか手がないのでしょうか?

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

A 回答 (4件)

・・・。

VBA出来ないとムズイもしくは、遅いかも。
VBAで書けば?
今やってるオブジェクトの送信は下記のVBAを使ってます。

DoCmd.SendObject acSendTable, "書き出しテーブル名", acFormatXLS,TO(宛先), CC, BCC, "件名", "本文"

でっ問題の任意のアドレスってヤツだが一番簡単な方法で、、、
テーブル→新規作成→デザイン→フィールド名(Mail:テキスト型)
(送信:Yes/NO型)を作成して適当に2~3件入力しといてくれ!
テーブル保存名は、[メアドマスタ]で保存。
※その後、サブフォームを作って開けるようにすればなお可。


フォーム→新規作成→デザイン→コマンドボタン追加
→コマンド右クリック→プロパティ→クリック時→...
(3点リーダー)→【↓をコピペ】でボタン押してみ!

Dim dbo As DAO.Database 'DAO使用時のお決り文句
Dim rst As DAO.Recordset 'DAO使用時のお決り文句
Dim sSqlStr As String 'SQL文
Dim sTO As String 'sTO = "宛先のアドレス入れ。"
Dim sCC As String 'sCC = "カーボン・コピー"
Dim sBCC As String 'sBCC = "目隠しのCCだっけ?"
'「メアドマスタ」テーブルのチェックが付いている物だけを抽出。
sSqlStr = "SELECT mail FROM メアドマスタ WHERE (送信=True)"
Set dbo = CurrentDb
Set rst = dbo.OpenRecordset(sSqlStr)
Do Until rst.EOF
If sTO = "" Then
sTO = Trim(rst.Fields("mail"))
Else
sTO = sTO & ";" & Trim(rst.Fields("mail"))
End If
rst.MoveNext
Loop
rst.Close
dbo.Close
'↑【sTO】変数の中に【my@my.com;you@you.com;who@who.com】って
'感じに文字を当てはめる作業をしている。
'ちなみにCCやBCCもチョットソース変えれば使えるよん。sTO → sCCに変えたりとか。

DoCmd.SendObject acSendTable, "メアドマスタ", acFormatXLS, "'" & sTO & "'", "", "", "件名", "本文"

'ソースが汚いのは素人だから許せ!
    • good
    • 0

>VBA(VB)を基礎から分かりやすく解説しているような


お勧めの書籍には何がありますか。

私がVBを習得したのがもう5~6年前になるので、今となっては、どれが良かったのか、よく覚えていません。(お役に立てなくて申し訳無いです)

ただ、VB等の言語を学習するときには、同じような内容の本が2~3冊程度は必要だと思います。

同じ事柄についてかかれている部分でも、本によって考え方やとらえ方が違ってたりしますし、何よりもサンプルプログラムの量が増えるのがいいです。

同じ動作をするプログラムを見比べながら学習すると、一つだけの場合に比べ、かなり学習効率が高くなるんですよね。

>といってすべてシステム会社にお願いする予算もない
というありさまです

今回の場合のように、機能1個だけ、という場合には、それほど料金はかからないと思いますよ。
請け負う会社にもよりますが、数千円から数万円程度で、お使いのシステムに機能を組み込んでくれると思います。

タウンページなどで、お近くのソフトウェア開発会社を検索し、問い合わせてみられたらいかがでしょうか。

それ以外の方法としては、Accessを教えてくれるパソコン教室に入学して、「授業」と称して先生に無理やり作ってもらうってのも有りなんじゃないでしょうか(笑)。

↓インターネット上の「タウンページ」です。

参考URL:http://itp.ne.jp/servlet/jp.ne.itp.sear.SCMSVTop
    • good
    • 0

回答ではありません。



点数の入れ方は、至って簡単で、質問者の方が、
「回答する・回答を締め切る」というリンクを
クリックすれば、点数を入れられるページに
いくので、そこで、選択すればOKです。

ちなみに、そこのところは、ヘルプに書かれて
いるので、参考にしてください。
ではでは☆

参考URL:http://www.okweb.ne.jp/help.php3
    • good
    • 0

真剣に取り組んだわけではないので、確かな答えではありませんが、多分、できません。



マクロで使える機能のほとんどはVBAからも扱えるので、ここは一つVBAに取り組まれてはいかがでしょうか。
ちなみに、「オブジェクトの送信」と同等の機能は、
DoCmd.SendObject
ですね。

ヘルプでDoCmdの項目をごらんになれば、マクロで使えるほとんどの機能が、DoCmd.XXX と記述するだけで使えることが分かると思います。

Accessを思い通りに使うためには、VBAの記述は避けては通れないことですので、今後ともAccessを使っていくんであれば、さわりの部分だけでも覚えておけばいいんじゃないでしょうか。

ちょっと作ってみましょうか。(どうせヒマですし)
「宛先一覧クエリー」(フィールド名"e-mail")の全員に、「送信内容クエリー」で抽出されたデータを送りたい時は、下記のようにします。

Sub SendMail()
  Dim AtesakiRST As Recordset
  Dim AtesakiStr As String
  Dim MailAddress As String
  
  On Error GoTo HandleErr

'宛先の一覧を、コンマ区切りで生成する
  '宛先の一覧を取得
  Set AtesakiRST = CurrentDb.OpenRecordset("宛先一覧クエリー")
  Do Until AtesakiRST.EOF
    MailAddress = Nz(AtesakiRST![e-mail], "")
    If MailAddress <> "" Then
      'コンマ区切で、文字列を生成
      AtesakiStr = AtesakiStr & "," & MailAddress
    End If
    AtesakiRST.MoveNext
  Loop
  '先頭のコンマを削除
  If Left$(AtesakiStr, 1) = "," Then
    AtesakiStr = Right(AtesakiStr, Len(AtesakiStr) - 1)
  End If
  
'メッセージの送信
  DoCmd.SendObject acSendQuery, "送信内容クエリー", acFormatXLS, , , AtesakiStr, "題名", "メッセージ"

'終了
ExitHere:
  Exit Sub

'エラー処理
HandleErr:
  MsgBox "エラー発生!!" & vbNewLine & Err.Description
  Resume ExitHere
End Sub

5分で作って5分でバグ取りしただけのものなんで、「ちゃんと使える」かどうかは疑問ですが、まぁ、参考程度にはなると思います。
(ちなみに著作権うんぬんは主張しません。勝手に使ってくださって結構です。)

この回答への補足

このシステム初めて使うのですが、
どうやって、回答頂いた方に点数を入れるのですか?

補足日時:2000/08/04 22:47
    • good
    • 0
この回答へのお礼

早速のご回答有難うございます。
お書き頂いたVBAの記述なんとなく、ほんの少し
わかるような気がします。
当方、中堅製造メーカーで現場のあわただしさの中で
夜まではほとんど静かにプログラムをかじれるような環境ではなく、おまけに年齢的に頭もなかなか回らなくなりVBA(VB)にはずっと踏み込む勇気がない状態です。
かといってすべてシステム会社にお願いする予算もない
というありさまです。
VBA(VB)を基礎から分かりやすく解説しているような
お勧めの書籍には何がありますか。
本屋には余りにも多すぎて選択が困難です。
今から約20年前ですけどBASIC、FORTRANは学生時代に
かじりました。
しかし、その後はまったく空白です。
脳みそもかなり腐ってきていると感じていますが、、
そういう人間向けの書籍がありましたら宜しくお願いします。

お礼日時:-0001/11/30 00:00

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

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

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

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

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

QMS ACCESSを利用して複数へのメール送信

現在、Microsoft Accessを利用したクレーム管理表を作成中で、そのクレーム内容を複数名にて情報共有したいと思っています。そこで、皆様のアドバイスを頂戴できれば助かります。

Accessのフォーム内に複数のメールアドレスを表示させ、その中から選択したアドレスに対してクレーム内容(レポート)をメール送信(OUTLOOK又はOE)したい。

(できれば、チェックボックスを利用して、チェックを入れたアドレス(又は人名)に対してメール送信を行いたいと思います。)

素人質問で申し訳ございませんが、宜しくお願い致します。

Aベストアンサー

sendobjectはマクロでもできますが、一旦VBAを覚えるとそちらの方が分かりやすいのでVBAの例を記述しました。

それでは、もっと詳しくご説明します。

フォーム上にメール送信ボタンを作成します。
そのボタンのプロパティーに「イベント」があると思います。
そこの「クリック時」で「イベントプロシージャー」を選択して、右端の「・・・」をクリックしてください。

VBA記述画面が表示されるはずです。
その中のprivate sub と end subの間に前述の内容を貼り付けて完成です。

もちろん、to_adrとcc_adrのアドレス記述は実際に存在するメールアドレスに変更してくださいね。

QMS Access からメールを送るには

現在、MS Accessで顧客の情報を管理しています。名前・住所の他にEメールも
登録しているんですが、このEメールに同じ内容のメールを送りたいと考えて
います。

テキストでエクスポートしてアドレス張に変換せずに、条件を検査後ワンタッチ
で、メーラーのBCCにアドレスを入れる事とかは出来ないでしょうか?

Aベストアンサー

VBAって、Accessのモジュールのことですから、Accessの機能ですよ。

BASP21は、Accessの機能ではありませんが、それほど難しいものではありませんよ。

下記は、サンプルです。

Sub メール送信()
' SMTPサーバーのアドレス
Const sSvName As String = "ご自分のSMTPサーバーのアドレス(xxx.co.jpってやつ)"
' メールのFromに入れるアドレス
Const sFrom As String = "自分のメールアドレス"
' BASP21
Dim bobj As Basp21
' BASP21のメッセージ
Dim sMsg As String
' データベース
Dim cnn As ADODB.Connection
' レコード
Dim rec As New ADODB.Recordset
' 送信先のアドレスを入れる変数
Dim sTo As String

' BASP21のオブジェクトを作成
Set bobj = CreateObject("BASP21")

' 現在のAccessのDBと接続
Set cnn = CurrentProject.Connection

' テーブルを開く
rec.Open "テーブル名またはクエリー名を書く", cnn, adOpenForwardOnly, adLockReadOnly, adCmdTableDirect

Do Until rec.EOF
' 送信先のアドレスをテーブルから取得
sTo = rec.Fields("送信先のメールアドレスが入っているフィールドの名前").Value

' メールの送信
sMsg = bobj.SendMail(sSvName, sTo, sFrom, "メールの表題", "メールの本文", "")

If sMsg <> "" Then
'送信に失敗した場合のメッセージ
MsgBox sMsg
End If
'テーブルの次のレコードを読む
rec.MoveNext
Loop

' テーブルを閉じる
rec.Close

' 後始末
Set rec = Nothing
Set cnn = Nothing
Set bobj = Nothing

End Sub

アウトルックを使う方法もあると思いますが、VBAは避けてとおれないと思うのですが・・・

VBAって、Accessのモジュールのことですから、Accessの機能ですよ。

BASP21は、Accessの機能ではありませんが、それほど難しいものではありませんよ。

下記は、サンプルです。

Sub メール送信()
' SMTPサーバーのアドレス
Const sSvName As String = "ご自分のSMTPサーバーのアドレス(xxx.co.jpってやつ)"
' メールのFromに入れるアドレス
Const sFrom As String = "自分のメールアドレス"
' BASP21
Dim bobj As Basp21
' BASP21のメッセージ
Dim sMsg A...続きを読む

QアクセスVBAでメールを送信(複数宛先・添付)

vbaを使用しメールを送信しようとしております。
以下に記載のように設定をしておりますが、2点設定の方法がわかりかねております。
大変お手数ですが、ご教示いただければ幸いです。

(1)宛先を複数設定したい場合はどのように設定すればよろしいでしょうか。
別々に送るのではなく、宛先にアドレス1、アドレス2を設定し1通のメールで送信をしたいです。

(2)添付ファイルを複数添付したいのですが、宛先によって添付ファイルの数が異なります。
たとえば、宛先Aには添付ファイルが1,2があるが、Bには添付ファイル1のみであり添付ファイル2フィール付度はNULLです。
この場合、エラーになってしまうのですが、"添付ファイルフィールドがnullでも無視してそのまま送信する"と設定はできるのでしょうか。

---------------------------------------
テーブル名:テーブル1
フィールド:アドレス1、アドレス2、件名、本文、添付ファイル1、添付ファイル2
---------------------------------------
Sub SAMPLE_0216()
Dim db As DAO.Database
Dim R1 As Recordset
Dim AP As Object
Dim ML As Object
Dim L1 As String

Set db = CurrentDb
Set R1 = db.OpenRecordset("テーブル1")
Set AP = CreateObject("Outlook.Application")

R1.MoveFirst

Do Until R1.EOF
'メールを作成
Set ML = AP.createitem(0)
'アドレスをセット
ML.To = R1!アドレス1
'件名をセット
ML.Subject = R1!件名
'本文をセット
ML.Body = R1!本文
'ファイルを添付1
L1 = R1!添付ファイル1
ML.Attachments.Add L1
'ファイルを添付2
L1 = R1!添付ファイル2
ML.Attachments.Add L1

'メールを送信
ML.Send

R1.MoveNext
Loop

End Sub
-----------------------------------------


どうぞよろしくお願いいたします。

vbaを使用しメールを送信しようとしております。
以下に記載のように設定をしておりますが、2点設定の方法がわかりかねております。
大変お手数ですが、ご教示いただければ幸いです。

(1)宛先を複数設定したい場合はどのように設定すればよろしいでしょうか。
別々に送るのではなく、宛先にアドレス1、アドレス2を設定し1通のメールで送信をしたいです。

(2)添付ファイルを複数添付したいのですが、宛先によって添付ファイルの数が異なります。
たとえば、宛先Aには添付ファイルが1,2があるが、Bには添付フ...続きを読む

Aベストアンサー

Accessはわからないのですが、ExcelからのOutlookの操作と基本は同じはずなので一部推定を交えて答えさせていただきます。

まず宛先ですが、";"(セミコロン)で区切れば複数設定できます。
Access VBA の書き方ですが、
ML.To = R1!アドレス1 & ";" & R1!アドレス2
でよさそうに思えるのですがいかがでしょうか。
宛先が1つの場合でも、アドレス1かアドレス2のうち宛先の入っていない方が空文字列(長さ0の文字列)であればこのままで大丈夫なはずです。

次に添付ファイルですが、Nullを無視してそのまま送信可能かどうかはわからないのですが、Nullなら添付しないようにすれば話は簡単だと思います。
Access VBA の書き方ですが、たぶん以下のようなものでいいと思います。
'ファイルを添付1
IF IsNull(R1!添付ファイル1) = False Then
L1 = R1!添付ファイル1
ML.Attachments.Add L1
End If
'ファイルを添付2
IF IsNull(R1!添付ファイル2) = False Then
L1 = R1!添付ファイル2
ML.Attachments.Add L1
End If
(フィールドがNullかどうかの判定は参考URLのページをまねてみたのですがこれでいいでしょうか?)
http://oshiete.goo.ne.jp/qa/1223220.html

参考URL:http://oshiete.goo.ne.jp/qa/1223220.html

Accessはわからないのですが、ExcelからのOutlookの操作と基本は同じはずなので一部推定を交えて答えさせていただきます。

まず宛先ですが、";"(セミコロン)で区切れば複数設定できます。
Access VBA の書き方ですが、
ML.To = R1!アドレス1 & ";" & R1!アドレス2
でよさそうに思えるのですがいかがでしょうか。
宛先が1つの場合でも、アドレス1かアドレス2のうち宛先の入っていない方が空文字列(長さ0の文字列)であればこのままで大丈夫なはずです。

次に添付ファイルですが、Nullを無視してそのまま送信...続きを読む

QAccessでメール一括送信ソフトを作りたい

Access初心者です。

同じ内容の文章を複数の人に送信できるソフトを
Accessで作りたいのですが、どうやったらいいでしょうか?
なにか参考になるサイト・情報等教えてください!!!

Aベストアンサー

> インストール後にどうやったら使えるのでしょうか??

参照設定しない場合は・・・
Dim bobj As Object
Set bobj = CreateObject("basp21")

Dim result As String
result = bobj.SendMailEx("C:\logFile.txt", _
"smtp Server のアドレス", _
"相手(受信者)のアドレス", _
"自分(送信者)のアドレス", _
"件名", _
"本文", _
"")

それぞれの引数は文字列型でパラメータを指定します。
最後の "" は「添付ファイル無し」の場合です。
これでメールをチクチクと 1通ずつ送信するのもよいですが、FlushMail メソッドで一気に送信するのもよいでしょう。
http://www.hi-ho.ne.jp/babaq/faq.html#M021

参考URL:http://www.hi-ho.ne.jp/babaq/basp21.html#0003

QACCESSから、メール送信を行いたいです

ACCESS(2007)から、新規にデータが登録された際に、そのタイトルと
本文の内容を含めた、メールを送信したいです。

BASP21を組み込み、それ自体メールを送信することはできたのですが、
登録フォームの内容と、送信内容をどう組み合わせればいいのか、わかりません。
記述方法など教えていただけないでしょうか

Aベストアンサー

例えば下記のようなVBAを登録したコマンドボタンを作成した、メール編集用のフォームを作ります。
この例では、フォームの中に送信相手のアドレスを複数選択可能なリストボックス(送信先:MailAdress1、CC:MailAdress2)として作成します。件名、内容のテキストボックスを配置し、この中に新規データの内容を代入するようにします。付記事項等追加し、SendMailコマンドボタンをクリックすると指定した送信先に送信されます。コマンドボックスのクリック時イベントプリシージャーは下記のとおりです。参照設定で、Microsoft Outlook 11.0 Object Libraryを参照する必要があります。これでアクセスから直接メール送信できます。

Private Sub SendMail_Click()
On Error GoTo Err_SendMail_Click
Dim appOutlook As Outlook.Application
Dim objMailItem As Outlook.MailItem
Dim i As Variant, MailAddressTo As String, MailAddresscc As String

If IsNull(Me.内容) Then
MsgBox "メール本文が入力されていません!", vbExclamation + vbOKOnly, "確認"
Exit Sub
End If

Set appOutlook = CreateObject("Outlook.Application")
If appOutlook Is Nothing Then
MsgBox "Outlook 11.0 is not installed on your PC."
Exit Sub
End If
Set objMailItem = appOutlook.CreateItem(olMailItem)
MailAddressTo = ""
For Each i In Me![MailAddress1].ItemsSelected
If MailAddressTo <> "" Then MailAddressTo = MailAddressTo & ";"
MailAddressTo = MailAddressTo & Me![MailAddress1].ItemData(i)
Next i

MailAddresscc = ""
For Each i In Me![MailAddress2].ItemsSelected
If MailAddresscc <> "" Then MailAddresscc = MailAddresscc & ";"
MailAddresscc = MailAddresscc & Me![MailAddress2].ItemData(i)
Next i

With objMailItem
.To = MailAddressTo
.CC = MailAddresscc
.Subject = Me.件名
.Body = Me.内容
.Display
.Send
End With
appOutlook.Quit
Set objMailItem = Nothing
Set appOutlook = Nothing

Exit_SendMail_Click:
Exit Sub

Err_SendMail_Click:
MsgBox Err.Description
Resume Exit_SendMail_Click
End Sub

例えば下記のようなVBAを登録したコマンドボタンを作成した、メール編集用のフォームを作ります。
この例では、フォームの中に送信相手のアドレスを複数選択可能なリストボックス(送信先:MailAdress1、CC:MailAdress2)として作成します。件名、内容のテキストボックスを配置し、この中に新規データの内容を代入するようにします。付記事項等追加し、SendMailコマンドボタンをクリックすると指定した送信先に送信されます。コマンドボックスのクリック時イベントプリシージャーは下記のとおりです。参照設...続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QAccessのマクロからメールを送信しています。

Accessのマクロからメールを送信しています。
メールソフトをoutlook expressからoutlook2010に変更したのですが、
セキュリティの確認画面が出てきて、都度都度「許可」をしなければなりません。
この確認画面が表示されない状態でメール送信をしたいのですが…。
オプション→セキュリティ→「プログラムによるアクセス」の部分だと思ったのですが、
ラジオボタンがグレーになっていて変更ができませんでした。

よろしくお願いします。

Aベストアンサー

ANo.2 の回答に誤りがありました。Outlook 2010 では以下のキーになります。(キーが無ければ作成してください。)

キー: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook\Security
値の名前:ObjectModelGuard
値の種類:REG_DWORD
値のデータ : 2

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QAccessのフォームのみ表示させたい

Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか?
(Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?)
また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか?
やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。
わかる方、教えて下さい。宜しくお願いします。

Aベストアンサー

ツールメニュー
”起動時の設定”を開き

フォーム/ページの表示にて起動時に表示させたいフォームを選択すれば、そのMDBを開いた時に、該当のフォームが表示されます。

メニュー画面等を作り、各処理のフォームを開いたり、アクセスを終了するマクロを呼び出すボタンを作ればフォームからの終了等も可能です。

また、データベースウィンドウの表示のチェックボックスを外せば、質問者様の言われているオブジェクトメニューは表示されなくなります。

メンテナンス等を行いたい時はshiftキーを押下しながら立ち上げればデータベースウィンドウが表示できます。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む


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

人気Q&Aランキング

おすすめ情報