2017-09-05 82 views
0

我有一个VBA,即时通讯使用单独的工作表上的按钮运行。但是,出于某种原因,当我单击按钮时VBA不起作用,当我使用VBA应用程序运行VBA时,VBA运行时没有任何问题。 VBA Im运行看起来像这样。按钮没有运行所有的VBA

Sub Fillit() 

Worksheets("Sheet3").Range("B3").FormulaLocal = "=INDEKS(Sheet1!$N:$N;SAMMENLIGN(Sheet3!$A:$A&Sheet3!B$1;Sheet1!$R:$R;0))" 

LastCol = Worksheets("Sheet3").Cells(1, Columns.Count).End(xlToLeft).Column 
lastRow = Worksheets("Sheet3").Cells(Rows.Count, "A").End(xlUp).Row 
Worksheets("Sheet3").Range("B3").AutoFill Destination:=Worksheets("Sheet3").Range("B3:B" & lastRow), Type:=xlFillDefault 'fill C column 
Worksheets("Sheet3").Range("B3:B" & lastRow).AutoFill Destination:=Worksheets("Sheet3").Range(Cells(3, "B"), Cells(lastRow, LastCol)), Type:=xlFillDefault 'fill all rows 

End Sub 

当我使用它仅运行VBA的第一行中的键,

编辑:我已经更新了VBA其中i定义表。现在调试器告诉我最后一行运行时存在错误1004

+0

夫妇的事情检查......列A中的单元格是连续的,以及行1;另外,请确保使用宏引用表单。你有没有看过去除自动填充,只是复制/粘贴范围B3:B&lastRow,而不是使用自动填充? – Cyril

+0

尝试更改子名称并将其分配给宏。 – HA560

回答

0

这个问题可能是由于没有限定范围引用。

我同意@Cyril,没有理由使用自动填充。只需定义您的范围,然后将公式分配给它。
注意:定义一个目标范围是没有必要的,但它使调试更容易。

With Worksheets("Sheet3") 
    Set Target = .Range(.Cells(1, Columns.Count).End(xlToLeft), Cells(Rows.Count, "A").End(xlUp)) 
    Target.FormulaLocal = "=INDEKS(Sheet1!$N:$N;MATCH(Sheet3!$A:$A&Sheet3!B$1;Sheet1!$R:$R;0))" 
End With 

该OP的公式是使用分号分隔下面的值是美国版的公式。

'Target.FormulaLocal = "=INDEKS(Sheet1!$N:$N,MATCH(Sheet3!$A:$A&Sheet3!B$1,Sheet1!$R:$R,0))" 
+0

你好托马斯。我在哪里定义forumla应该从B3开始? –

+0

B3是左上角或使其成为起点的范围。 – 2017-09-05 20:40:37

+0

公式的范围将根据标准范围相关性规则进行调整。 – 2017-09-05 20:44:55