簡體   English   中英

Private Sub Worksheet_Change(ByVal Target As Range)並不總是有效

[英]Private Sub Worksheet_Change(ByVal Target As Range) not working always

我是 VBA 的初學者,我對 Private Sub Worksheet_Change 代碼有疑問 - 它並不總是有效。 我希望當 A 列中的單元格更改其值時,將其值寫入 B 列中的同一行,進行更改的 Windows 用戶。

請看下面我的代碼,用 Sheet1 編寫,而不是在模塊中:

Private Sub Worksheet_Change(ByVal Target As Range)

    Worksheets("Sheet1").Unprotect Password:=Password

    x = Target.Row         

    If Not Intersect(Target, Range("A" & x)) Is Nothing Then
        Range("B" & x).Value = Environ("USERNAME")
    End If

    Worksheets("Sheet1").Protect Password:=Password

End Sub
  1. 首先確保A列中的單元格未鎖定。 (編碼器)
  2. 創建密碼字符串變量。 (代碼)
  3. 允許更改多個單元格(代碼)
  4. 防止事件重新進入(代碼)

第一步應該由編碼人員完成。


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Long, pswrd As String, cell As Range, inter As Range

    pswrd = "secret"
    Set inter = Intersect(Range("A:A"), Target)
    If inter Is Nothing Then Exit Sub
    
    Worksheets("Sheet1").Unprotect Password:=pswrd
    Application.EnableEvents = False
        For Each cell In inter
            x = cell.Row
            Range("B" & x).Value = Environ("USERNAME")
        Next cell
    Application.EnableEvents = True
    Worksheets("Sheet1").Protect Password:=pswrd

End Sub

編輯#1:

根據 Darren Bartrup-Cook 的建議,我們可以放棄循環

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Long, pswrd As String, cell As Range, inter As Range

    pswrd = "secret"
    Set inter = Intersect(Range("A:A"), Target)
    If inter Is Nothing Then Exit Sub
    
    Worksheets("Sheet1").Unprotect Password:=pswrd
        Application.EnableEvents = False
            inter.Offset(0, 1).Value = Environ("USERNAME")
        Application.EnableEvents = True
    Worksheets("Sheet1").Protect Password:=pswrd

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM