Reply
 
Thread Tools Display Modes
  #1   Report Post  
Posted to microsoft.public.word.docmanagement
Graham Beaumont
 
Posts: n/a
Default Form Generaters in Word

I have a form i have created in Word which is based in tables. It has a
series of text fields and checkboxs running through out. The entire form is
protected so that only the input fields can be used by users. I am looking
to add functionality into the form which will allow a section of the
protected form to be re-generated mutilple times to provide numerous sets of
information using the same field layouts. As far as i can tell the only way
to do this would be unprotect the document before executing a macro. However
if this is done when the form is already protected with information on the
form the existing information will be cleared when the macro is run and the
form reprotected. Can anyone see a way of getting around this.
  #2   Report Post  
Posted to microsoft.public.word.docmanagement
Jay Freedman
 
Posts: n/a
Default Form Generaters in Word

Yes, you need to use the optional NoReset parameter of the Protect command
within the macro. See
http://word.mvps.org/FAQs/MacrosVBA/...lfResetOff.htm.

--
Regards,
Jay Freedman
Microsoft Word MVP FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.

Graham Beaumont wrote:
I have a form i have created in Word which is based in tables. It
has a series of text fields and checkboxs running through out. The
entire form is protected so that only the input fields can be used by
users. I am looking to add functionality into the form which will
allow a section of the protected form to be re-generated mutilple
times to provide numerous sets of information using the same field
layouts. As far as i can tell the only way to do this would be
unprotect the document before executing a macro. However if this is
done when the form is already protected with information on the form
the existing information will be cleared when the macro is run and
the form reprotected. Can anyone see a way of getting around this.



  #3   Report Post  
Posted to microsoft.public.word.docmanagement
Charles Kenyon
 
Posts: n/a
Default Form Generaters in Word

Adding to what garfield-n-odie said, you would want to add language to
unprotect and then reprotect your form at the beginning and end of your
macro. Then it can be run while the form is protected. What follows is a set
of routines that I use to add rows to a couple of tables in a form. It works
for me but isn't well documented. Feel free to try adapting it but I won't
be much help because I wrote it a long time ago. The fields are actually
stored as AutoText and then inserted by the macro in the appropriate place.
(Make sure you store your AutoText in your template, not in normal.dot.)

What follows is my code. It is a mish-mash, I'm afraid, but it may help you
get started. We prefer if there are no expenses or payments, to hide those
tables altogether. The various procedures are called using keyboard
shortcuts. Those shortcuts are shown in a floating borderless textbox and
set to be hidden text (which is displayed but doesn't print). The form
starts with one data entry row in each table. The procedures check the
balance for a table and if it is 0, they go to the already inserted data
entry position. If it is not 0, it is assumed that the table has already
been used. Then it inserts a row, populates it with blank fields and moves
to the first inserted field.

This may be too much of kludge for you. I'm sure there are more effecient
ways of doing this. I suspect that I use AutoText to populate the rows
because I never took the time to learn how to write formfields using code.
On the other hand, if one wants to make changes, AutoText is easier to
change (for me) than is code.

Option Explicit
' Copyright 2003 Charles Kyle Kenyon All rights reserved
'
'
Sub AddTimeRow()
'
' AddTimeRow Macro
' Macro written 12/01/2003 by Charles Kyle Kenyon
' Revised 01/16/2004 by Charles Kyle Kenyon
'
' Triggered by F2 key
'
UnprotectDocumentMacro
Dim sTime As String
sTime = ActiveDocument.Bookmarks("TotalIn").Range.Text
If sTime = "0.0" Then
sTime = ActiveDocument.Bookmarks("TotalOut").Range.Text
If sTime = "0.0" Then
ActiveDocument.Bookmarks("TimeTitle").Select
ProtectDocumentMacro
Exit Sub
End If
End If
' Unprotected document
'
'
Application.ScreenUpdating = False
Dim oTemplate As Template
Set oTemplate = Templates(ThisDocument.FullName)
With Selection
.GoTo What:=wdGoToBookmark, Name:="Total1"
.MoveUp Unit:=wdLine, Count:=1
#If VBA6 Then
' Procedure for later versions
.InsertRowsBelow 1
.HomeKey Unit:=wdLine
#Else
' Procedure for Word 97
.InsertRows 1
.HomeKey Unit:=wdLine
.MoveDown Unit:=wdLine, Count:=1
.HomeKey Unit:=wdLine
.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
.Extend
.EndKey Unit:=wdLine
.MoveRight Unit:=wdCharacter, Count:=3
.Copy
.Delete Unit:=wdCharacter, Count:=1
.MoveUp Unit:=wdLine, Count:=1
.Paste
.MoveDown Unit:=wdLine, Count:=1
#End If
' oAutoText("TimeLine").Insert
Application.DisplayAutoCompleteTips = True
With AutoCorrect
.CorrectInitialCaps = True
.CorrectSentenceCaps = True
.CorrectDays = True
.CorrectCapsLock = True
.ReplaceText = True
End With
oTemplate.AutoTextEntries("zDateField").Insert Where _
:=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries("zTimeDescription").Inse rt _
Whe=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries("zTimeOutOfCourt").Inser t _
Whe=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries("zTimeInCourt").Insert _
Whe=.Range
.MoveLeft Unit:=wdCell
.MoveLeft Unit:=wdCell
.MoveLeft Unit:=wdCell
End With
Application.ScreenUpdating = True
Application.ScreenRefresh
ProtectDocumentMacro
End Sub

Sub InsertRowAboveMe()
'
' InsertRowAboveMe Macro
' Macro written 12/01/03 by Charles Kyle Kenyon
'
' Unprotect document
UnprotectDocumentMacro
'
'
Dim sAutoTextEntry1 As String
Dim sAutoTextEntry2 As String
Dim oTemplate As Template
Set oTemplate = Templates(ThisDocument.FullName)
'
With Selection
.SelectRow
' Test for Table 2
' -------------------------Table 2 - Time -----------------
If ActiveDocument.Range(0,
Selection.Tables(1).Range.End).Tables.Count = 2 Then
' Test for time row (4 columns)
If .Columns.Count = 4 Then
'
'' Add row if in a table
' If Selection.Information(wdWithInTable) = True Then
' Selection.Rows.Add BeforeRow:=Selection.Rows(1)
' End If
.InsertRows 1
.HomeKey Unit:=wdLine
Application.DisplayAutoCompleteTips = True
With AutoCorrect
.CorrectInitialCaps = True
.CorrectSentenceCaps = True
.CorrectDays = True
.CorrectCapsLock = True
.ReplaceText = True
End With
oTemplate.AutoTextEntries("zDateField").Insert Where _
:=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries("zTimeDescription").Inse rt _
Whe=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries("zTimeOutOfCourt").Inser t _
Whe=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries("zTimeInCourt").Insert _
Whe=.Range
.MoveLeft Unit:=wdCell
.MoveLeft Unit:=wdCell
.MoveLeft Unit:=wdCell
End If ' 4 Columns
End If ' Table 2
'
' Test for Table 3
' -------------------------Tables 3 & 4 -
Disbursements ----------------------
If ActiveDocument.Range(0,
Selection.Tables(1).Range.End).Tables.Count 2 Then
If ActiveDocument.Range(0,
Selection.Tables(1).Range.End).Tables.Count = 3 Then
sAutoTextEntry1 = "zExpenseDescription"
sAutoTextEntry2 = "zExpenseAmount"
Else ' Table 4 - Payments
sAutoTextEntry1 = "zPaymentDescription"
sAutoTextEntry2 = "zPaymentAmount"
End If
' Test for entry row (3 columns)
If .Columns.Count = 3 Then
'
'' Add row if in a table
' If Selection.Information(wdWithInTable) = True Then
' Selection.Rows.Add BeforeRow:=Selection.Rows(1)
' End If
.InsertRows 1
.HomeKey Unit:=wdLine
Application.DisplayAutoCompleteTips = True
With AutoCorrect
.CorrectInitialCaps = True
.CorrectSentenceCaps = True
.CorrectDays = True
.CorrectCapsLock = True
.ReplaceText = True
End With
oTemplate.AutoTextEntries("zDateField").Insert Where _
:=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries(sAutoTextEntry1).Insert _
Whe=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries(sAutoTextEntry2).Insert _
Whe=.Range
.MoveLeft Unit:=wdCell
.MoveLeft Unit:=wdCell
End If ' 3 Columns
End If ' Table 3

End With ' Selection
ProtectDocumentMacro
End Sub


Sub AddExpenseRow()
'
' AddExpenseRow Macro
' Macro written 11/18/2003 by Charles Kyle Kenyon
'
UnprotectDocumentMacro
If ActiveDocument.Bookmarks("Disbursements").Range.Te xt = "$ 0.00" Then
ActiveDocument.Bookmarks("DisbursementsTitle").Sel ect
ProtectDocumentMacro
Exit Sub
End If
' #If VBA6 Then
' With Selection
' .GoTo What:=wdGoToBookmark, Name:="Total2"
' .MoveUp Unit:=wdLine, Count:=1
' '
' ' Procedure for later versions
' .InsertRowsBelow 1
' .HomeKey Unit:=wdLine
' .MoveRight Unit:=wdCell
' .MoveRight Unit:=wdCell
' .TypeText Text:="0.00"
' .MoveLeft Unit:=wdCell
' .MoveLeft Unit:=wdCell
' End With
' NoBorders
' #Else
AddRow97 (3)
' #End If
ProtectDocumentMacro
End Sub


Sub AddPaymentRow()
'
' AddPaymentRow Macro
' Macro written 11/18/2003 by Charles Kyle Kenyon
'
UnprotectDocumentMacro
If ActiveDocument.Bookmarks("Payments").Range.Text = "$ 0.00" Then
ActiveDocument.Bookmarks("PaymentsCreditsTitle").S elect
ProtectDocumentMacro
Exit Sub
End If
' #If VBA6 Then
' With Selection
' .GoTo What:=wdGoToBookmark, Name:="Payments"
' .MoveUp Unit:=wdLine, Count:=1
' .InsertRowsBelow 1
' .HomeKey Unit:=wdLine
' .MoveRight Unit:=wdCell
' .MoveRight Unit:=wdCell
' .TypeText Text:="0.00"
' .MoveLeft Unit:=wdCell
' .MoveLeft Unit:=wdCell
' End With
' NoBorders
' #Else
AddRow97 (4)
' #End If
ProtectDocumentMacro
End Sub
Sub UpdateTotals()
'
' UpdateTotals Macro
' Macro written 11/18/2003 by Charles Kyle Kenyon
'
UnprotectDocumentMacro
' ActiveDocument.Tables(5).Select
' With Selection
' .Fields.Update
' .Fields.Update
'' CheckDisbursements ' If hidden and not empty, unhide
' .GoTo What:=wdGoToBookmark, Name:="Balance"
' .MoveLeft Unit:=wdCell
' .Collapse
' End With
ActiveDocument.Bookmarks("SummaryTable").Range.Fie lds.Update
ActiveDocument.Bookmarks("BalanceTopRow").Range.Fi elds.Update
ProtectDocumentMacro
End Sub

Private Sub NoBorders()
'
' NoBorders Macro
' Macro written 11/19/2003 by Charles Kyle Kenyon
'
Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend
With Selection.Cells
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
End With
Selection.HomeKey Unit:=wdLine
End Sub

Sub ShowHideDisbursements()
'
' ShowHideDisbursements Macro
' Macro written 11/24/03 by Charles Kyle Kenyon
' Toggles printing of disbursements category (Table 3)
'
UnprotectDocumentMacro
With Selection
.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=3, Name:=""
.MoveUp Unit:=wdLine, Count:=1
.EndKey Unit:=wdLine
.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
.Extend
.GoTo What:=wdGoToBookmark, Name:="Disbursements"
.Font.Hidden = wdToggle
With .Find
.ClearFormatting
With .Font
.Name = "Comic Sans MS"
.Hidden = False
End With
.Replacement.ClearFormatting
With .Replacement.Font
.Name = "Comic Sans MS"
.Hidden = True
End With
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
.ClearFormatting
.Replacement.ClearFormatting
End With
' .GoTo What:=wdGoToBookmark, Name:="DisbursementsSummary"
' .Font.Hidden = wdToggle
.GoTo What:=wdGoToBookmark, Name:="Disbursements"
.HomeKey Unit:=wdLine
.MoveUp Unit:=wdLine, Count:=1
End With
ProtectDocumentMacro
End Sub
'

Private Sub AddRow97(Optional lTable As Long = 2)
'
' AddRow97 Macro
' Macro recorded 11/24/03 by Charles Kyle Kenyon
'
Dim oTemplate As Template
Set oTemplate = Templates(ThisDocument.FullName)
Dim sAutoTextEntry1 As String
Dim sAutoTextEntry2 As String
If lTable = 3 Then
sAutoTextEntry1 = "zExpenseDescription"
sAutoTextEntry2 = "zExpenseAmount"
Else ' Table 4 - Payments
sAutoTextEntry1 = "zPaymentDescription"
sAutoTextEntry2 = "zPaymentAmount"
End If
'
Dim lRowCount As Long
Dim rRow As Range
UnprotectDocumentMacro
'
lRowCount = ActiveDocument.Range.Tables(lTable).Rows.Count
ActiveDocument.Tables(lTable).Rows(lRowCount - 1).Select
With Selection
.Copy
.Paste
ActiveDocument.Tables(lTable).Rows(lRowCount).Sele ct
.Delete Unit:=wdCharacter, Count:=1
.HomeKey Unit:=wdLine
Application.DisplayAutoCompleteTips = True
With AutoCorrect
.CorrectInitialCaps = True
.CorrectSentenceCaps = True
.CorrectDays = True
.CorrectCapsLock = True
.ReplaceText = True
End With
oTemplate.AutoTextEntries("zDateField").Insert Where _
:=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries(sAutoTextEntry1).Insert _
Whe=.Range
.MoveRight Unit:=wdCell
oTemplate.AutoTextEntries(sAutoTextEntry2).Insert _
Whe=.Range
.MoveLeft Unit:=wdCell
.MoveLeft Unit:=wdCell
ActiveDocument.Tables(lTable).Rows(lRowCount).Sele ct
With .Cells
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With ' .Cells
End With ' Selection
ActiveDocument.Range.Tables(lTable).Rows(lRowCount ).Select
Selection.HomeKey Unit:=wdLine
ProtectDocumentMacro
End Sub

Private Sub CheckDisbursements()
Dim lAmount As Variant
Dim rAmount As Range
Set rAmount = ActiveDocument.Bookmarks("Disbursements").Range
lAmount = rAmount.Text
' MsgBox Prompt:=lAmount
If lAmount "$ 0.00" Then
If rAmount.Font.Hidden = True Then
ShowHideDisbursements
MsgBox Prompt:="FYI: There is an amount (" & lAmount _
& ") in Disbursements." _
& vbCrLf & "Disbursements will print.", _
Title:="Disbursements Included in Totals"
End If
End If
End Sub

Sub FontsBigger()
UnprotectDocumentMacro
ActiveDocument.Styles("Body Text,bt,bt1").Font.Size = 12
ActiveDocument.Styles("Heading 2").Font.Size = 12
ActiveDocument.Styles("Subtitle").Font.Size = 14
ProtectDocumentMacro
End Sub

Sub UnprotectDocumentMacro()
' Unprotect document
If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
ActiveDocument.Unprotect
End If
End Sub

Sub ProtectDocumentMacro()
If ActiveDocument.ProtectionType wdAllowOnlyFormFields Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, noreset:=True
End If
End Sub

Sub DeleteRow()
'
' DeleteRow Macro
' Macro written 12/2/2003 by Charles Kyle Kenyon
'
Dim vResponse As Variant
Dim iTable As Integer
Dim iRows As Integer
vResponse = MsgBox(Prompt:="This will delete the row you are in!", _
Title:="Are you sure?", _
Buttons:=vbOKCancel)
If vResponse = vbOK Then
UnprotectDocumentMacro
If Selection.Information(wdWithInTable) = True Then
iTable = ActiveDocument.Range(0,
Selection.Tables(1).Range.End).Tables.Count
iRows = ActiveDocument.Tables(iTable).Rows.Count
If iTable = 2 Then
iRows = iRows - 1
End If
If iRows 3 Then
Selection.Rows.Delete
Else
MsgBox Prompt:="This row cannot be deleted.", _
Title:="Sorry"
End If ' iRows 3
End If ' within table
ProtectDocumentMacro
End If
End Sub

You'll notice that I commented out much of the conditionally compiled code.
I think I discovered it wasn't needed, but it has been a long time since I
did this. It could be that we just no longer have any Word97 machines
around. I'm not sure why it messes with the AutoCorrect settings. I've used
it without problems for a couple of years now.

The fields inserted using AutoText would have to be individually named as
they are inserted. It may be just as easy to create them using code.

I hope this gives you a leg up, anyway.

--
Charles Kenyon

Word New User FAQ & Web Directory: http://addbalance.com/word

Intermediate User's Guide to Microsoft Word (supplemented version of
Microsoft's Legal Users' Guide) http://addbalance.com/usersguide

See also the MVP FAQ: http://word.mvps.org/FAQs/ which is awesome!

My criminal defense site: http://addbalance.com
--------- --------- --------- --------- --------- ---------
This message is posted to a newsgroup. Please post replies
and questions to the newsgroup so that others can learn
from my ignorance and your wisdom.




"Graham Beaumont" Graham wrote in
message ...
I have a form i have created in Word which is based in tables. It has a
series of text fields and checkboxs running through out. The entire form
is
protected so that only the input fields can be used by users. I am
looking
to add functionality into the form which will allow a section of the
protected form to be re-generated mutilple times to provide numerous sets
of
information using the same field layouts. As far as i can tell the only
way
to do this would be unprotect the document before executing a macro.
However
if this is done when the form is already protected with information on the
form the existing information will be cleared when the macro is run and
the
form reprotected. Can anyone see a way of getting around this.



Reply
Thread Tools
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
How to put graphics on envelopes? Steve Koenig Microsoft Word Help 21 April 29th 23 02:47 AM
take yet another lesson from wordperfect "reveal codes" wordperfect is superior Microsoft Word Help 5 May 11th 09 07:58 PM
How do I insert a data entry prompt in a form letter? Hutch Microsoft Word Help 3 March 30th 06 06:04 AM
Word should allow to 'divide' page by 3 or 4, not just 2 CandasK Page Layout 2 February 28th 06 10:16 PM
creating forms Fluffypink Microsoft Word Help 4 March 9th 05 04:17 PM


All times are GMT +1. The time now is 03:19 PM.

Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 Microsoft Office Word Forum - WordBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Word"