[[20201217094827]] 『VBA(ユーザー入力フォーム)でWordのよく使う文潤x(mako) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA(ユーザー入力フォーム)でWordのよく使う文書の一部を編集して印刷したい』(mako)

いつもお世話になっております。
今回は、頻繁に利用するワード文書ファイルの一部を、VBAのユーザー入力フォーム上で編集して、印刷するシステムを作りたいと考えています。
皆様のアドバイスをいただき、作成したいので、ご教授願います。

ちなみに、当該のワード文書は、全国の自治体から送られてきた照会文書をもとに、都度回答をする文書です。

文書例)

     |[B]                                                                                                         |[C]|[D]|[E]|[F]               |[G]            |[H]|[I]	
 [2] |                                                                                                            |   |   |   |2020/12/17(発送日)|               |   |   	
 [3] |                                                                                                            |   |   |   |2020-1(文書番号)  |               |   |   	
 [4] |〇市(宛名)                                                                                                 |   |   |   |                  |               |   |   	
 [5] |                                                                                                            |   |   |   |                  |差出人(固定名)|   |   	
 [6] |〇〇の照会について(回答)(タイトル)                                                                        |   |   |   |                  |               |   |   	
 [7] | みだしのことについて、<日付><文書番号>で照会のありました内容について、別紙のとおり回答させていただきます。|   |   |   |                  |               |   |   	
 [8] |                                                                                                            |   |   |   |                  |               |   |   	
 [9] |                                                                                                            |   |   |   |                  |               |   |   	
 [10]|                                                                                                            |   |   |   |                  |               |   |   	
 [11]|                                                                                                            |   |   |   |                  |               |   |   	
 [12]|                                                                                                            |   |   |   |                  |               |   |   	
 [13]|                                                                                                            |   |   |   |                  |               |   |   	

1.ワード文書で都度編集が必要な項目

宛先:全国の自治体

日付:文書を発送する日

文書番号:紙ベースのリスト表から日付順に番号を取得します

タイトル:差出人が作成した文書タイトルと同じ(電子ではなく紙ベース)

本文:みだしのことについて、<<差出人発行の文書日付>><<差出人の文書番号>>で通知のありました件、回答させていただきます。

※本文は<<>>で括った部分を毎回編集しています。

2.実現したいこと

1) Easy-Replay(仮のユーザーフォーム名)を起動。

2) VBAのユーザーフォームを使い、以下の項目と入力方法を設定。

[項目]   [入力方法]
・宛先   ・リストから選択(頭文字検索で選択しやすいようにする)
・日付   ・カレンダーから選択
・文書番号 ・手入力
・タイトル ・手入力
・本文   ・差出人発行の文書日付
      ・差出人の文書番号

3) ユーザーフォームの項目をすべて入力する。

4) 印刷プレビューボタンを押して、文書に不備がないか確認する。

5) 印刷ボタンを押して、印刷をする。

3.困っていること
ユーザーフォームの見た目だけは作ることができるのですが、実現するためのコードの記述がさっぱりわかりません。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


>ユーザーフォームの見た目だけは作ることができるのですが、実現するためのコードの記述がさっぱりわかりません。

だったら、お金払って、業者と仕様打合せしてやってもらえば、と思ってしまいますね。

それだけ、漠然とした内容とそれなりのボリュームだから、私にはそう思えてしまいました。
ご自身でチャレンジして、分からない、納得がいかない事を質問してみてはいかがでしょうか。

1)〜5)までで、どこが分かりませんか?

(tkit) 2020/12/17(木) 11:37


 差し込み印刷で出来そうな気もしますがあまり詳しくないので断言できないです。
 文書番号は紙ベースなんですね…
 データベース化されてればそこも取得できるかなと思いましたが。
(ななし) 2020/12/17(木) 11:44

 >ちなみに、当該のワード文書は、全国の自治体から送られてきた照会文書をもとに、都度回答をする文書です。
 なぜ Excel で回答するのだろうか。
 Word をひな型にして保存すれば済むことだと思うが。

(分け知らず) 2020/12/17(木) 13:40


ななし様 分け知らず様

後だしですみません。
これを作成する目的としては、編集すべき項目をVBAのユーザーフォームで見える化し、抜けもれなく文書を作成するための補助ツールです。

現状では、過去に作成したword文書に編集すべき項目(宛名、日付、文書番号、タイトルetc)のみ上書き編集しています。

たまに日付が前回のままであったりとヒューマンエラーがあるのでこれを改善したいのです。

それと、よくよく考えてみますと、ワードファイルで文書を作成する必要性もなかったので、VBAでワードファイルを編集するというのは一旦、保留にしたいと思います。
(mako) 2020/12/17(木) 15:18


tkit様

現在、ユーザーフォームの日付を入力する際に、カレンダーをつかってテキストボックスに
日付データを入れようとしているのですが、、外部ソースからもってきたカレンダーがうまく
機能せずに困っています。

[発生しているエラー]

Esay-Replayのユーザーフォーム上のコマンドボタン4を押すと、カレンダーを表示するように
していますが、カレンダーのフォームは呼び出せていますが、カレンダーの月日が何も表示されません。

Private Sub CommandButton4_Click()

frmCalendar.Show

End Sub

<<カレンダーのユーザーフォームコード>>

Option Explicit

Private Const COLOR_NORMAL = &HE0E0E0
Private Const COLOR_TODAY = &H99FFFF

Public TargetRange As Range

Public Sub Initialize()

    Dim dt As Date

    If IsDate(TargetRange.value) = False Then
        dt = Date
    Else
        dt = TargetRange.value
    End If

    SetCalendar year(dt), month(dt)

End Sub

Private Sub Label2_Click()

End Sub

Private Sub lblPreMonth_Click()

    MovePreMonth

End Sub

Private Sub lblPreMonth_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    MovePreMonth

End Sub

Private Sub MovePreMonth()

    Dim dt As Date
    dt = DateSerial(lblYear.Caption, lblMonth.Caption - 1, 1)

    SetCalendar year(dt), month(dt)

End Sub

Private Sub lblNextMonth_Click()

    MoveNextMonth

End Sub

Private Sub lblNextMonth_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    MoveNextMonth

End Sub

Private Sub MoveNextMonth()

    Dim dt As Date
    dt = DateSerial(lblYear.Caption, lblMonth.Caption + 1, 1)

    SetCalendar year(dt), month(dt)

End Sub

Private Sub SetCalendar(ByVal year As Integer, ByVal month As Integer)

    '年月を表示
    lblYear.Caption = year
    lblMonth.Caption = month

    Dim i As Integer
    Dim lblDay As Object

    'カレンダーを初期化
    For i = 1 To 37

        Set lblDay = Me.Controls("lblDay" & i)

        lblDay.Caption = ""
        lblDay.BackColor = COLOR_NORMAL

    Next

    '始めの日
    Dim firstDate As Date
    firstDate = DateSerial(year, month, 1)

    '曜日によって位置をずらす
    Dim position As Integer
    position = weekday(firstDate) - 1

    '終わりの日
    Dim endDay As Integer
    endDay = day(DateSerial(year, month + 1, 0))

    For i = 1 To endDay

        Set lblDay = Me.Controls("lblDay" & (i + position))

        lblDay.Caption = i

        If DateSerial(year, month, i) = Date Then
            lblDay.BackColor = COLOR_TODAY
        End If

    Next

End Sub

Private Sub OutputDate(ByVal day As String)

    If day = "" Then
        Exit Sub
    End If

    TargetRange.value = DateSerial(lblYear.Caption, lblMonth.Caption, day)

    Me.Hide

End Sub

Private Sub lblDay1_Click()

    OutputDate lblDay1.Caption

End Sub

Private Sub lblDay2_Click()

    OutputDate lblDay2.Caption

End Sub

Private Sub lblDay3_Click()

    OutputDate lblDay3.Caption

End Sub

Private Sub lblDay4_Click()

    OutputDate lblDay4.Caption

End Sub

Private Sub lblDay5_Click()

    OutputDate lblDay5.Caption

End Sub

Private Sub lblDay6_Click()

    OutputDate lblDay6.Caption

End Sub

Private Sub lblDay7_Click()

    OutputDate lblDay7.Caption

End Sub

Private Sub lblDay8_Click()

    OutputDate lblDay8.Caption

End Sub

Private Sub lblDay9_Click()

    OutputDate lblDay9.Caption

End Sub

Private Sub lblDay10_Click()

    OutputDate lblDay10.Caption

End Sub

Private Sub lblDay11_Click()

    OutputDate lblDay11.Caption

End Sub

Private Sub lblDay12_Click()

    OutputDate lblDay12.Caption

End Sub

Private Sub lblDay13_Click()

    OutputDate lblDay13.Caption

End Sub

Private Sub lblDay14_Click()

    OutputDate lblDay14.Caption

End Sub

Private Sub lblDay15_Click()

    OutputDate lblDay15.Caption

End Sub

Private Sub lblDay16_Click()

    OutputDate lblDay16.Caption

End Sub

Private Sub lblDay17_Click()

    OutputDate lblDay17.Caption

End Sub

Private Sub lblDay18_Click()

    OutputDate lblDay18.Caption

End Sub

Private Sub lblDay19_Click()

    OutputDate lblDay19.Caption

End Sub

Private Sub lblDay20_Click()

    OutputDate lblDay20.Caption

End Sub

Private Sub lblDay21_Click()

    OutputDate lblDay21.Caption

End Sub

Private Sub lblDay22_Click()

    OutputDate lblDay22.Caption

End Sub

Private Sub lblDay23_Click()

    OutputDate lblDay23.Caption

End Sub

Private Sub lblDay24_Click()

    OutputDate lblDay24.Caption

End Sub

Private Sub lblDay25_Click()

    OutputDate lblDay25.Caption

End Sub

Private Sub lblDay26_Click()

    OutputDate lblDay26.Caption

End Sub

Private Sub lblDay27_Click()

    OutputDate lblDay27.Caption

End Sub

Private Sub lblDay28_Click()

    OutputDate lblDay28.Caption

End Sub

Private Sub lblDay29_Click()

    OutputDate lblDay29.Caption

End Sub

Private Sub lblDay30_Click()

    OutputDate lblDay30.Caption

End Sub

Private Sub lblDay31_Click()

    OutputDate lblDay31.Caption

End Sub

Private Sub lblDay32_Click()

    OutputDate lblDay32.Caption

End Sub

Private Sub lblDay33_Click()

    OutputDate lblDay33.Caption

End Sub

Private Sub lblDay34_Click()

    OutputDate lblDay34.Caption

End Sub

Private Sub lblDay35_Click()

    OutputDate lblDay35.Caption

End Sub

Private Sub lblDay36_Click()

    OutputDate lblDay36.Caption

End Sub

Private Sub lblDay37_Click()

    OutputDate lblDay37.Caption

End Sub

Private Sub lblYear_Click()

End Sub

Private Sub UserForm_Layout()

    'フォームの位置が変わった場合は、
    '再表示時にその位置を復元する
    StartUpPosition = 0

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    '表示位置がリセットされないようにする
    Cancel = True
    Me.Hide

End Sub

///////////////////////////////////////////////////

<<Easy-Relayのユーザーフォームコード>>
Public ActForm As Object

Sub FormNameGet()

MsgBox ActForm.Name

End Sub

Private Sub CommandButton3_Click()

 Unload Me
End Sub

Private Sub CommandButton4_Click()

frmCalendar.Show

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub UserForm_Initialize()

    Set ActForm = Me

    Call FormNameGet

Dim i As Long
Dim maxrow As Long

'リストの最終行を取得
maxrow = Cells(Rows.Count, 1).End(xlUp).Row

With UserForm1

    '一度リストを削除する
    .Controls("combobox1").Clear

    For i = 2 To maxrow

    'コンボボックスにリストを追加する
    .Controls("combobox1").AddItem Cells(i, 1).value

    Next i

End With

End Sub

(mako) 2020/12/17(木) 15:23


追記1

カレンダーのソースURLです。
https://rogolog.com/vba-calendar/
(mako) 2020/12/17(木) 15:25


追記2

下記のソースの家計簿完成版をダウンロードして
、家計簿ファイル内のカレンダーのユーザーフォームをエクスポートして
Esay-ReplayのVBAProjectにインポートしています。

https://rogolog.com/excel-kakeibo/

(mako) 2020/12/17(木) 15:29


>外部ソースからもってきたカレンダーがうまく機能せずに困っています。

外部サイトで解説している通りになっていないからです。
また、ご希望の動作を実現するには、コードの改造が必要です。

(tkit) 2020/12/17(木) 16:12


カレンダーは動かす事ができました。

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    Set frmCalendar.TargetRange = ActiveCell
    frmCalendar.Initialize
    frmCalendar.Show

Dim targetDate As String

    targetDate = frmCalendar.TargetRange.Value

    TextBox1.Value = targetDate
    Cells(1, 1).Value = targetDate

End Sub
(mako) 2020/12/17(木) 19:49


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.