繁体   English   中英

Excel宏:如果单击了单元格A,则复制单元格B并粘贴为值,然后将位置返回到单元格A

[英]Excel Macro: If Cell A is clicked, copy Cell B and paste as value, then return position to Cell A

我正在Excel中创建具有单元格B = TODAY()的表单模板,因此,当用户打开模板以填写表单时,将显示今天的日期。

但是,一旦用户填写了表格,我希望单元格B等于TODAY()的值,因此该单元格不会在每次打开工作簿时更新。

我对此的解决方案是创建一个执行以下操作的宏:

当用户单击单元格A时,将需要用户填写文本的单元格B包含公式= TODAY()的单元格被复制并粘贴为相同位置的值。 然后,再次选择单元格A,以便用户可以填写所需的信息。

下面是我的示例VBA,它检查单元格A是否为空而不是未单击。 如果有人可以帮助我,我想改变一下。

在此示例中,单元格A为E11,单元格B为E13。

Sub Date_Change(ByVal Target As Range)
    Dim Rng As Range
    Set Rng = Sheets("Form").Range("E13")
    If Sheets("Form").Range("E11") = Empty Then
        Sheets("Form").Range("E13") = TODAY()
    Else
        Rng.Copy
        Rng.PasteSpecial xlPasteValues
        Set Rng = Nothing
        Application.CutCopyMode = False
        Cells(11, 5).Select 
End Sub

怎么样(这在您要在模块上运行它的工作表中):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cellA As Range, cellB As Range
Set cellA = Sheets("Form").Range("E11")
Set cellB = Sheets("Form").Range("E13")
    If Target.Row = cellA.Row And Target.Column = cellA.Column Then
    Dim Rng As Range
    Set Rng = cellA
    If cellA = Empty Then
        cellB.Value = WorksheetFunction.Text(Month(Now()) & "/" & Day(Now()) & "/" & Year(Now()), "MM/DD/YYYY")
    Else
        Rng.Copy
        Rng.PasteSpecial xlPasteValues
        Set Rng = Nothing
        Application.CutCopyMode = False
        Cells(11, 5).Select
    End If
    End If
End Sub

您可能需要检查我的声明,但这应该可以帮助您。 它将检查是否已选择单元格E11,如果已选择,它将运行。

在工作簿对象中,您有一个内置事件workbook_beforesave ...您可以在此处放置代码。

我记录了一个宏,该宏将B3更新为硬值,从而消除了公式。

然后,我将代码从宏中复制出来,然后单击保存。 如果工作簿中有多个工作表,则可能需要更新“范围”以说明特定的工作表。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Range("B3").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM