2017-10-20 63 views
0

我有四个工作表,我在单元格F2中编写了一个公式,它触发了所有其他的填充。我已经有触发器的私人小组来调用我的程序工作。有没有办法让这个子更有效率?基于另一个工作表的单元格的触发器填充公式

Option Explicit 

Sub FillDownFormula_test2() 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' Filldown a formula for in column of data. 
' Assumes a data table with headings in the first row, 
' the formula in the second row and is the active cell. 
' this one is tested based on set range 
' Test results were positive 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Dim rng As Range, rng2 As Range 
Dim rngData As Range 
Dim rngFormula As Range, rng2Formula As Range 
Dim rowData As Long 
Dim colData As Long 
Dim wb As Workbook: Set wb = ThisWorkbook 
Dim ws As Worksheet, ws2 As Worksheet 

Set ws = wb.Sheets("Feuil1") 


With ws 

' Set the ranges 
Set rng = wb.Sheets("Feuil1").Range("F2") 
Set rngData = rng.CurrentRegion 

' Set the row and column variables 
rowData = rngData.CurrentRegion.Rows.Count 
colData = rng.Column 

' Set the formula range and fill down the formula 
Set rngFormula = rngData.Offset(1, colData - 1).Resize(rowData - 1, 1) 
rngFormula.FillDown 

'G2 is a different formulas but same on every sheets 
Set rng2 = wb.Sheets("Feuil1").Range("G2") 


' Set the row and column variables 
rowData = rngData.CurrentRegion.Rows.Count 
colData = rng2.Column 

' Set the formula range and fill down the formula 
Set rng2Formula = rngData.Offset(1, colData - 1).Resize(rowData - 1, 1) 
rng2Formula.FillDown 
End With 



With ws2 
Set rng = wb.Sheets("Feuil2").Range("F2") 
Set rngData = rng.CurrentRegion 

' Set the row and column variables 
    rowData = rngData.CurrentRegion.Rows.Count 
    colData = rng.Column 

' Set the formula range and fill down the formula 
Set rngFormula = rngData.Offset(1, colData - 1).Resize(rowData - 1, 1) 
rngFormula.FillDown 

Set rng2 = wb.Sheets("Feuil2").Range("G2") 


' Set the row and column variables 
rowData = rngData.CurrentRegion.Rows.Count 
colData = rng2.Column 

' Set the formula range and fill down the formula 
Set rng2Formula = rngData.Offset(1, colData - 1).Resize(rowData - 1, 1) 
    rng2Formula.FillDown 



End With 
End Sub 

最后一个问题:当时做一个范围的效率最高,因此它允许我在做第二个范围之前输入公式。 (我有六个公式filldown)

谢谢

回答

0

它可能是这个样子......

Option Explicit 

Sub FillDownFormula_test2() 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' Filldown a formula for in column of data. 
' Assumes a data table with headings in the first row, 
' the formula in the second row and is the active cell. 
' this one is tested based on set range 
' Test results were positive 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    Dim wb As Workbook 
    Set wb = ActiveWorkbook 

    Dim ws As Worksheet 
    Dim ws2 As Worksheet 

    Set ws = wb.Sheets("Feuil1") 

    With ws 
     Call FillDownData(.Range("F2"), Range("F2").CurrentRegion) 
     Call FillDownData(.Range("G2"), Range("G2").CurrentRegion) 
    End With 

    Set ws2 = wb.Sheets("Feuil2") 

    With ws2 
     Call FillDownData(.Range("F2"), Range("F2").CurrentRegion) 
     Call FillDownData(.Range("G2"), Range("G2").CurrentRegion) 
    End With 

End Sub 

Function FillDownData(rng As Range, rngData As Range) 

    Dim rowData As Long 
    Dim colData As Long 
    Dim rngFormula As Range 

' Set the row and column variables 
    rowData = rngData.CurrentRegion.Rows.Count 
    colData = rng.column 
Debug.Print rowData & " " & colData 
' Set the formula range and fill down the formula 
    'Set rngFormula = rngData.Offset(1, colData - 1).Resize(rowData - 1, 1) 
    'rngFormula.FillDown 

End Function 
+0

我尝试过,但它看起来像大名单 – Mdh

+0

我不上一个未完成的循环t在这里看到一个循环,我不知道你的意思是什么......另外,尝试使用Debug.Printer来调试它停止的位置 – Maldred

+0

调试将帮助它继续运行?好吧,我要去尝试一下。我不知道它是独立的,但事件触发器永不止步。无论如何,我会尽快回复您 – Mdh

相关问题