2017-04-27 71 views
2

我已经完成了大量的搜索和试验和错误,但仍然无法为我的问题找到答案。VBA:插入具有动态范围和相对参考的公式

我想用sheet1中的一个动态范围公式来填充sheet2中的一个范围。我已经使用了我粘贴在下面的一段代码,它迄今为止完美。

Dim rng as Range 
Dim x as Integer 

Set rng=worksheets(sheet2).Range("J6:J9") 
x = 21 

    With sheet1 
     LastCol = .Cells(21, .Columns.Count).End(xlToLeft).Column 
    End With 

    For Each c In rng 
     c.Formula = "=sheet1!" & Cells(j, LastCol).Address 
     j = j + 1 
    Next c 

我的问题是,这个代码创建一个绝对的参考,我需要一个相对(或混合),因为我需要能够做一些后来细胞的“拖”。我曾尝试使用formulaR1C1,但我无法使它与动态范围一起工作。

我将非常高兴,如果有人能帮助我,如果你需要我解释什么随意问:)

回答

2

或者你实际上是在寻找这样的:

.Address(RowAbsolute:=False, ColumnAbsolute:=False) 

地址有5个属性 - .Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

只要这些是来自地址5中的前两个参数,您可以像这样调用它们:

.Address(False, False) 

,甚至是这样的:

.Address(0, 0) 

和一些额外的提示,什么白韫六已经提到的 - 在VBA中不使用整数 - Why Use Integer Instead of Long?

+0

非常感谢!我正在使用'.Address(RowAbsolute:= False,ColumnAbsolute:= False)'。我实际上已经尝试过使用'.Address(False,False)'和'.Address(0,0)',但不知道为什么+它没有帮助。感谢提示:)我对VBA相当陌生,所以我很感谢所有的提示和技巧,我可以得到:) – BitteB

+0

@BitteB - 不客气。 :) – Vityata

2

您正在搜索...

.Address(ReferenceStyle:=xlR1C1) 

在看看到微软VBA参考有时可以帮助:Range.Address Property (Excel)

此外,该参考应与工作表名称完全合格,而不是留给上下文相关:

Cells(j, LastCol).Address 
+1

谢谢你这么多:)我去@Vityata,但我真的很感谢你的帮助和“VBA最佳实践”等。我对VBA相当新颖,所以我很欣赏所有的技巧和窍门:) – BitteB