Copy Paste Table Problems!

R

rachitm

I have figured out a way to copy paste a table (with fieldforms). I
have a macro button in my doc. which when I press copies the table in
the doc. and pastes it. The code to do the that is below:

Private Sub CommandButton1_Click()
Set aDoc = ActiveDocument
If aDoc.ProtectionType <> wdNoProtection Then
aDoc.Unprotect
ActiveDocument.Tables(2).Range.Copy
Set myRange = ActiveDocument.Range _
(Start:=ActiveDocument.Content.End - 1, _
End:=ActiveDocument.Content.End - 1)
myRange.PasteSpecial


aDoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End If
End Sub

Now, when the user fills in data in the table cells and then presses
the macro button, the pasted table has the same data in its cells. Is
there a way I could make sure that only the table is copy-pasted and
not the data inside it?
Any help would be great! Thank You
 
J

Jean-Guy Marcil

(e-mail address removed) was telling us:
(e-mail address removed) nous racontait que :
I have figured out a way to copy paste a table (with fieldforms). I
have a macro button in my doc. which when I press copies the table in
the doc. and pastes it. The code to do the that is below:

Private Sub CommandButton1_Click()
Set aDoc = ActiveDocument
If aDoc.ProtectionType <> wdNoProtection Then
aDoc.Unprotect
ActiveDocument.Tables(2).Range.Copy
Set myRange = ActiveDocument.Range _
(Start:=ActiveDocument.Content.End - 1, _
End:=ActiveDocument.Content.End - 1)
myRange.PasteSpecial


aDoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End If
End Sub

Now, when the user fills in data in the table cells and then presses
the macro button, the pasted table has the same data in its cells. Is
there a way I could make sure that only the table is copy-pasted and
not the data inside it?
Any help would be great! Thank You

How about this:

'_______________________________________
Dim aDoc As Document
Dim myRange As Range

Set aDoc = ActiveDocument
With aDoc
If .ProtectionType <> wdNoProtection Then
.Unprotect
.Tables(2).Range.Copy
Set myRange = .Range(Start:=.Content.End - 1, _
End:=.Content.End - 1)
myRange.PasteSpecial
.Tables(.Tables.Count).Range.Delete
aDoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End If
End With
'_______________________________________

--

Salut!
_______________________________________
Jean-Guy Marcil - Word MVP
(e-mail address removed)
Word MVP site: http://www.word.mvps.org
 
R

rachitm

Thanks Jean! This does work to some extent. But I have a table which
has formfields and some info inside other cells that I still need to be
copied into the new table....Bascically I just need formfields (empty)
to be copied...as some cell info.

eg.

heading 1 I <formfield> I
heading 2 I <formfield> I
heading 3 I <formfield> I
heading 4 I <formfield> I

I want all the headings to be copied and the formfields to be copied,
but the formfields should be empty.

Thanks
 
J

Jean-Guy Marcil

(e-mail address removed) was telling us:
(e-mail address removed) nous racontait que :
Thanks Jean! This does work to some extent. But I have a table which
has formfields and some info inside other cells that I still need to
be copied into the new table....Bascically I just need formfields
(empty) to be copied...as some cell info.

eg.

heading 1 I <formfield> I
heading 2 I <formfield> I
heading 3 I <formfield> I
heading 4 I <formfield> I

I want all the headings to be copied and the formfields to be copied,
but the formfields should be empty.

Try this then (This assumes that your formfields have a default value and
that the first item in a dropdown is not an actual choice, but something
like "Select please"...):

'_______________________________________
Dim aDoc As Document
Dim myRange As Range
Dim ffToReset As FormFields
Dim i As Long

Set aDoc = ActiveDocument
With aDoc
If .ProtectionType <> wdNoProtection Then
.Unprotect
.Tables(2).Range.Copy
Set myRange = .Range(Start:=.Content.End - 1, _
End:=.Content.End - 1)
myRange.PasteSpecial
Set myRange = .Tables(.Tables.Count).Range
aDoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
With myRange
Set ffToReset = .FormFields
If ffToReset.Count > 0 Then
For i = 1 To ffToReset.Count
Select Case ffToReset(i).Type
Case wdFieldFormTextInput
ffToReset(i).Result =
ffToReset(i).TextInput.Default
Case wdFieldFormCheckBox
ffToReset(i).CheckBox.Value = False
Case wdFieldFormDropDown
ffToReset(i).DropDown.Value = 1
End Select
Next
End If
End With
End If
End With
'_______________________________________

Please, try to be more explicit next time...

--

Salut!
_______________________________________
Jean-Guy Marcil - Word MVP
(e-mail address removed)
Word MVP site: http://www.word.mvps.org
 
R

rachitm

I didnt realize till today, but when you press the button to copy paste
the table the 2nd time, it erases the info off the table that was
created when the button was pressed the 1st time. What could be done
about that?

Also, is there a way to create space between all the pasted tables?
That could be one way of solving this problem.

Thanks
 
J

Jean-Guy Marcil

(e-mail address removed) was telling us:
(e-mail address removed) nous racontait que :
I didnt realize till today, but when you press the button to copy
paste the table the 2nd time, it erases the info off the table that
was created when the button was pressed the 1st time. What could be
done about that?

Also, is there a way to create space between all the pasted tables?
That could be one way of solving this problem.

The problem you observed is caused by the fact that the second time you use
the function, the second new table is joined to the first new table, thus
making one bigger table.

Once again, I must reiterate, please, next time you post a question, explain
the extent of what you are trying to achieve and how a typical user will
interact with your document... You never mentioned that the function would
be used more than once, so, when I tested my code. I never tested for
that...I just assumed that it would be used once.

Try this:

'_______________________________________
Dim aDoc As Document
Dim myRange As Range
Dim ffToReset As FormFields
Dim i As Long

Set aDoc = ActiveDocument
With aDoc
If .ProtectionType <> wdNoProtection Then
.Unprotect
.Tables(2).Range.Copy
Set myRange = .Range(Start:=.Content.End - 1, _
End:=.Content.End - 1)
With myRange
.InsertParagraphAfter
.Collapse wdCollapseStart
.PasteSpecial
End With
Set myRange = .Tables(.Tables.Count).Range
aDoc.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
With myRange
Set ffToReset = .FormFields
If ffToReset.Count > 0 Then
For i = 1 To ffToReset.Count
Select Case ffToReset(i).Type
Case wdFieldFormTextInput
ffToReset(i).Result =
ffToReset(i).TextInput.Default
Case wdFieldFormCheckBox
ffToReset(i).CheckBox.Value = False
Case wdFieldFormDropDown
ffToReset(i).DropDown.Value = 1
End Select
Next
End If
End With
End If
End With
'_______________________________________

--

Salut!
_______________________________________
Jean-Guy Marcil - Word MVP
(e-mail address removed)
Word MVP site: http://www.word.mvps.org
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top