2017-08-10 19 views
0

これをコード化する方法を理解しようとするといくつか問題があります。私は5列(数量、部品番号、説明、金額、合計)の部品表を持っています。コマンドボタンをクリックすると、新しい行が追加されます。新しく追加された各セルには、新しい行が追加されるたびに名前と番号が1ずつ増加するタグ付きテキストコンテンツコントロールが含まれています。たとえば、Qty3、Qty4、Qty5などです。Amount列とTotal列は同じことを行います。私は合計コンテンツコントロールをロックしています。Word VBAテーブルから追加された行を削除しています

"Total"コンテンツコントロールは、行を削除する前にロックを解除する必要があることが分かりました。現在、コードは "Total3"コンテンツコントロールを選択しており、行がテーブルの最後であるため、正常に削除されます。私が理解できない部分は、どの「Total#」コンテンツコントロールがテーブルの最後にあるのかをコードに識別させる方法です。私はこれが意味をなさないことを願っており、必要な場合は何かをクリアすることができます。前もって感謝します!

'Add Part Button 

Private Sub CommandButton1_Click() 
Dim oTable As Table 
Set oTable = ActiveDocument.Tables(8) 
MakePartsRow oTable 
lbl_Exit: 
Set oTable = Nothing 
Exit Sub 
End Sub 

'Delete Part Button 

Private Sub CommandButton11_Click() 
Dim oTable As Table 
Dim CC As ContentControl 
Set oTable = ActiveDocument.Tables(8) 
Dim lngRow As Long 
Dim Index As Long 
Dim sName1 As String 

If Not ActiveDocument.ProtectionType = wdNoProtection Then 
     ActiveDocument.Unprotect 
End If 
If oTable.Rows.Count > 2 Then 
Set CC = ActiveDocument.SelectContentControlsByTag("Total3").Item(1) 
With CC 
    .LockContents = False 
    .Delete True 
End With 
oTable.Rows.Last.Delete 
End If 
    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, _ 
    Password:="" 
End Sub 

Sub MakePartsRow(oTable As Table) 
Dim oNewRow As Row 
Dim oRng As Range 
Dim oCell As Cell 
Dim iCell As Integer 
Dim oCC As ContentControl, oCC1 As ContentControl, oCC2 As ContentControl 
Dim lngCell1 As Long, lngCell2 As Long 
lngCell1 = 0: lngCell2 = 0 
If Not ActiveDocument.ProtectionType = wdNoProtection Then 
    ActiveDocument.Unprotect 
End If 
Set oNewRow = oTable.Rows.Add 
oNewRow.Range.Font.Bold = False 
For iCell = 1 To 5 
    Set oCell = oNewRow.Cells(iCell) 
    Set oRng = oCell.Range 
    oRng.End = oRng.End - 1 
    Select Case iCell 
     Case 1 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .Range.Text = "1" 
       .SetPlaceholderText , , ("Qty") 
       .Tag = "Qty" & oCell.RowIndex 
      End With 
     Case 2 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .SetPlaceholderText , , ("Part No.") 
      End With 
     Case 3 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .SetPlaceholderText , , ("Description") 
      End With 
     Case 4 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .Range.Text = "" 
       .SetPlaceholderText , , ("Amount") 
       .Tag = "Amount" & oCell.RowIndex 
      End With 
     Case 5 
      Set oCC = oRng.ContentControls.Add(wdContentControlText) 
      With oCC 
       .SetPlaceholderText , , ("Total") 
       .Tag = "Total" & oCell.RowIndex 
      End With 
    End Select 
Next iCell 
oNewRow.Cells(4).Select 
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, _ 
Password:="" 
End Sub 

答えて

0

私は、あなたのCommandButton11_Click()サブで、合計*のようなタグでコンテンツコントロールの数をカウントすることをお勧めすなわち:

Dim ControlCount as Long 
Dim ControlIndex as Long 
ControlIndex = 0 
For ControlIndex = 1 to ActiveDocument.ContentControls.Count 
    If ActiveDocument.ContentControls(ControlIndex).Tag Like "Total*" Then ControlCount = ControlCount + 1 
Next ControlIndex 

あなたが知っているそのようにどのように多くの合計コントロールします持っていて、代わりにあなたの

Set CC = ActiveDocument.SelectContentControlsByTag("Total" & ControlCount).Item(1) 

を使用して、最後の1を参照することができます。

を10
Set CC = ActiveDocument.SelectContentControlsByTag("Total3").Item(1) 
+0

返信いただきありがとうございます。私はあなたのコードを挿入し、この実行時エラーが発生しています:コレクションの要求されたメンバーが存在しません。 Set CCコマンドが強調表示されています。私はそれを間違った場所に挿入したのだろうか? – BradBerger

+0

どこのコードにForループを挿入しましたか(返信にコードの最初の部分)? エラーが発生したら、_Immediate_ウィンドウ(Ctrl + Gキーを押して)に移動し、「?ControlCount」と入力します。 実際にそのコントロール(_Total_)が存在するかどうかを確認できますか? – Prebsus

+0

私は考えていることが2つありました。私はおそらく間違った場所にそれを持っていた。 Unprotectコードの上にあるForループを移動し、最後の行のコンテンツコントロールより1つ少ないところでControlCountをチェックしました。私はちょうど "CC"タグ選択のControlCountに "+1"を追加し、それは魅力的に機能しました。私はまた、 "ControlCount> 1ならば"というタグをCCでタグを選択する直前に追加したので、行がないときにボタンがクリックされると、エラーは発生しません。あなたの助けてくれてありがとう! – BradBerger

関連する問題