Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,201 から 2,240 までを表示しています。
6
エピ 2022/10/05 (水) 10:59:54 9f8a2@0c0df

FAXCOMEXLib
こちらも動作しました、原因は私のうっかりバグがありまして

10

InStr(1, s, i, 0) は最後の引数0でバイナリモードの比較になりますのでOKだと思いますが、
Replace関数の方でバイナリモードの比較にすればIf文は不要です。

    For Each i In Split(検索文字列)
        s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>", ,vbBinaryCompare)
    Next
5
エピ 2022/10/05 (水) 10:11:55 9f8a2@0c0df

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

9
チョコラブ 2022/10/05 (水) 09:26:05 9af1b@93fe9 >> 7

    For Each i In Split(検索文字列)
        If InStr(1, s, i, 0) > 0 Then
            s = Replace(s, i, "" & i & "")
        End If
    Next

  これでひらがな カナを区別できましたが、合っていますでしょうか。

8
チョコラブ 2022/10/05 (水) 09:07:09 9af1b@93fe9 >> 7

ちなみにStrCompも試してみましたが、”s”がフィールドのため、文章全体と検索文字列を比較しているため
一致しないという結果になってしまいました。

7
チョコラブ 2022/10/05 (水) 09:02:40 9af1b@93fe9

複数文字のハイライトができました。
ですが、たとえば"キズ"で調べたいとき、もしかしたら"キズ","きず"という言葉があるかも…ということで
"キズ","きず"で検索しましたら本来、キズで登録してるはずなのに、検索したらReplaceで置き換えられてしまい、きずという言葉になってしまいます。
漢字とカナは区別できているみたいですが、ひらがなとカタカナは区別しないみたいです。

ひらがなとカタカナを区別して検索する方法はありますか?

6
すぅ 2022/10/04 (火) 17:48:11 25b58@b9210

hatenaさま 返信ありがとうございます。
イベントプロシージャの提供もありがとうございます。
早速組み込んでエラーも出ずに思った通りの挙動ができるようになりました。
いろいろ参考にさせていただきます。
ありがとうございました。

4
エピ 2022/10/04 (火) 16:11:45 9f8a2@0c0df

WindowsServerはありません、PCにモデムをつけています。
vb.netでならこのコードで問題なく動くのですがAccess VBAではエラーで止まってしまいます
先ほどvb.netで確認しましたが動作に問題はなかったです

3
りんご 2022/10/04 (火) 15:12:34 c564b@0e907

Windowsserverのversionとfaxserverソフトの対応を確認して、コーディングの前にマウス操作で問題なく動くかどうか確認して、特に問題がないという事が確認できていますか?

2
エピ 2022/10/04 (火) 13:23:40 9f8a2@0c0df

返信ありがとうございます。
Microsoft Fax Service Extended COM Type Library 1.0.0.0
これでよろしいでしょうか

1
りんご 2022/10/04 (火) 12:49:00 c564b@0e907

Microsoft Fax Server Versionの情報を下さい。

5

frmMainフォームのタイマー時のイベントプロシージャを下記にように修正してください。

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
4
すぅ 2022/10/03 (月) 18:10:50 25b58@b9210

hatenaさま 返信ありがとうございます。
データシートビューにするか帳票フォームのままにするか検討してみます。
もう一つ質問があります。
画面スクロールしないでサブフォームに収まってしまう件数の表示だと
エラーが表示されてしまいます。
これを回避するにはどうしたらよいのでしょうか?画像1

6

コントロールソースに■を設定する方法は、条件付き書式より動作が軽いので、覚えておいて損はないと思います。
下記でも同様の方法を使っています。

カレント行の背景色の変更 その3 - hatena chips

5
hiroton 2022/10/03 (月) 09:12:38 b09e4@f966d >> 4

そうですよね。条件付き書式で背景変えるのが楽だよなーって思ってたんですけどなんでか見つけられないなーってなったんですよね
ボックス選んだ状態でグレーアウトしてて見逃したとかそんなんだと思います

画像1

6
チョコラブ 2022/10/02 (日) 08:40:27 a1353@d60f0 >> 5

思うとおりの動きができました!
ありがとうございます。

勉強になりました。

5

あっ、またまたすみません。
SearchHighlight関数を下記に修正してください。

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
4
チョコラブ 2022/10/01 (土) 20:36:36 9af1b@d60f0 >> 3

複数検索文字がハイライトできました!ありがとうございます。

ですが、検索文字が増えるたび、スペースが一つ空くと1行改行されてしまいます。
おそらく検索文字列にスペースが入ってしまっているからだと思うのですが、
検索文字が3つあれば、2行改行されてしまうのですがそれはどうしたらいいでしょう?

検索文字が増えても改行せずにしたいです。

3

条件付き書式はデータシートビューでも有効です。

3

あっ、すみません。修正前のコードをアップしてしまいました。

s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & s & "</font>")
の部分を下記に修正してください。
s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>")

上の回答も修正しておきました。

2
チョコラブ 2022/10/01 (土) 08:00:50 9af1b@d60f0 >> 1

ありがとうございます。

試してみましたが、ハイライトにはならず、検索した文字が繰り返しコピーされてしまいました。
検索文字列に”〇〇” スペース ”〇〇” という風にスペースを空けた文字にハイライトを付けたいのですが。。。

1
hatena 2022/09/30 (金) 18:32:33 修正

関数だけでは難しいので、VBAでユーザー定義関数を作成することになると思います。

標準モジュールに下記のような関数を作成します。

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

「感想リッチテキスト」のコントロールソースを下記のように設定します。

=SearchHighlight([感想],[検索文字列])

上記で一致した文字列の背景色は黄色になります。

もし、黄色以外にしたい場合は、第3引数に指定します。
例えば水色にしたい場合は下記になります。

=SearchHighlight([感想],[検索文字列],"#7FCCE3")

色は下記などを参照して # で始まる色コードで指定します。

WEBカラー見本一覧(基本色、セーフカラー)

4

四角形はテキストボックスに変更して、条件付き書式を下記のように設定すればいいでしょう。

画像1

VBAでセクション全体の背景色を変更するなら、下記で。

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
2
すぅ 2022/09/30 (金) 17:12:55 25b58@b9210

hatenaさま 返信ありがとうございます。
実際のフォームでは条件抽出したデータを2つのサブフォームに表示しており、
条件つき書式で前景色変更や背景色の色分けなどを行っています。
データシートビュー表示にすると条件つき書式が使えなくなるのでは・・と心配しています。
データシートビューにしても平気なのでしょうか?

1

サブフォーム間のスクロールを同期させる方法 - hatena chips

上記のページのサンプルですね。上記ページのコメント欄にもありますが、帳票フォームではそのような現象が発生します。
データシートビューだと問題ないので、データシートビュー表示にしてください。

3
hiroton 2022/09/30 (金) 15:26:06 25049@f966d

印刷することまで考えてきれいに出したいなら2つ目の手法なら
文字書式:リッチ テキスト形式
コントロールソース:

="<font style='BACKGROUND-COLOR:#" & IIf([社員区分]="派遣社員","FFFF00","FFFFFF") & "'>   </font>"

フォント名:MS ゴシック
フォントサイズ:100
その他余白等は0にする

実際に表示させている文字は全角スペース3つです


VBAならボックスのままでいいのでフォーマット時イベントで背景色を変更

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    Me!ボックス.BackColor = IIf(Me!社員区分 = "派遣社員", 62207, 16777215)
End Sub

上の手法は、あくまでも表示されている文字の背景部分の色なので、余白部分とか望んだ結果にならない場合があります

VBAはいろいろ柔軟に対応できますが、出来ることが多すぎてコードが増えるほど難解なシステムになるので使わなくていい部分には使わないようにしたいという気持ちがhirotonにはあります
後ついでに、フォーマット時イベントはレポートビューだと発生しないとかの違いもありますね

2
kittty 2022/09/30 (金) 14:25:00 3dfab@a3086

hiroton 様

 早々のご回答ありがとうございます。
 説明に不足がありました。
 プレビュー専用ではなく最終的に印刷します。レポートですのでまずはプレビューで確認するという
 作業になります。

 作業の流れとしましては、
  1.作成する従業員情報にフラグを立てる。(チェックボックスにチェックを入れる)
  2.「作成」ボタンからプレビューで確認する

 レポートの開く時イベントで、社員区分に応じた背景色を変更できたらいいと思っています。
 どうか引き続きご教授のほどよろしくお願いいたします。
 

 

1
hiroton 2022/09/30 (金) 11:54:07 25049@f966d

印刷しないプレビュー専用ですか?
ものすごく雑にやるならボックスをテキストボックスに変えて

=IIf(社員区分="派遣社員","■")

で、フォントサイズを最大、前景色を黄色にすればそれっぽくなりますよ

もう少しきれいにやるならリッチテキスト形式にして空白(スペース)を敷き詰めてタグのBACKGROUND-COLORスタイルを使って色指定部分を上記条件で変えるとかですかね

もちろんVBAでフォーマット時にボックスの背景色を変更するでもいいと思います

2
りんご 2022/09/27 (火) 08:59:00 c564b@0e907

ご存じならご回答願います。

 存じているという回答ではないので、最初に謝っておきます、すみません。
 特に問題が見当たらないので、微妙に設定を変えながら試行錯誤を繰り返すしかないかと思います。例えば、パラメータ無しのサンプルを作って試したり、SQL指定にしてみたり。

6
えいじ 2022/09/26 (月) 22:53:32

hatena様 りんご様

ご丁寧にありがとうございました。

21
大坊頭 2022/09/26 (月) 17:19:12 e4b95@edbad >> 20

お返事が遅くなりまして、申し訳ございません。検証に取りかかるまで、大分かかってしまいました。
まず、タブオーダーを確認しましたが最後ではありませんでした。
2つめのメッセージを非表示とする手立ては見つかりませんでしたので、結局規定値を設定する形で対応することとしました。
長らくご検討くださり、ありがとうございました。

1

下記が参考になりませんか。

ADO Recordset で RecordCount プロパティが -1 を返す場合 | ちびrobo

上記でだめなら、myRS.MoveLast で最終レコードへ移動してから取得するとか。

ただ、レコード数を取得したいだけなら、DCount関数で取得すれば1行ですみます。

5

F_問題メインで、検索を実行しているのでしょうか?

あっ、それですね。DoCmd.ApplyFilter はアクティブなフォームが対象になりますので。
事前にF_検索結果にフォーカス移動しておくか、フォームのFilterプロパティを使えばいいでしょう。

Forms![F_検索結果]![問題番号検索] = Me.[合体]
Forms![F_検索結果].SetFocus
DoCmd.ApplyFilter "", "[問題番号] ='" & [Forms]![F_検索結果]![問題番号検索] & "'"
With Forms![F_検索結果]
   ![問題番号検索] = Me.[合体]
   .Filter = "[問題番号] ='" & ![問題番号検索] & "'"
   .FilterOn = True
End with
4
りんご 2022/09/25 (日) 23:37:35 c564b@0e907

F_問題メインで、検索を実行しているのでしょうか?

 多分、その通りです。F_検索結果にボタンを作って、該当コードを試してみるのはどうでしょう。
 役に立つかわかりませんが、ググっていたらヒットしたので参考までに
T’sWare Access Tips #450別フォームのボタンの処理を実行するには?

3
えいじ 2022/09/25 (日) 22:36:08

F_検索結果は、連結です。

レコードソースは、Q_過去問検索です。

MT_過去問を基に、Q_過去問検索を作成して、連結になっています。

MT_過去問の主キーは、IDのオートナンバー型、問題番号(文字型)です。

hatena様の回答から、検索を実行しているのは、F_問題メインで、検索を実行しているのでしょうか?
F_問題メインは、非連結で、何も紐づけされていません。

DoCmd.ApplyFilter "", "[問題番号] ='" & [Forms]![F_検索結果]]![問題番号検索] & "'"

この書き方ではだめなのでしょうか?

2

F_検索結果 が非連結フォームなのでは。つまり、「レコードソース」プロパティが空欄。

「レコードソース」プロパティに検索したいデータが入っているテーブルかクエリを設定してください。

1
りんご 2022/09/25 (日) 00:24:17 c564b@0e907

関連するテーブル構造を全て提示しておくと、解答者が増えるかもしれません。
テーブル名:{主キー,主キー},属性項目,属性項目,…

15
もっちー 2022/09/20 (火) 22:10:41 ce1e4@39a0e

ありがとうございます。クエリを順番に作成していったらできました。
感動です。じっくり勉強させていただきます。

14
もっちー 2022/09/20 (火) 21:51:15 ce1e4@39a0e

hirotonさま

どうもありがとうございます。なるほどです、大変勉強になります。
カレンダーの実データを作ってしまうのですね。

開始日基準ですか、おっしゃる通りですね。
終了日はデータの追加更新の都度、変わる可能性があります。

ひとまず、いただい情報をもとに、実カレンダーで同様の結果が得られるようにトライしてみます。

13
hiroton 2022/09/20 (火) 16:38:24 20947@f966d

もう一つ、「休暇取得日」登録のタイミングをデータの更新タイミングとする方法を

素データに開始日を登録する

いままで「終了日」を求める方向でやっていましたが、「開始日」を求めるようにします。最終的なデータの出し方は「開始日でグループ化し、休暇取得日は最大を取る(=終了日になる)」です

開始日を記録する理由は、問題の性質上「休暇取得日」が登録されると前のレコードにわたって終了日が変わる可能性があり、終了日を管理するのは手間が多いからです


「休暇取得日」の登録がしっかり管理されていれば(そのタイミングでしっかり更新処理ができれば)独立したデータ(カレンダーテーブル)の管理もいらないシンプルなシステムが作れます