Access97から、帳票イメージをそのままFAX送信する
仕組みを作成しようとしているのですが、どういう
FAXソフトを使って、どんな機能を使えばできるのかが
よく分かりません。
実現したい機能としては、出力画面よりなにか条件を
いれてボタンを押すとその条件で帳票イメージを
作成し、(相手先もマスタから取得し)FAXする、という
ものです。
印刷先をFAXにして、手動でFAXソフトで送信、という
ことが可能なのはわかっているのですが、アプリケーションに
組み込む場合の方法がよくわかりません。
ちなみにFAXサーバ1台、クライアントは10台ぐらいを考えています。
すでにこういう機能を実現されている方や、方法をご存知
のかたがいらっしゃいましたら教えていただければありがたいです。
(オススメのFAXソフトなんかもあるとうれしいです)

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

A 回答 (3件)

>ネットワーク上のFAXサーバとして


それは プログラミング次第です。

1.サーバー側で待機プログラムを起動
2.ローカル側がサーバーの待機中プログラムに、送信したい画像保存場所、電話番号を送信
3.受信したサーバー側で、受け取った情報を元に送信

以上の手順で、FAXサーバプログラムを作成できると思います。

サバクラ間の通信はWINSOCKで、出来ると思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=155606
    • good
    • 0
この回答へのお礼

再度ありがとうございます。
個人的に興味があるのでちょっと作って試してみようかと思います。
うまくいけばこの方法でいけそうな気がします。

お礼日時:2002/01/11 16:45

もし FAXサーバーがWIN2000であったら、プログラミングだけで実現可能みたいです。


いやー奥が深い。。。

参考URL:http://www1.harenet.ne.jp/cgi-bin/cgiwrap/unaap/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。
なかなか面白そうで個人的には試してみたいのですが・・・
ネットワーク上のFAXサーバとして使えるんでしょうか???

お礼日時:2002/01/10 19:41

"STARFAX"または"まいとーく"が有名です。


いずれもVB/VBAからFAX送信できます。
    • good
    • 0
この回答へのお礼

ありがとうございました。検討してみます。

お礼日時:2002/01/10 11:57

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

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

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

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

QVBAを使ってエクセルシートをFAXで送信したい。

最近仕事用のパソコンはFAX付きコピー機で印刷できるようになりました。
そこでエクセルの印刷設定の中でプリンターを(FAX)に変更して、FAX先電話番号を指定し送信ボタンを押せばプレビューしているシートをFAXで送信してくれるようにもなりました。

そこで、毎回プリンターを変更して、電話番号を指定するのは大変なのでマクロを作ろうと思ったのですがマクロではFAX送信が記録されませんでした。
なのでVBAで作るしかないと思ったのですがVBA素人の私には作ることができません。

どなたかご教授をお願いいたします。


OS:Win7
オフィス:エクセル2010
プリンタ:DocuCentre-IV C4470(FAX)
電話番号:短縮0006
送信するシート:アクティブシート

Aベストアンサー

複合機の機種名が分かっても、
中身までは使っていないユーザには分からないでしょうね。

>マクロではFAX送信が記録されませんでした。

ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="プリンタ名"
上記の様なコードでプリンタを指定して印刷する事は可能です。

FAXの場合、送信先の番号が複数あるはずなので、
そのあたりがプリンタドライバにVBAで渡せるかどうかにもよります。
しかし、プリンタのプロパティなどを表示させたりは可能ですが、
プリンタの設定まではVBAではどうする事もできなかったはずです。

Qexeファイルのセキュリティ。

社内用のメンテナンスプログラムを制作したのですが、同じプログラムで他社の製品にも使えてしまいます。たいした大きさではないので、フロッピーで十分なんですが社外に流失してしまうとこまってしまいます。
IPアドレスで確認すればいいのですが、登録していないようなものはどうしたらよいのでしょうか?
どなたか、教えていただけませんか?

Aベストアンサー

通信認証のサンプルを作成しました。
(正確に言うと、以前に作成したものがあって、それを抜粋しました)

プロジェクトは二つ必要で、サーバーとクライアントに分かれています。
それぞれにプロジェクトを作成して、EXEを作成してください。
基本はサーバーのEXEが立ち上がった状態で、クライアントのEXEを起動してください。
この書き込みの下の方に「共通の標準モジュール」を記してますが、[INIT_PORT][SERVER_NAME]の各定数があります。
こちらは環境に合わせて変更をしてください。
もし、一台のマシンで実験をするのであればSERVER_NAMEをご自分のマシン名に変更をしてください。

プログラムが正常に動くと、サーバー、クライントが交互に通信状況をメッセージボックスで知らせます。
これはあくまでサンプルなのでそのようにしてますが、サーバー側にはメッセージボックスの機能を使用しないでください。メッセージボックスが表示されている間は、他のユーザーとの通信ができなくなってしまいます。
(VBでそれを回避する方法があるのですが、動作が不安定になるために書きません)

このサンプルでは、互いに文字列を送信しています。
実践では、その文字列をパスワード認証に使用してはいかがでしょうか?



必要なもの

Project1.vbp(サーバー用)
フォーム
Winsock1(インデックスなし)
Winsock2(インデックスあり)

Project2.vbp(クライアント用)
フォーム
Winsock1(インデックスなし)

Winsockはメニューバーより
[プロジェクト]
[コンポーネント]
[Microsoft Winsock Control 6.0(かな?)]
を選択したらツールボックスにWinsockコントロールが現れます。
それをサーバー側に二つ、クライアント側に一つ、各フォームに貼り付けます。
サーバー側のWinsock2にはIndexプロパティに'0'ゼロをセットしてください。
その他のWinsockには値を入力しないでください。

あとは下のソースを貼り付けてください。
-----サーバーのフォーム内のソース(ここから)---------
Option Explicit

Private Sub Form_Load()
  Me.Caption = "SERVER"

  'ポートの初期化を行い、受信待ち状態にする
  On Error GoTo PGMERR
  
  With Me.Winsock1
    .LocalPort = INIT_PORT
    .Listen
  End With
  
  Exit Sub
  
PGMERR:
  Call MsgBox("通信ポートに以上が見られました、終了いたします。", vbSystemModal, Me.Caption)
  End
End Sub

'フォームが閉じる前に、Winsockを全て閉じる
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Dim wkSock As Winsock
  
  With Me
    .Winsock1.Close
    For Each wkSock In .Winsock2
      wkSock.Close
    Next wkSock
  End With
End Sub

'特定のクライアントのソケットを閉じたとき
Private Sub Winsock2_Close(Index As Integer)
  With Me
    .Winsock2(Index).Close
    Unload .Winsock2(Index)
  End With
End Sub

'メッセージデータの受信
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  Dim strRecvData As String    '送られてきたデータ
  Dim lngRecvCnt As Long     '送られてきたデータライン数
  Dim valRecvAry As Variant   '送られてきたデータをライン数のに分解し配列にして記憶
  
  Dim wkVal    As Variant   '受信したメッセージ1文を、IDとメッセージに分解して配列で記憶
  Dim wkSType   As SOCKMSG_ID  '分解した1文のID
  Dim wkStr    As String    '分解した1文のメッセージ
  
  Dim i      As Long     'ループカウンタ
  
  Dim wkMsg    As String    '送信するメッセージ
  
  With Me
  
    'メッセージを受け取る
    .Winsock2(Index).GetData strRecvData
    
    '受信メッセージを、メッセージ分の配列にする
    valRecvAry = Split(strRecvData, vbCrLf)
    
    'メッセージ数を取得
    lngRecvCnt = UBound(valRecvAry)
    
    '受信メッセージの分だけ、一文ずつ処理を行う
    For i = 0 To lngRecvCnt - 1
    
      '一文をIDとメッセージに分解
      wkVal = Split(valRecvAry(i), vbNullChar)
      wkSType = wkVal(0)
      wkStr = wkVal(1)
      
      Select Case wkSType
        Case SOCKMSG_ID.ID1
          wkMsg = "山川豊"
          Call MsgBox("ID1で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "ID1で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
          Call SendMsg(.Winsock2(Index), ID1, wkMsg)
          
        Case SOCKMSG_ID.ID2
          wkMsg = "起動してもいいよ"
          Call MsgBox("ID2で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "ID2で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
          Call SendMsg(.Winsock2(Index), ID2, wkMsg)
      
      End Select
    Next i
  End With
PGMEND:
End Sub

'接続要求がきたら、新たなWinsockを用意する
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  Dim lngNewIndex As Integer
  
  lngNewIndex = 0
  On Error Resume Next
  
  With Me
    '新たな受信装置を1つ追加する
    Do
      Err.Clear
      lngNewIndex = lngNewIndex + 1
      Load .Winsock2(lngNewIndex)
    Loop Until Err.Number = 0&
    On Error GoTo 0
    
    .Winsock2(lngNewIndex).Accept requestID
  End With
End Sub
-----サーバーのフォーム内のソース(ここまで)---------

-----クライアントのフォーム内のソース(ここから)-------
Option Explicit

'フォームロード時に接続を試みる
Private Sub Form_Load()
  Me.Caption = "CLIANT"

  With Me.Winsock1
    .RemoteHost = SERVER_NAME
    .RemotePort = INIT_PORT
    .LocalPort = 0
    .Connect
  End With
End Sub

'サーバーが落ちた
Private Sub Winsock1_Close()
  Call MsgBox("サーバーが落ちたー", vbSystemModal, Me.Caption)
  Unload Me
End Sub

'サーバーと接続できた
Private Sub Winsock1_Connect()
  Dim wkMsg  As String
  
  wkMsg = "岸部四郎"
  
  Call MsgBox("接続できた" & vbNewLine & vbNewLine _
      & "ID1で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
  Call SendMsg(Me.Winsock1, ID1, wkMsg)
End Sub

'サーバーと接続できなかった
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  Call MsgBox("接続できなかった", vbSystemModal, Me.Caption)
  Unload Me
End Sub

'メッセージデータの受信
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strRecvData As String    '送られてきたデータ
  Dim lngRecvCnt As Long     '送られてきたデータライン数
  Dim valRecvAry As Variant   '送られてきたデータをライン数のに分解し配列にして記憶
  
  Dim wkVal    As Variant   '受信したメッセージ1文を、IDとメッセージに分解して配列で記憶
  Dim wkSType   As SOCKMSG_ID  '分解した1文のID
  Dim wkStr    As String    '分解した1文のメッセージ
  
  Dim i      As Long     'ループカウンタ
  
  Dim wkMsg    As String    '送信するメッセージ
  
  With Me
  
    'メッセージを受け取る
    .Winsock1.GetData strRecvData
    
    '受信メッセージを、メッセージ分の配列にする
    valRecvAry = Split(strRecvData, vbCrLf)
    
    'メッセージ数を取得
    lngRecvCnt = UBound(valRecvAry)
    
    '受信メッセージの分だけ、一文ずつ処理を行う
    For i = 0 To lngRecvCnt - 1
    
      '一文をIDとメッセージに分解
      wkVal = Split(valRecvAry(i), vbNullChar)
      wkSType = wkVal(0)
      wkStr = wkVal(1)
      
      Select Case wkSType
        Case SOCKMSG_ID.ID1
          wkMsg = "鳥羽一郎"
          Call MsgBox("ID1で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "ID2で[" & wkMsg & "]を送信します", vbSystemModal, Me.Caption)
          Call SendMsg(.Winsock1, ID2, wkMsg)
          
        Case SOCKMSG_ID.ID2
          Call MsgBox("ID2で[" & wkStr & "]を受信しました" & vbNewLine & vbNewLine _
            & "通信を終了します", vbSystemModal, Me.Caption)
          
          '''''ここに通信が正常にできたことを示すフラグを立てておく
          Unload Me
      End Select
    Next i
  End With
PGMEND:
End Sub
-----クライアントのフォーム内のソース(ここまで)-------

サーバー・クライアントのそれぞれに共通の標準モジュールとして、以下のソースを追加してください。
-----共通の標準モジュール(ここから)-------
Option Explicit

Public Enum SOCKMSG_ID
  ID1 = 1
  ID2 = 2
  ID3 = 3
End Enum
Public Const INIT_PORT As Long = 8000 '←このPORTは使用される確立が高いので、適当な値に変更したほうがいいかも?
Public Const SERVER_NAME As String = "PC_MACHINE_NAME" '←サーバー用のEXEのをおくマシン名

Public Sub SendMsg(inSock As Winsock, inSendType As SOCKMSG_ID, inSendMsg As String)
  Dim wkStr  As String
  
  With inSock
    '通信が可能なときに通信する
    If (.State = (sckConnected)) Then
      '通信の書式は
      ' 1.通信を送るときのID(SOCKMSG_IDを自分で作成、オリジナルの番号を振る)
      ' 2.vbNullChar(IDとメッセージとの区切り文字)
      ' 3.メッセージ(任意の文字列)
      ' 4.vbCrLf(文末を示す)
      wkStr = inSendType & vbNullChar & inSendMsg & vbCrLf
      
      'メッセージを送る
      .SendData wkStr
    End If
  End With
End Sub
-----共通の標準モジュール(ここまで)-------

通信認証のサンプルを作成しました。
(正確に言うと、以前に作成したものがあって、それを抜粋しました)

プロジェクトは二つ必要で、サーバーとクライアントに分かれています。
それぞれにプロジェクトを作成して、EXEを作成してください。
基本はサーバーのEXEが立ち上がった状態で、クライアントのEXEを起動してください。
この書き込みの下の方に「共通の標準モジュール」を記してますが、[INIT_PORT][SERVER_NAME]の各定数があります。
こちらは環境に合わせて変更をしてください。
もし、一台のマ...続きを読む

Qvb.netでFAXを送信する方法

いつもお世話になっております。
VB.NETでFAXを送信したいのですが、処理方法が右も左もわかりません。いろいろ調べてはみたのですが、行き着くところは英語…お願いです。助けて下さい。

Aベストアンサー

>型番はCanonのimageRUNNER iRC3220
もちろんこちらには実機がないので、ドライバだけインストールしてみてみました。
プリンタドライバ経由により、ウィザードを立ち上げての印刷のようですね?
(別の印刷方法パターンは見つからなかったのですが、、、、違ったら教えてください。)

このドライバを利用するためのActiveXは、インストーラに含まれておりませんでした。
なので外部操作するための情報が公開されていないように思いますが。。。

印刷命令を発行後、ひたすらSendMessageでの処理を繰り返すことになると思います。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QWindoes7/付属のFAXでのVBAについて

Windows7・付属のFAX・I-Oデータの外付けモデム
テストでFAX送信可能なのは、確認しています。

Access2010でVBAを作ろうとしています。
各業者に請求書をFAXで送信するようなものです。
ネット検索で旧環境(Access2000/FAX)のものを発見して作り変えようとしていたのですが、うまく
いかないので、どなたか同環境で現在うまく稼働されている方ご教授いただければと思います。

Option Compare Database
Option Explicit

'スナップショット保存用フォルダ
Const CON_WorkDir As String = "d:\workfax"
'スナップショット用ファイル名
Const CON_ファイル名 As String = "発注書"

Private Sub 送信_Click()
'------------------------------------------------------------
' 送信_Click
'
'------------------------------------------------------------
' On Error GoTo 送信_Click_Err

Dim W_FaxServer As FaxServer
Dim W_FaxDoc As FaxDoc
Dim W_RS As New ADODB.Recordset
Dim W_送信要求件数 As Integer, W_送信処理件数 As Integer
Dim W_SNPファイル名 As String
Dim W_相手先 As String, W_FAX番号 As String
Dim W_Ix As Long

'送信要求件数の確認
W_送信要求件数 = DCount("*", "送信ヘッダーW")
If W_送信要求件数 = 0 Then
Beep
MsgBox "送信する発注書はありません。", vbOKOnly + vbCritical
Exit Sub
End If

'スナップショット保存用フォルダをクリア
On Error Resume Next
Kill CON_WorkDir & "\*.*"
' On Error GoTo 送信_Click_Err

'レコードセット(送信ヘッダー)の準備
W_RS.Open "select * from 送信ヘッダーW order by コード", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

'送信処理件数をクリア
W_送信処理件数 = 0

Do While Not W_RS.EOF
'送信情報を設定
W_送信処理件数 = W_送信処理件数 + 1
W_SNPファイル名 = CON_ファイル名 & Format(W_送信処理件数, "000") & "-" & Format(W_送信要求件数, "000") & _
"_" & W_RS.Fields("コード") & "_" & _
Format(Date, "mmdd") & Format(Time(), "hhnnss")
W_相手先 = CON_ファイル名 & Format(W_送信処理件数, "000") & "/" & Format(W_送信要求件数, "000") & " " & _
W_RS.Fields("コード") & ":" & W_RS.Fields("相手先")
W_FAX番号 = ""
W_Ix = 1
Do While W_Ix <= Len(W_RS.Fields("FAX番号"))
If IsNumeric(Mid(W_RS.Fields("FAX番号"), W_Ix, 1)) Then
W_FAX番号 = W_FAX番号 & Mid(W_RS.Fields("FAX番号"), W_Ix, 1)
End If
W_Ix = W_Ix + 1
Loop

'画面表示を更新
' Me.相手先.Caption = W_相手先
' Me.ガイド.Caption = "処理中 " & Format(W_送信処理件数, "#,##0") & "/" & Format(W_送信要求件数, "#,##0")

'相手先1件分のFAX文書をスナップショット形式で出力
Call B発注書_コードSet(W_RS.Fields("コード"))
DoCmd.OutputTo acReport, "R_発注書", acFormatPDF, CON_WorkDir & "\" & W_SNPファイル名 & ".pdf", False

'test FAX送信----------------------------------------------------ここから
W_FaxServer.Connect CreateObject("WScript.Network").ComputerName 'コンピュータ名’
Set W_FaxDoc = W_FaxServer.Create(CON_WorkDir)
W_FaxDoc.RecipientName = "送信者名"
W_FaxDoc.SenderTitle = "明細"
W_FaxDoc.DisplayName = "明細"
W_FaxDoc.FaxNumber = W_FAX番号
W_FaxDoc.Send
W_FaxServer.Disconnect
W_RS.Fields("リターンコード") = 0
W_RS.Update
W_RS.MoveNext
Loop

'レコードセット(送信ヘッダー)を閉じる
W_RS.Close
Set W_RS = Nothing

'画面表示を更新
' Me.相手先.Caption = ""
' Me.ガイド.Caption = ""
Beep
MsgBox "全てのFAXを送信要求しました。", vbOKOnly + vbInformation

'送信_Click_Exit:
' Exit Sub

'送信_Click_Err:
MsgBox Err.Description
' Resume 送信_Click_Exit

End Sub

上記のように組んでみたのですが、Sendでも素通りしてしまい、FAXに行きません。
outputでDドライブには、PDFはできているのですが、
いきずまっています
どなたかよろしくおねがいいたします。

Windows7・付属のFAX・I-Oデータの外付けモデム
テストでFAX送信可能なのは、確認しています。

Access2010でVBAを作ろうとしています。
各業者に請求書をFAXで送信するようなものです。
ネット検索で旧環境(Access2000/FAX)のものを発見して作り変えようとしていたのですが、うまく
いかないので、どなたか同環境で現在うまく稼働されている方ご教授いただければと思います。

Option Compare Database
Option Explicit

'スナップショット保存用フォルダ
Const CON_Work...続きを読む

Aベストアンサー

http://answers.microsoft.com/ja-jp/office/forum/office_2010-access/access%E3%81%AEvba%E3%81%A7windows-fax/50033225-7127-4e3a-95ef-cc8a12cea4f5
をベースにしつつ
中川システムさんとこのを参考に作成すればできるかと思います。
試験環境を作れないので、これ以上のアドバイスは出来ませんが
一つお願い事があります。

faxcomの参照設定を外して変数宣言の3行を下記にしても動きますか?
余力がありましたら教えてください。

'要参照設定 faxcom x.x type library (FXSCOM.dll)
' Dim lobjFaxSvr As New FAXCOMLib.FaxServer 'FaxServerオブジェクト
' Dim lobjFaxDoc As New FAXCOMLib.FaxDoc 'FaxDocオブジェクト
' Dim lstrPDFPath As String '送信用PDFファイルフルパス名
'↓
Dim lobjFax As Object '参照設定なしの場合、かも?未確認
Dim lobjFaxSvr As Object
Dim lobjFaxDoc As Object
Dim lstrPDFPath As String
Set lobjFax = CreateObject("FaxComEx.FaxDocument")
Set lobjFaxSvr = CreateObject("FaxServer.FaxServer")

http://answers.microsoft.com/ja-jp/office/forum/office_2010-access/access%E3%81%AEvba%E3%81%A7windows-fax/50033225-7127-4e3a-95ef-cc8a12cea4f5
をベースにしつつ
中川システムさんとこのを参考に作成すればできるかと思います。
試験環境を作れないので、これ以上のアドバイスは出来ませんが
一つお願い事があります。

faxcomの参照設定を外して変数宣言の3行を下記にしても動きますか?
余力がありましたら教えてください。

'要参照設定 faxcom x.x type library (FXSCOM.dll)
' Dim lobjFaxSvr ...続きを読む


人気Q&Aランキング