我有一个表格,它具有的行数是未知的。每次用户将一个项目输入到此表格的列A中时,我都希望表格中的其他列动态获取填入刚刚在列A中输入的项目的公式。EXCEL/VBA - 将公式动态插入单元格
我不想简单地将公式复制到列B,C,D等公式中,因为工作表中的行数未知。
有没有任何有效的方法来做到这一点?
我在VBA的onCalculate和onChange事件中编写代码的尝试看起来非常低效或者导致了永久循环。
我有一个表格,它具有的行数是未知的。每次用户将一个项目输入到此表格的列A中时,我都希望表格中的其他列动态获取填入刚刚在列A中输入的项目的公式。EXCEL/VBA - 将公式动态插入单元格
我不想简单地将公式复制到列B,C,D等公式中,因为工作表中的行数未知。
有没有任何有效的方法来做到这一点?
我在VBA的onCalculate和onChange事件中编写代码的尝试看起来非常低效或者导致了永久循环。
下面是一个示例,将在空白公式填B,C和d时,您的选择更改:
在的ThisWorkbook:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim oSh As Worksheet, oUsed As Range, oRng As Range
Set oSh = Sh
Set oUsed = oSh.UsedRange.Columns("B")
'only add to blank formulas
Set oRng = oUsed.Find("", LookIn:=xlFormulas)
Do While Not oRng Is Nothing
'B formula
oRng.Offset(, 0).FormulaR1C1 = "=RC[-1] + 100"
'C formula
oRng.Offset(, 1).FormulaR1C1 = "=RC[-1] + 100"
'D formula
oRng.Offset(, 2).FormulaR1C1 = "=RC[-1] + 100"
Set oRng = oUsed.Find("", oRng, xlFormulas)
Loop
End Sub
这部作品每工作表在工作簿中,因此您可能需要测试您所在的工作表。
我会尽全力检查在正确的列中发生的变化,以加速Excel。将你的代码封装在If Not Intersect(Target,oUsed)是Nothing Then .... End If – RonnieDickson
@RonnieDickson - 我想要做类似的事情,但Target只指定当你从一个单元格移动到另一个单元格时目标单元格是什么。所以如果我从单元格A1移动到单元格B25,Target的地址是B25,因此它不会出现在相交处......不知道如何只检查A列中的更改。加速它的另一种方法是禁用屏幕更新,但这可能是矫枉过正。 – transistor1
得到它.... 私人小组Worksheet_Change(BYVAL目标作为范围) 如果Target.Column = 3然后 Application.ScreenUpdating =假 应用。计算= xlCalculationManual Sheet2.Cells(Target.Row,5).Formula = “= XXX(” “XXX” “” &Target.Address& “E5)” Application.ScreenUpdating =真 Application.Calculation = xlCalculationAutomat ic End If End Sub – stan
如果您愿意,您可以自己回答。 –