We have documents that need to go through a formal approval process. Without
getting into workflow, etc..., I just need a simple macro that will grab the
currently logged on userid along with the date/time stamp. I'm a novice vba
user and have done some vba stuff in Excel. Actually, I was able to do this
in Excel by creating a control box and when the user clicked either Yes or
No, their username and the date/time stamp appeared next to the check box.
Oh, in Excel I have two checkboxes, one for yes and one for no. If they
change their mind and uncheck the box then their username and date/time
disappear. I need this same functionality in Word as well as to have these
"approval" fields locked after it is accepted or rejected (for auditing
purposes). I have found some Word code but it makes no sense to me because
unlike Excel there are no cell, sheet, etc... references. I would appreciate
any help I can get on this.

Thanks!

Randy

Re: Approval VBA Macro by Ed

Ed
Wed Aug 09 18:01:19 CDT 2006

Hi, Randy. Here's one solution. I used code from the Word MVP site -
http://www.word.mvps.org/FAQs/MacrosVBA/GetCurUserName.htm - provided by
Astrid Zeelenberg. The function code must be in a regular module. I called
it from a UserForm with a label and two command buttons.

Here's the module code:

Option Explicit

'Declare for call to mpr.dll.
Declare Function WNetGetUser Lib "mpr.dll" _
Alias "WNetGetUserA" (ByVal lpName As String, _
ByVal lpUserName As String, lpnLength As Long) As Long

Const NoError = 0 'The Function call was successful


Function GetUserName() As String

'Buffer size for the return string.
Const lpnLength As Long = 255

'Get return buffer space.
Dim status As Integer

'For getting user information.
Dim lpName, lpUserName As String

'Assign the buffer size constant to lpUserName.
lpUserName = Space$(lpnLength + 1)

'Get the log-on name of the person using product.
status = WNetGetUser(lpName, lpUserName, lpnLength)

'See whether error occurred.
If status = NoError Then
'This line removes the null character. Strings in C are null-
'terminated. Strings in Visual Basic are not null-terminated.
'The null character must be removed from the C strings to be used
'cleanly in Visual Basic.
lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
End If

'Display the name of the person logged on to the machine.
GetUserName = lpUserName

End Function

Sub ZZ_TimeStamp()
UserForm3.Show vbModeless
End Sub

Here's the UserForm code:

Dim strStamp As String
Dim strUser As String
Dim strDate As String

Private Sub CommandButton1_Click()
Selection.Range.Text = strStamp
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
strUser = GetUserName
strDate = Format(Date, "dd mmm yyyy")
strStamp = strUser & " - " & strDate
Label1.Caption = strStamp
End Sub

HTH
Ed

"Randy" <Randy@discussions.microsoft.com> wrote in message
news:0E9A9625-BD21-4706-99CA-B3B1958CD639@microsoft.com...
> We have documents that need to go through a formal approval process.
> Without
> getting into workflow, etc..., I just need a simple macro that will grab
> the
> currently logged on userid along with the date/time stamp. I'm a novice
> vba
> user and have done some vba stuff in Excel. Actually, I was able to do
> this
> in Excel by creating a control box and when the user clicked either Yes or
> No, their username and the date/time stamp appeared next to the check box.
> Oh, in Excel I have two checkboxes, one for yes and one for no. If they
> change their mind and uncheck the box then their username and date/time
> disappear. I need this same functionality in Word as well as to have
> these
> "approval" fields locked after it is accepted or rejected (for auditing
> purposes). I have found some Word code but it makes no sense to me
> because
> unlike Excel there are no cell, sheet, etc... references. I would
> appreciate
> any help I can get on this.
>
> Thanks!
>
> Randy



Re: Approval VBA Macro by Randy

Randy
Thu Aug 10 07:43:01 CDT 2006

Ed,

Thanks for the quick response. I'm not familiar with userforms and buttons
in Word but I was able to figure it out in Excel so I'll give it a shot.
Also, any idea how to lock down the checkbox and user information once a box
has been checked? We need it for auditing purposes. I was thinking one way
may be to ask them "are you sure?" when checking a box and then somehow have
that information locked so that it cannot be changed.

Randy

"Ed" wrote:

> Hi, Randy. Here's one solution. I used code from the Word MVP site -
> http://www.word.mvps.org/FAQs/MacrosVBA/GetCurUserName.htm - provided by
> Astrid Zeelenberg. The function code must be in a regular module. I called
> it from a UserForm with a label and two command buttons.
>
> Here's the module code:
>
> Option Explicit
>
> 'Declare for call to mpr.dll.
> Declare Function WNetGetUser Lib "mpr.dll" _
> Alias "WNetGetUserA" (ByVal lpName As String, _
> ByVal lpUserName As String, lpnLength As Long) As Long
>
> Const NoError = 0 'The Function call was successful
>
>
> Function GetUserName() As String
>
> 'Buffer size for the return string.
> Const lpnLength As Long = 255
>
> 'Get return buffer space.
> Dim status As Integer
>
> 'For getting user information.
> Dim lpName, lpUserName As String
>
> 'Assign the buffer size constant to lpUserName.
> lpUserName = Space$(lpnLength + 1)
>
> 'Get the log-on name of the person using product.
> status = WNetGetUser(lpName, lpUserName, lpnLength)
>
> 'See whether error occurred.
> If status = NoError Then
> 'This line removes the null character. Strings in C are null-
> 'terminated. Strings in Visual Basic are not null-terminated.
> 'The null character must be removed from the C strings to be used
> 'cleanly in Visual Basic.
> lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
> End If
>
> 'Display the name of the person logged on to the machine.
> GetUserName = lpUserName
>
> End Function
>
> Sub ZZ_TimeStamp()
> UserForm3.Show vbModeless
> End Sub
>
> Here's the UserForm code:
>
> Dim strStamp As String
> Dim strUser As String
> Dim strDate As String
>
> Private Sub CommandButton1_Click()
> Selection.Range.Text = strStamp
> End Sub
>
> Private Sub CommandButton2_Click()
> Unload Me
> End Sub
>
> Private Sub UserForm_Initialize()
> strUser = GetUserName
> strDate = Format(Date, "dd mmm yyyy")
> strStamp = strUser & " - " & strDate
> Label1.Caption = strStamp
> End Sub
>
> HTH
> Ed
>
> "Randy" <Randy@discussions.microsoft.com> wrote in message
> news:0E9A9625-BD21-4706-99CA-B3B1958CD639@microsoft.com...
> > We have documents that need to go through a formal approval process.
> > Without
> > getting into workflow, etc..., I just need a simple macro that will grab
> > the
> > currently logged on userid along with the date/time stamp. I'm a novice
> > vba
> > user and have done some vba stuff in Excel. Actually, I was able to do
> > this
> > in Excel by creating a control box and when the user clicked either Yes or
> > No, their username and the date/time stamp appeared next to the check box.
> > Oh, in Excel I have two checkboxes, one for yes and one for no. If they
> > change their mind and uncheck the box then their username and date/time
> > disappear. I need this same functionality in Word as well as to have
> > these
> > "approval" fields locked after it is accepted or rejected (for auditing
> > purposes). I have found some Word code but it makes no sense to me
> > because
> > unlike Excel there are no cell, sheet, etc... references. I would
> > appreciate
> > any help I can get on this.
> >
> > Thanks!
> >
> > Randy
>
>
>

Re: Approval VBA Macro by Ed

Ed
Thu Aug 10 09:14:33 CDT 2006

Randy,

UserForms and buttons work the same in Word as they do in Excel. See
http://word.mvps.org/FAQs/Userforms/index.htm

The macro set-up I presented inserts the UserName from the computer station
and the current date at the insertion point in the Word document that is
currently open. If you want to make this a permanent part of the document,
you might consider writing this to a Custom Document Variable. You should
be able then to put a Field somewhere that displays this information.
Anything you put in the document text - including a field - can be deleted;
with a field, though, the information itself is still there as part of the
metadata.

HTH
Ed

"Randy" <Randy@discussions.microsoft.com> wrote in message
news:B4782810-8729-4D13-9E7E-6B1B6BA98D67@microsoft.com...
> Ed,
>
> Thanks for the quick response. I'm not familiar with userforms and
> buttons
> in Word but I was able to figure it out in Excel so I'll give it a shot.
> Also, any idea how to lock down the checkbox and user information once a
> box
> has been checked? We need it for auditing purposes. I was thinking one
> way
> may be to ask them "are you sure?" when checking a box and then somehow
> have
> that information locked so that it cannot be changed.
>
> Randy
>
> "Ed" wrote:
>
>> Hi, Randy. Here's one solution. I used code from the Word MVP site -
>> http://www.word.mvps.org/FAQs/MacrosVBA/GetCurUserName.htm - provided by
>> Astrid Zeelenberg. The function code must be in a regular module. I
>> called
>> it from a UserForm with a label and two command buttons.
>>
>> Here's the module code:
>>
>> Option Explicit
>>
>> 'Declare for call to mpr.dll.
>> Declare Function WNetGetUser Lib "mpr.dll" _
>> Alias "WNetGetUserA" (ByVal lpName As String, _
>> ByVal lpUserName As String, lpnLength As Long) As Long
>>
>> Const NoError = 0 'The Function call was successful
>>
>>
>> Function GetUserName() As String
>>
>> 'Buffer size for the return string.
>> Const lpnLength As Long = 255
>>
>> 'Get return buffer space.
>> Dim status As Integer
>>
>> 'For getting user information.
>> Dim lpName, lpUserName As String
>>
>> 'Assign the buffer size constant to lpUserName.
>> lpUserName = Space$(lpnLength + 1)
>>
>> 'Get the log-on name of the person using product.
>> status = WNetGetUser(lpName, lpUserName, lpnLength)
>>
>> 'See whether error occurred.
>> If status = NoError Then
>> 'This line removes the null character. Strings in C are null-
>> 'terminated. Strings in Visual Basic are not null-terminated.
>> 'The null character must be removed from the C strings to be used
>> 'cleanly in Visual Basic.
>> lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
>> End If
>>
>> 'Display the name of the person logged on to the machine.
>> GetUserName = lpUserName
>>
>> End Function
>>
>> Sub ZZ_TimeStamp()
>> UserForm3.Show vbModeless
>> End Sub
>>
>> Here's the UserForm code:
>>
>> Dim strStamp As String
>> Dim strUser As String
>> Dim strDate As String
>>
>> Private Sub CommandButton1_Click()
>> Selection.Range.Text = strStamp
>> End Sub
>>
>> Private Sub CommandButton2_Click()
>> Unload Me
>> End Sub
>>
>> Private Sub UserForm_Initialize()
>> strUser = GetUserName
>> strDate = Format(Date, "dd mmm yyyy")
>> strStamp = strUser & " - " & strDate
>> Label1.Caption = strStamp
>> End Sub
>>
>> HTH
>> Ed
>>
>> "Randy" <Randy@discussions.microsoft.com> wrote in message
>> news:0E9A9625-BD21-4706-99CA-B3B1958CD639@microsoft.com...
>> > We have documents that need to go through a formal approval process.
>> > Without
>> > getting into workflow, etc..., I just need a simple macro that will
>> > grab
>> > the
>> > currently logged on userid along with the date/time stamp. I'm a
>> > novice
>> > vba
>> > user and have done some vba stuff in Excel. Actually, I was able to do
>> > this
>> > in Excel by creating a control box and when the user clicked either Yes
>> > or
>> > No, their username and the date/time stamp appeared next to the check
>> > box.
>> > Oh, in Excel I have two checkboxes, one for yes and one for no. If
>> > they
>> > change their mind and uncheck the box then their username and date/time
>> > disappear. I need this same functionality in Word as well as to have
>> > these
>> > "approval" fields locked after it is accepted or rejected (for auditing
>> > purposes). I have found some Word code but it makes no sense to me
>> > because
>> > unlike Excel there are no cell, sheet, etc... references. I would
>> > appreciate
>> > any help I can get on this.
>> >
>> > Thanks!
>> >
>> > Randy
>>
>>
>>