添加新行时,VBA Worksheet_change,插入今天的日期

时间:2017-05-19 05:40:14

标签: excel vba excel-vba

我试图在我的数据库表上使用公式=今天(),当我第二天尝试插入一个新行时,整个数据甚至以前的日期都被替换为当天的日期。反正有没有阻止它?或者是否可以使用worksheet_change在插入新行时更新日期列,新角色的日期列将具有当前日期,而第二天再次更新则不会被替换?请指教谢谢

6 个答案:

答案 0 :(得分:1)

ZQ7,这个答案正如我在评论中提到的那样,找到= TODAY()公式单元格并将其值粘贴到当前单元格中。然后,您可以添加新行并运行其余代码..

Option Explicit

Sub prevenddate()
Dim mert As Range
Dim wb As Workbook
Dim ws As Worksheet

Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
    Cells.Find(What:="=TODAY()", After:= _
        ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Copy
ActiveCell.PasteSpecial xlPasteValues

End Sub

这是理想的答案!

以下代码首先在工作表中查找任何=TODAY()公式,如果结果是今天的日期,则它不会执行任何操作。但如果它与今天的日期不同那么它只是 Paste Values

Private Sub Worksheet_Change(ByVal Target As Range)

Dim wb As Workbook
Dim ws As Worksheet
Dim myRw As Long, myCl As Long
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
On Error GoTo 10

myRw = ActiveCell.Row
myCl = ActiveCell.Column

        ws.Cells.Find(What:="=TODAY()", After:= _
        ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Activate
  If ActiveCell.Value <> Date Then

        Cells.Find(What:="=TODAY()", After:= _
        ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Copy
ActiveCell.PasteSpecial xlPasteValues
  Else
End If
10
  ws.Cells(myRw, myCl).Offset(-1, 0).Activate
Application.CutCopyMode = False
End Sub

答案 1 :(得分:0)

请尝试此代码

Public Function MyToday() As Date
MyToday = CDate(Now() \ 1)
End Function

应该像

一样调用
MyToday()

答案 2 :(得分:0)

将以下代码放在图纸模块上。

如果从Row2开始在B列中输入内容,代码将在A列中插入日期。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
On Error GoTo SkipError
If Target.Column = 2 And Target.Row > 1 Then
    Application.EnableEvents = False
    r = Target.Row
    If Target <> "" Then
        If Cells(r, "A") = "" Then
            Cells(r, "A") = Date
        End If
    Else
        Cells(r, "A") = ""
    End If
End If
SkipError:
Application.EnableEvents = True
End Sub

答案 3 :(得分:0)

来自Determine whether user is adding or deleting rows by breetdj我写了这段代码。尝试将其放入工作表模块中:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Static LR As Long
Dim Table as range
Set Table = Me.ListObjects(1).DataBodyRange
If LR = 0 Then
    LR = Table.Rows.Count
    Exit Sub
End If
If Table.Rows.Count < LR Or Table.Cells(Table.Rows.Count, 1) <> "" Then Exit Sub
Table.Cells(Table.Rows.Count, 1) = Date
LR = LR + 1
End Sub

使用表的名称更改“ListObjects(1)”,并使用所需的列更改列号

答案 4 :(得分:-1)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 'Dim Rg As Range
 'Dim G As Integer
 'Dim varno As Long
  With Sheet1
  Range("J5:J5").AutoFill Destination:=Range("j5:j218")
 
 'Range("L8").Formula = "=IF(AND(F5="",G5="",H5=""),"",I4+F5-G5-H5)"
 

'Range("L8").Formula = ""

End With
End Sub

答案 5 :(得分:-1)

Range(“ L8”)。Formula =“ = IF(AND(F5 =”“,G5 =”“,H5 =”“),”“,I4 + F5-G5-H5)” 我尝试但没有出现

相关问题