Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖vlookup公式excel_Excel_Vba - Fatal编程技术网

覆盖vlookup公式excel

覆盖vlookup公式excel,excel,vba,Excel,Vba,我有一本两页的工作簿。使用vlookup公式从数据表填充的订单表。工作完成后,将打印并清除订单。但是,用户有时需要更改订单表(受保护)中的单元格值,但保持源中的原始值不变。基本上是手动覆盖单元格。 是否有一种方法或代码允许手动覆盖单元格值,但保留公式以备将来使用?您可以通过使用辅助单元格,在不使用VBA的情况下实现这一点 与其让用户用公式覆盖单元格,他们可以在打印区域旁边的某个辅助单元格中输入所需的临时值 VLOOKUP公式可以封装在IF语句中,该语句显示辅助单元格值(如果存在),否则它使用VL

我有一本两页的工作簿。使用vlookup公式从数据表填充的订单表。工作完成后,将打印并清除订单。但是,用户有时需要更改订单表(受保护)中的单元格值,但保持源中的原始值不变。基本上是手动覆盖单元格。
是否有一种方法或代码允许手动覆盖单元格值,但保留公式以备将来使用?

您可以通过使用辅助单元格,在不使用VBA的情况下实现这一点

与其让用户用公式覆盖单元格,他们可以在打印区域旁边的某个辅助单元格中输入所需的临时值

VLOOKUP
公式可以封装在
IF
语句中,该语句显示辅助单元格值(如果存在),否则它使用
VLOOKUP
公式并显示结果

=IF(COUNTBLANK(H1)=0,H1,VLOOKUP(…)

假设辅助细胞为
H1
,obvs。换衣服

然后,用户可以根据需要更改/删除辅助单元格中的值,而不影响输出单元格中的公式

VBA路线是使用
工作表\u Change
事件,并在目标单元格为空时更新单元格公式

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim CellRng As Range

    Set CellRng = ActiveSheet.Range("A1") 'cell with formula, change to suit

    If Not Intersect(Target, CellRng) Is Nothing Then

        If CellRng.Value = vbNullString Then _
        CellRng.Formula = "=VLOOKUP(…)" 'change formula to suit

    End If

End Sub
这将允许用户使用不同的值覆盖该单元格中的公式,但会在用户删除或清除该单元格的内容时重置公式


如果你能容纳辅助单元格,我认为非VBA路线对用户来说更直观;删除内容后,如果单元格仍为空,可能会让人感到困惑。

谢谢你,Andyward。辅助单元格工作正常。如果用户更改订单中的值,它将覆盖vlookup公式。如果用户此时只是“打印”订单,而没有保存已完成的工作,那么下次打开to book时,源数据和公式应保持不变。但是,如果用户能够保存,则会覆盖公式,但源数据应保持不变。