我有一個表格,它具有的行數是未知的。每次用戶將一個項目輸入到此表格的列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
如果您願意,您可以自己回答。 –