我有一本工作簿,有几个人会在一周内参加。 每个条目都在自己的行上。现在我想excel自动插入" Windows登录名"作出该条目的用户,请说明该特定行中的K列。
我找到并尝试使用以下脚本。
Function GetName(Optional NameType As String) As String
'Function purpose: To return the following names:
'Defaults to MS Office username if no parameter entered
'
'Formula should be entered as =GetName([param])
'
'For Name of Type Enter Text OR Enter #
'MS Office User Name "Office" 1 (or leave blank)
'Windows User Name "Windows" 2
'Computer Name "Computer" 3
'Force application to recalculate when necessary. If this
'function is only called from other VBA procedures, this
'section can be eliminated. (Req'd for cell use)
Application.Volatile
'Set value to Office if no parameter entered
If Len(NameType) = 0 Then NameType = "OFFICE"
'Identify parameter, assign result to GetName, and return
'error if invalid
Select Case UCase(NameType)
Case Is = "OFFICE", "1"
GetName = Application.UserName
Exit Function
Case Is = "WINDOWS", "2"
GetName = Environ("UserName")
Exit Function
Case Is = "COMPUTER", "3"
GetName = Environ("ComputerName")
Exit Function
Case Else
GetName = CVErr(xlErrValue)
End Select
End Function
然后我会从相关单元格中调用GetName(2),但是当新用户输入新条目时,所有以前的用户名都将设置为新用户。
欢迎任何有关此问题的帮助
THX TAZ
更新:
对于答案而言,他们帮助我进一步解决了我的问题。 我现在已经提出了这个代码,但有时会发生一些奇怪的事情。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim User As String
User = Environ("UserName")
If Not Intersect(Target, Range("a7:a30")) Is Nothing Then
ActiveSheet.Unprotect
Application.EnableEvents = False
ActiveCell.Offset(0, 10).Value = User
Application.EnableEvents = True
ActiveSheet.Protect
End If
End Sub
这几乎可以像它应该的那样工作,但是有可能愚弄偏移,所以它有时会只写9个用户名。 是否可以更改代码,以便我可以写入固定列中的单元格,该行处于活动状态?
/塔兹
答案 0 :(得分:0)
在这个论坛的帮助下,我能够将excel做到我想要的,我在这里发布代码。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim row, col, user, ColCell As String
user = Environ("UserName")
col = "G" 'Set the Column ?
If Not Intersect(Target, Range("B7:B30")) Is Nothing Then
ActiveSheet.Unprotect
Application.EnableEvents = False
row = Split(Selection.Address, "$")(2) 'Get row number
ColCell = col & row
Range(ColCell).Value = user
'MsgBox "ColCell is : " & ColCell
Application.EnableEvents = True
ActiveSheet.Protect
End If
End Sub
但是我还有一个问题,我的工作簿中有很多工作表,我是否需要将这些代码放在所有工作表中,或者是否有一种方法可以避免这种情况,并且只能从一个代码运行地方?