如何使用NOW时间更新Excel VBA中的单元格以进行另一个单元格更新,而另一个单元格更新又通过其他单元格更改进行更新?

时间:2016-02-01 12:27:50

标签: excel vba

我需要使用Now()更新Cell E2,以便更改单元格D2中的任何值。

注意D2值取决于许多其他单元格,例如A2, B2 and C2

我尝试了Worksheet_Change,但这会触发手动更新,我需要更新E2的单元格也会自动更新(即不通过手动更新)。

任何解决方案,其中单元格A2B2C2获取实时Feed,而D2具有基于它们的公式,是可以接受的。

现在,如果D2发生变化,我需要E2 Now()日期和时间。

2 个答案:

答案 0 :(得分:1)

您可以将 Calculate 事件与内存变量一起使用:

DECLARE @tt_text TABLE(id INT IDENTITY(1,1),templatebody VARCHAR(MAX));
INSERT INTO @tt_text(templatebody)VALUES
    ('This is to inform #first_name# about the issues regarding #location#');

DECLARE @tt_repl TABLE(id INT IDENTITY(1,1),variable VARCHAR(256),template_value VARCHAR(8000));
INSERT INTO @tt_repl(variable,template_value)VALUES
    ('#first_name#','Joseph William'),
    ('#location#','Alaska');

;WITH cte AS (
    SELECT
        t.id,
        l=1,
        templatebody=REPLACE(t.templatebody,r.variable,r.template_value)
    FROM
        @tt_text AS t
        INNER JOIN @tt_repl AS r ON r.id=1
    UNION ALL
    SELECT
        t.id,
        l=l+1,
        templatebody=REPLACE(t.templatebody,r.variable,r.template_value)
    FROM
        cte AS t
        INNER JOIN @tt_repl AS r ON r.id=t.l+1
)
UPDATE
    @tt_text
SET
    templatebody=cte.templatebody
FROM
    @tt_text AS t
    INNER JOIN cte ON 
        cte.id=t.id
WHERE
    cte.l=(SELECT MAX(id) FROM @tt_repl);

/* -- if instead you wanted to select the replaced strings, comment out 
   -- the above UPDATE statement, and uncomment this SELECT statement:
SELECT 
    templatebody 
FROM 
    cte 
WHERE 
    l=(SELECT MAX(id) FROM @tt_repl);*/

SELECT*FROM @tt_text;

答案 1 :(得分:0)

我通过使用Range对象的Precedent属性来解决问题。

我检查了更改的单元格是否是我的先例的一部分,如果是,那么使用目标行(已更改的单元格),我移动到我所需的列(这是静态的)完成了我的逻辑。

谢谢, 萨拉

Private Sub Worksheet_Change(ByVal Target As Range) Dim keycells As Range  设置keycells = Sheets(“FUT_CALLS-1”)。范围(“AD1:AD1”)。EntireColumn

如果不相交(Target,keycells.Precedents)则没有任何结果

If (Sheets("FUT_CALLS-1").Cells(Target.Row, 30).Value = "BUY" Or Sheets("FUT_CALLS-1").Cells(Target.Row, 30).Value = "SELL") And Sheets("FUT_CALLS-1").Cells(Target.Row, 30).Value <> Sheets("MyCodeSheet").Cells(Target.Row, 1).Value Then
   Sheets("FUT_CALLS-1").Cells(Target.Row, 32).Value = Now()
   Sheets("MyCodeSheet").Cells(Target.Row, 1).Value = Sheets("FUT_CALLS-1").Cells(Target.Row, 30).Value

End If

结束如果 结束子