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