週がほとんどなくなっています。いくつかの進歩を遂げる時です。次のコードを、テスト用のBIOSでドキュメントのコピーの標準モジュールにコピーしてください。
Option Explicit
Enum Ncb ' Context button
' 27 Jul 2017
NcbCap
NcbCmd
NcbEvaluate = 0
NcbApprove
NcbReject
NcbHold
NcbReport
NcbA = 80
NcbH = 87
NcbR = 97
NcbRep = 720
End Enum
Private Sub DelContextControl()
' 06 Oct 2016
' ===================================================
' Use this sub to DELETE the context control
' ===================================================
Dim Doc As Document
Dim Ctl As CommandBarControl
Dim Del As Boolean
Set Doc = ActiveDocument
CustomizationContext = Doc
Do
Set Ctl = CommandBars("Text").Controls(1)
Del = (Ctl.Tag = BtnSpecs(NcbEvaluate, NcbCap))
If Del Then Ctl.Delete
Loop While Del
End Sub
Private Sub TestSet()
' ===================================================
' Use this sub to SET the context control
' ===================================================
SetContextControl ActiveDocument
End Sub
Sub SetContextControl(Doc As Document)
' 27 Jul 2017
Dim Cbar As CommandBar
Dim Bctl As CommandBarControl
Dim Fid As Variant
Dim i As Long
CustomizationContext = Doc
Set Cbar = CommandBars("Text")
Set Bctl = Cbar.Controls(1)
If Not (Bctl.Tag = BtnSpecs(NcbEvaluate, NcbCap)) Then
Set Bctl = Cbar.Controls.Add(msoControlPopup, , , 1)
With Bctl
.Caption = BtnSpecs(NcbEvaluate, NcbCap)
.Tag = BtnSpecs(NcbEvaluate, NcbCap)
.BeginGroup = True
Fid = Array(NcbA, NcbR, NcbH, NcbRep)
For i = NcbApprove To NcbReport
With .Controls.Add(Type:=msoControlButton)
.Caption = BtnSpecs(i, NcbCap)
.FaceId = Fid(i - NcbApprove)
.OnAction = BtnSpecs(i, NcbCmd)
End With
Next i
End With
End If
End Sub
Private Function BtnSpecs(Bid As Ncb, _
Cid As Ncb) As String
' 27 Jul 2017
Dim Specs As String
Select Case Cid
Case NcbCap
Specs = "Evaluate Bios,Approve,Reject,Hold,Report"
Case NcbCmd
Specs = ",Approve,Reject,Hold,Report"
End Select
BtnSpecs = Split(Specs, ",")(Bid)
End Function
Sub Approve()
' 27 Jul 2017
WriteComment NcbApprove
End Sub
Sub Hold()
' 27 Jul 2017
WriteComment NcbHold
End Sub
Sub Reject()
' 27 Jul 2017
WriteComment NcbReject
End Sub
Private Sub WriteComment(TxtId As Ncb)
' 27 Jul 2017
ActiveDocument.Comments.Add Selection.Range, UCase(BtnSpecs(TxtId, NcbCap))
End Sub
Sub Report()
' 27 Jul 2017
MsgBox "Create the report"
End Sub
手順TestSet
(F5)を実行します。この手順では、サブSetContextControl
を呼び出します。おそらく将来的にはより良い方法を見つけることができるので、それは「テスト」です。私はActiveDocument
の使い方が嫌いです(間違った文書で実行すると多大なダメージを与えるかもしれません)。また、ユーザーがF5を押すのが好きではありません。
この手順では、ActiveDocumentのコンテンツのコンテキストメニュー(本文とヘッダーとフッターを除く)をコンテキストメニューに追加します。なんらかの理由でコントロールを削除する場合は、サブDelContextControl
を実行します。コントロールは、アプリケーションではなく、インストールされているドキュメントで使用できることに注意してください。ドキュメントに残したい場合は、保存する必要があります。
コンテキストメニューは、ドキュメントの本文内を意味する範囲内で右クリックすると利用できます。別の場所で操作しているときに右クリックすると、別のコンテキストメニューが表示されます。コードが追加しているコントロールは、メニューの最初のものです。それは "評価するBios"と呼ばれています。このコントロールに関するすべてが交渉可能であることに注意してください。それはすべてコードの中にあります。それらのすべてはあなたの好みまたは要件に変更することができます。
コントロールはポップアップタイプです。つまり、右にドロップダウンが開きます。そこで、「承認」、「拒否」、「保留」、または「レポート」を選択できます。最初の3つの選択肢のいずれかをクリックすると、示された内容でコメントが追加されます。 4番目のボタンをクリックすると、次のタスクが思い出されます。
Wordは、Range
にコメントを添付します。このコードでは、この目的でSelection.Range
が使用されています。したがって、コメントを挿入する前に、バイオのタイトルまたは一意のIDを選択することができます。あなたの選択を慎重にしていない場合は、間違ったバイオにコメントを添付することがあります。これは改善されるかもしれない1つの領域です。
別の領域は複数のコメントの問題です。コメントはコメント投稿者を特定するので、実際には複数のコメントが必要な場合があります。そうでない場合は、1つのコメントごとに1つのコメントしか存在しないようにすることができます。この問題は、StackOverflowで処理されました。in VBA (word) how do I add a comment to a range only if no comments exist?
ワークフローによっては、ドキュメントをセクションごとに1つのセクションに分割する必要があります。私はそれが必須ではないことを願っていますが、そうであれば、おそらくコンテキストコントロールがインストールされると同時に、コメントのためにドキュメントを準備するときに行われるかもしれません。
同様に、レポートを作成するのと同じコードでコンテキストコントロールを削除することができます。これは、文書を(おそらく最初からテンプレートから)作成し、テスト文書のすべてのコメントをループし、その性質を数え、その結果を新しいレポート文書に書き込むことを含む。それは難しいことではありませんが、別の日の仕事です。
ところで、私はあなたがコメントの使用を拒否したことを思い出しています。使いやすさがこのシステムを納得させることができない場合は、Wordが提供する機能を探してコメントを非表示にしてください。しかし、それでもあなたが納得しない場合は、コメントを作成する同じマクロが全く異なることを行うことができます。つまり、コンテキストメニューで提供される使いやすさを維持できます。可能性の欠如はありませんが、言葉のコメントのように即座にコメント作成者と生物学と評価の関連を見えるようにするには、上記より多くのプログラミングが必要です。
これは大きなプロジェクトです。私は婚約することなく助けを提供する方法を知らない。したがって、私は助けを提供する前にあなたのソリューションを購読する必要があります。結果の様子を説明してください。ドキュメントのすべてのバイオにドロップダウンがありますか?選択したコメントが表示された結果が印刷されますか?集計する値が表示されます(たとえば、Approve = 3、Hold = 1、Delete = 0)。どのようにして合計が表示されますか? – Variatus
以下の代替案を検討してください。 (A)コンテンツコントロールの代わりに "コメント"という単語を使用します。あなたは何らかの形でそれらを半自動化するかもしれません。 (B)単一のコンテンツコントロールを使用して現在の選択肢の横に表示し、その結果を別の「レポートドキュメント」に書き込み、選択が完了したことを示すために選択を色づけします。 (C)好きなときにNextボタンとBackボタンを使って、一度に1つずつBIOSを呼び出すことができるユーザーフォームを作成し、文書に(テキストまたはコメントとして)コメントを書くか、または「レポート文書」に書きます。 – Variatus
すべてのバイオにドロップダウンがありますが、何も印刷する必要はありません。ラベルの背後にある値は表示する必要はありません。これの主な目的は、各生物の選択を示すテーブル/ Excelを作成し、各選択のカウントを計算することです。現時点では、個々のバイオの一意の識別子に手動でコメントを追加し、そのコメントを別のExcelで手動で集計することが実践されています。私は、最終目標を達成できる限り、コメントを使用することに反対していませんが、どのようにしてそれを働かせることができるのか分かりません。 –