Excel一直在运行我的宏

时间:2015-11-07 10:22:17

标签: excel-vba vba excel

我有一本工作簿,有几个人会在一周内参加。 每个条目都在自己的行上。现在我想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个用户名。 是否可以更改代码,以便我可以写入固定列中的单元格,该行处于活动状态?

/塔兹

1 个答案:

答案 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

但是我还有一个问题,我的工作簿中有很多工作表,我是否需要将这些代码放在所有工作表中,或者是否有一种方法可以避免这种情况,并且只能从一个代码运行地方?