システムwiki

NULLフィールドをチェックし、{エラーを回避するには「」に値を設定する.ドキュメント変数が指定されていません.}

JoyHana 解決済 最終更新日:2021-05-02 02:36

HI、

私はVBAとマクロに新しいが、符号化が新しいことではありません...

マクロ対応の.dotファイルを作成しました(下位互換性のための.dotでなければなりません)

私は私の形式で93フィールドを持っていて、各フィールドに値がある限り、ユーザーフォームはテンプレートを完全にポピュレイしました.私の問題は、いくつかのフィールドに値を持たず、NULLの場合はエラーメッセージが表示されることです.初期化します
スペースを持つフィールドですが、ユーザーがスペースを削除する場合は、フォーム内のエントリを削除してから、フォームはnullを送信します.

私の送信では、NULLフィールドを確認してスペースに設定しようとしています.

私はGreg Maxeyのテンプレートとwww.gregmaxey.comで見つかった指示から始めました(お礼を言う!).

誰もがこれが機能していない理由、そしてそれを修正するために必要なのか教えてもらえますか?

サブupdateThisformsFields()
Word.Rangeとしての薄暗いプリング
薄暗い
iLink= ActiveDocument.Sections(1).Headers(1).range.storyType
ActiveDocument.StoryRangesの各プレゼンテージについて
「NULLの喜びの確認とスペースに置き換えるためにスペースに置き換える

prange.find
.text= "" "" "" .replaction.text=「うまく機能します」
.wrap= wdfindContinue
.execute置換:= wdreplaceAll


Prange.Fields.Update
set prange= prange.nextStoryRange
Prangeが何もないまでループする
次の
'上の喜びテストコード-元のコードをコメントする
'do
'Prange.Fields.Update
'Prange= Prange.NextStoryRange
'Prangeが何も<まで '次へ
'更新後にユーザーフォームを返しますので、編集を行うことができます. CallUserform
終了SUB

この条件をテンプレートに入れて、エラーメッセージが表示されないように追加したいが、変数が削除されたためにマクロが終了した場合...実際にスペースを挿入することは私のために良いです
ニーズ

{{docvariable varname}= "error!ドキュメント変数が指定されていません." "" "" docvariable varname}}}

返信リスト(回答:3)

1 #
DougRob

エラーの原因を取り除くことをお勧めします.多くの場合、追加するだけで簡単に実行できます

& ""

変数に割り当てられている値に.次に、値がnullの場合、変数には単一のスペースが含まれます.

ドキュメント内のdocvariableフィールドの場所によっては、値の前にスペースを追加する方が適切な場合があります.docvariableフィールドの結果にスペースが含まれることを許容できない場合は、コードで
は、値がnullかどうかを確認し、nullの場合は変数をスペースに設定するために、and if thenelseフィールドを使用する必要があります.

2 #
JoyHana

誰かが同様のジレンマを抱えている場合に備えて、この問題に自分の解決策を追加したかったのです.

null値を確認できなかった理由は、フォームが送信されて値がnullの場合、フォームが変数を省略しているためです.したがって、変数がnullであるかどうかのチェックは、存在しないため機能しません.

これを解決するために、すべてのドキュメント変数を一覧表示する配列を作成しました.たくさん(50以上)あるので、Wordテンプレートから変数を読み取って配列を作成するスクリプトを実行しました.

Sub ListVariables()
Dim oVar As Variable
Dim oDoc As Document
Dim sText As String
sText=""
For Each oVar In ActiveDocument.Variables
'この関数を使用して、ドキュメント内で見つけられない奇妙な変数を削除します
'If oVar.Name="varPhone" Then
'oVar.Delete
'サブを終了
'End If
sText=sText&oVar.Name&vbTab&oVar.Value&vbCr
Next oVar
If sText="" Then
sText="このドキュメントには変数がありません"
End If
If ActiveDocument.Variables.Count<= 20 Then
MsgBox sText
Else
oDoc=Documents.Add
を設定します oDoc.Rangeを使用
.ParagraphFormat.TabStops.Add _
位置:= CentimetersToPoints(7)、_
Alignment:= wdAlignTabLeft、_
リーダー:= wdTabLeaderDots
.Text=sText
End With
End If
End Sub

そのリストを使用して、ドキュメントに含める必要のある変数の配列を作成しました.このリストを使用して、フォームが更新している変数を比較し、変数が存在しない場合は、再度追加して「」に設定します.
".

バリアントとしてmyVariablesを暗くする
Dim varName As Variant
文字列としてダミーを暗くする
myVariables=Array( "varName1"、 "varName2"、 "varName3")
myVariablesの各varNameについて
'MsgBox varName
エラー時に次を再開
ダミー= ActiveDocument.Variables(varName)
If Err.Number<>0 Then
'それは存在しません
'MsgBox "Variable"&varName& "が存在しないため、追加して空白にリセットします."
ActiveDocument.Variables.Add Name:= varName、Value:= ""
終了する場合
次のvarName

質問と回答を投稿してくれたコミュニティに感謝します.

応答2# ->にスキップ
3 #
DougRob

より良い使用法:

Dim strvars As String
Dim rngcode As Range
Dim strCode As String
Dim arrvars As Variant
Dim blnMatch As Boolean
With ActiveDocument
strvars=""
For i=1 To.Fields.Count
If.Fields(i).Type=wdFieldDocVariable Then
rngcode=.Fields(i).Code
を設定します strCode=UCase(rngcode.Text)
strvars=strvars& "|" &Trim(Replace(strCode、 "DOCVARIABLE"、 ""))
終了する場合
次は
strvars=Mid(strvars、2)
arrvars=Split(strvars、 "|")
i=LBound(arrvars)の場合UBound(arrvars)へ
blnMatch=False
j=1の場合.Variables.Count
arrvars(i)= UCase(.Variables(j).Name)の場合
blnMatch=True
終了
終了する場合
次のj
blnMatch=Falseの場合
.Variables(arrvars(i)).Value=""
終了する場合
次は
.Range.Fields.Update
End With