FAXCOMLibで送信することができました。
ただFAXCOMEXLibにあるSubjectがどれなのかわかっていませんが・・・
お騒がせしました。
`Dim Fs As FAXCOMLib.FaxServer
Dim Fd As FAXCOMLib.FaxDoc
Dim Cpname As String
Cpname = Environ("COMPUTERNAME")
Set Fs = New FAXCOMLib.FaxServer
Fs.Connect (Cpname)
Set Fd = Fs.CreateDocument("FaxDocument")
Private Sub Form_Timer()
On Error GoTo ErrorHandler
' SyncScroll オブジェクトを初期化します。
If ss.Ready = False Then
If ss.SetForms(Me.subf1.Form, Me.subf2.Form) Then
' 初期化に失敗した場合はユーザー定義エラーを発生させます。
Err.Raise Number:=vbObjectError + 1, _
Description:="サブフォームの特定に失敗しました。"
End If
End If
' 同期スクロールさせます。
If ss.Sync(curIdx) = 0 Then
' 同期に失敗した場合はユーザー定義エラーを発生させます。
Err.Raise Number:=vbObjectError + 2, _
Description:="サブフォームの同期に失敗しました。"
End If
ExitProcedure:
Exit Sub
ErrorHandler:
' エラー発生時
If Err.Number = -2147221503 Then
Me.TimerInterval = 0
Else
Dim s As String
s = "以下のエラーが発生しました。@" & Err.Number & ":" _
& Err.Description & "@タイマーイベントを停止します。"
Me.TimerInterval = 0 ' タイマーイベント停止
Beep
Call Eval("MsgBox('" & s & "', " & vbCritical & ", '" _
& CurrentProject.Name & "')")
End If
End Sub
Public Function SearchHighlight(フィールド, 検索文字列, Optional 色 As String = "#ffff00") As String
Dim s As String
s = Nz(フィールド)
If s = "" Then Exit Function
If Nz(検索文字列) = "" Then
SearchHighlight = s
Exit Function
End If
Dim color As String
Dim i
s = Replace("<p>" & s & "</p>", Chr(13), "</p><p>")
For Each i In Split(検索文字列)
s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>")
Next
SearchHighlight = s
End Function
s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & s & "</font>")
の部分を下記に修正してください。 s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>")
Public Function SearchHighlight(フィールド, 検索文字列, 色 As String) As String
Dim s As String
s = フィールド
If s = "" Then Exit Function
If Nz(検索文字列, "") = "" Then
SearchHighlight = s
Exit Function
End If
Dim i
For Each i In Split(検索文字列)
s = Replace(Nz("<p>" & s & "</p>", ""), Chr(13), "</p><p>")
s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>")
Next
SearchHighlight = s
End Function
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If Me!社員区分 = "派遣社員" Then
Me.詳細.BackColor = RGB(255, 255, 0) '黄
Else
Me.詳細.BackColor = RGB(255, 255, 255) '白
End If
End Sub
FAXCOMEXLib
こちらも動作しました、原因は私のうっかりバグがありまして
InStr(1, s, i, 0) は最後の引数0でバイナリモードの比較になりますのでOKだと思いますが、
Replace関数の方でバイナリモードの比較にすればIf文は不要です。
FAXCOMLibで送信することができました。
ただFAXCOMEXLibにあるSubjectがどれなのかわかっていませんが・・・
お騒がせしました。
`Dim Fs As FAXCOMLib.FaxServer
Dim Fd As FAXCOMLib.FaxDoc
Dim Cpname As String
Cpname = Environ("COMPUTERNAME")
Set Fs = New FAXCOMLib.FaxServer
Fs.Connect (Cpname)
Set Fd = Fs.CreateDocument("FaxDocument")
Fd.DisplayName = "abcdefg"
Fd.RecipientName = "abcd" '受信者の名前
Fd.FileName = "**.pdf"
Fd.FaxNumber = "000-000-0000"
Fd.Send
Fs.Disconnect
Set Fd = Nothing
Set Fs = Nothing
For Each i In Split(検索文字列)
If InStr(1, s, i, 0) > 0 Then
s = Replace(s, i, "" & i & "")
End If
Next
これでひらがな カナを区別できましたが、合っていますでしょうか。
ちなみにStrCompも試してみましたが、”s”がフィールドのため、文章全体と検索文字列を比較しているため
一致しないという結果になってしまいました。
複数文字のハイライトができました。
ですが、たとえば"キズ"で調べたいとき、もしかしたら"キズ","きず"という言葉があるかも…ということで
"キズ","きず"で検索しましたら本来、キズで登録してるはずなのに、検索したらReplaceで置き換えられてしまい、きずという言葉になってしまいます。
漢字とカナは区別できているみたいですが、ひらがなとカタカナは区別しないみたいです。
ひらがなとカタカナを区別して検索する方法はありますか?
hatenaさま 返信ありがとうございます。
イベントプロシージャの提供もありがとうございます。
早速組み込んでエラーも出ずに思った通りの挙動ができるようになりました。
いろいろ参考にさせていただきます。
ありがとうございました。
WindowsServerはありません、PCにモデムをつけています。
vb.netでならこのコードで問題なく動くのですがAccess VBAではエラーで止まってしまいます
先ほどvb.netで確認しましたが動作に問題はなかったです
Windowsserverのversionとfaxserverソフトの対応を確認して、コーディングの前にマウス操作で問題なく動くかどうか確認して、特に問題がないという事が確認できていますか?
返信ありがとうございます。
Microsoft Fax Service Extended COM Type Library 1.0.0.0
これでよろしいでしょうか
Microsoft Fax Server Versionの情報を下さい。
frmMainフォームのタイマー時のイベントプロシージャを下記にように修正してください。
hatenaさま 返信ありがとうございます。
データシートビューにするか帳票フォームのままにするか検討してみます。
もう一つ質問があります。
画面スクロールしないでサブフォームに収まってしまう件数の表示だと
エラーが表示されてしまいます。
これを回避するにはどうしたらよいのでしょうか?
コントロールソースに■を設定する方法は、条件付き書式より動作が軽いので、覚えておいて損はないと思います。
下記でも同様の方法を使っています。
カレント行の背景色の変更 その3 - hatena chips
そうですよね。条件付き書式で背景変えるのが楽だよなーって思ってたんですけどなんでか見つけられないなーってなったんですよね
ボックス選んだ状態でグレーアウトしてて見逃したとかそんなんだと思います
思うとおりの動きができました!
ありがとうございます。
勉強になりました。
あっ、またまたすみません。
SearchHighlight関数を下記に修正してください。
複数検索文字がハイライトできました!ありがとうございます。
ですが、検索文字が増えるたび、スペースが一つ空くと1行改行されてしまいます。
おそらく検索文字列にスペースが入ってしまっているからだと思うのですが、
検索文字が3つあれば、2行改行されてしまうのですがそれはどうしたらいいでしょう?
検索文字が増えても改行せずにしたいです。
条件付き書式はデータシートビューでも有効です。
あっ、すみません。修正前のコードをアップしてしまいました。
s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & s & "</font>")
の部分を下記に修正してください。
s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>")
上の回答も修正しておきました。
ありがとうございます。
試してみましたが、ハイライトにはならず、検索した文字が繰り返しコピーされてしまいました。
検索文字列に”〇〇” スペース ”〇〇” という風にスペースを空けた文字にハイライトを付けたいのですが。。。
関数だけでは難しいので、VBAでユーザー定義関数を作成することになると思います。
標準モジュールに下記のような関数を作成します。
「感想リッチテキスト」のコントロールソースを下記のように設定します。
上記で一致した文字列の背景色は黄色になります。
もし、黄色以外にしたい場合は、第3引数に指定します。
例えば水色にしたい場合は下記になります。
=SearchHighlight([感想],[検索文字列],"#7FCCE3")
色は下記などを参照して # で始まる色コードで指定します。
WEBカラー見本一覧(基本色、セーフカラー)
四角形はテキストボックスに変更して、条件付き書式を下記のように設定すればいいでしょう。
VBAでセクション全体の背景色を変更するなら、下記で。
hatenaさま 返信ありがとうございます。
実際のフォームでは条件抽出したデータを2つのサブフォームに表示しており、
条件つき書式で前景色変更や背景色の色分けなどを行っています。
データシートビュー表示にすると条件つき書式が使えなくなるのでは・・と心配しています。
データシートビューにしても平気なのでしょうか?
サブフォーム間のスクロールを同期させる方法 - hatena chips
上記のページのサンプルですね。上記ページのコメント欄にもありますが、帳票フォームではそのような現象が発生します。
データシートビューだと問題ないので、データシートビュー表示にしてください。
印刷することまで考えてきれいに出したいなら2つ目の手法なら
文字書式:リッチ テキスト形式
コントロールソース:
フォント名:MS ゴシック
フォントサイズ:100
その他余白等は0にする
実際に表示させている文字は全角スペース3つです
VBAならボックスのままでいいのでフォーマット時イベントで背景色を変更
上の手法は、あくまでも表示されている文字の背景部分の色なので、余白部分とか望んだ結果にならない場合があります
VBAはいろいろ柔軟に対応できますが、出来ることが多すぎてコードが増えるほど難解なシステムになるので使わなくていい部分には使わないようにしたいという気持ちがhirotonにはあります
後ついでに、フォーマット時イベントはレポートビューだと発生しないとかの違いもありますね
hiroton 様
早々のご回答ありがとうございます。
説明に不足がありました。
プレビュー専用ではなく最終的に印刷します。レポートですのでまずはプレビューで確認するという
作業になります。
作業の流れとしましては、
1.作成する従業員情報にフラグを立てる。(チェックボックスにチェックを入れる)
2.「作成」ボタンからプレビューで確認する
レポートの開く時イベントで、社員区分に応じた背景色を変更できたらいいと思っています。
どうか引き続きご教授のほどよろしくお願いいたします。
印刷しないプレビュー専用ですか?
ものすごく雑にやるならボックスをテキストボックスに変えて
で、フォントサイズを最大、前景色を黄色にすればそれっぽくなりますよ
もう少しきれいにやるならリッチテキスト形式にして空白(スペース)を敷き詰めてタグの
BACKGROUND-COLOR
スタイルを使って色指定部分を上記条件で変えるとかですかねもちろんVBAでフォーマット時にボックスの背景色を変更するでもいいと思います
存じているという回答ではないので、最初に謝っておきます、すみません。
特に問題が見当たらないので、微妙に設定を変えながら試行錯誤を繰り返すしかないかと思います。例えば、パラメータ無しのサンプルを作って試したり、SQL指定にしてみたり。
hatena様 りんご様
ご丁寧にありがとうございました。
お返事が遅くなりまして、申し訳ございません。検証に取りかかるまで、大分かかってしまいました。
まず、タブオーダーを確認しましたが最後ではありませんでした。
2つめのメッセージを非表示とする手立ては見つかりませんでしたので、結局規定値を設定する形で対応することとしました。
長らくご検討くださり、ありがとうございました。
下記が参考になりませんか。
ADO Recordset で RecordCount プロパティが -1 を返す場合 | ちびrobo
上記でだめなら、myRS.MoveLast で最終レコードへ移動してから取得するとか。
ただ、レコード数を取得したいだけなら、DCount関数で取得すれば1行ですみます。
あっ、それですね。
DoCmd.ApplyFilter
はアクティブなフォームが対象になりますので。事前に
F_検索結果
にフォーカス移動しておくか、フォームのFilterプロパティを使えばいいでしょう。多分、その通りです。F_検索結果にボタンを作って、該当コードを試してみるのはどうでしょう。
役に立つかわかりませんが、ググっていたらヒットしたので参考までに
T’sWare Access Tips #450別フォームのボタンの処理を実行するには?
F_検索結果は、連結です。
レコードソースは、Q_過去問検索です。
MT_過去問を基に、Q_過去問検索を作成して、連結になっています。
MT_過去問の主キーは、IDのオートナンバー型、問題番号(文字型)です。
hatena様の回答から、検索を実行しているのは、F_問題メインで、検索を実行しているのでしょうか?
F_問題メインは、非連結で、何も紐づけされていません。
この書き方ではだめなのでしょうか?
F_検索結果 が非連結フォームなのでは。つまり、「レコードソース」プロパティが空欄。
「レコードソース」プロパティに検索したいデータが入っているテーブルかクエリを設定してください。
関連するテーブル構造を全て提示しておくと、解答者が増えるかもしれません。
テーブル名:{主キー,主キー},属性項目,属性項目,…
ありがとうございます。クエリを順番に作成していったらできました。
感動です。じっくり勉強させていただきます。
hirotonさま
どうもありがとうございます。なるほどです、大変勉強になります。
カレンダーの実データを作ってしまうのですね。
開始日基準ですか、おっしゃる通りですね。
終了日はデータの追加更新の都度、変わる可能性があります。
ひとまず、いただい情報をもとに、実カレンダーで同様の結果が得られるようにトライしてみます。
もう一つ、「休暇取得日」登録のタイミングをデータの更新タイミングとする方法を
素データに開始日を登録する
いままで「終了日」を求める方向でやっていましたが、「開始日」を求めるようにします。最終的なデータの出し方は「開始日でグループ化し、休暇取得日は最大を取る(=終了日になる)」です
開始日を記録する理由は、問題の性質上「休暇取得日」が登録されると前のレコードにわたって終了日が変わる可能性があり、終了日を管理するのは手間が多いからです
「休暇取得日」の登録がしっかり管理されていれば(そのタイミングでしっかり更新処理ができれば)独立したデータ(カレンダーテーブル)の管理もいらないシンプルなシステムが作れます