[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
カレンダーのソースURLです。
https://rogolog.com/vba-calendar/
(mako) 2020/12/17(木) 15:25
下記のソースの家計簿完成版をダウンロードして
、家計簿ファイル内のカレンダーのユーザーフォームをエクスポートして
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.