我制作了一个简单的程序来将特定公式放入 Excel。问题是结果中出现了单引号。
结果应该是='[Fiber Loss Report - 7210 DCN.xlsx]1310'!G9
,
我得到的结果是='[Fiber Loss Report - 7210 DCN.xlsx]1310'!'G9'
Sub CopyValues()
Dim n As Integer
Dim y As Integer
Dim rng As Range
y = 6
For n = 9 To 175
rngText = "D" & y
Range(rngText).Select
'rng.Select
'Range("D6").Select
formulaText = "='[Fiber Loss Report - 7210 DCN.xlsx]1310'!G" & n
ActiveCell.FormulaR1C1 = formulaText
rngText = "E" & y
Range(rngText).Select
formulaText = "='[Fiber Loss Report - 7210 DCN.xlsx]1310'!G" & n + 1
ActiveCell.FormulaR1C1 = formulaText
n = n + 2
y = y + 1
Next
End Sub
请让我知道如何避免这些单引号的出现。
最佳答案
除了我在您的问题下方的评论...
您需要在代码中找到趋势。这样你就可以避免循环。
例如,您的公式来自 D6
至D61
从 G9
增加至G12
至G15
等等。对于 Col E 也是如此。
所以有一个趋势。您可以问自己的下一个问题是“我可以写什么公式来获得 9、12、15、18 等结果?”。公式是
=(ROW()-3)*3
如果你把这个公式说成
G6
把它拉下来,你会得到那个序列。现在,我们也可以将公式写入整个范围,而不是循环。所以我们简单地将上面的内容与
Indirect
结合起来。 .看到这个最短的代码?
Sub CopyValues()
Dim ws As Worksheet
Dim fName As String
fName = "Fiber Loss Report - 7210 DCN.xlsx"
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
'"='[Fiber Loss Report - 7210 DCN.xlsx]1310'!G9"
.Range("D6:D61").Formula = "=INDIRECT(" & Chr(34) & "'[" & _
fName & "]1310'!G" & Chr(34) & _
" & (ROW()-3)*3)"
.Range("E6:E61").Formula = "=INDIRECT(" & Chr(34) & "'[" & _
fName & "]1310'!G" & Chr(34) & _
" & (ROW()-3)*3+1)"
End With
End Sub
只是为了好玩
我只需两行就可以转换上面的代码。只需更换
Sheet1
带有相关的工作表名称。Sub CopyValues()
ThisWorkbook.Sheets("Sheet1").Range("D6:D61").Formula = "=INDIRECT(" & Chr(34) & "'[Fiber Loss Report - 7210 DCN.xlsx]1310'!G" & Chr(34) & " & (ROW()-3)*3)"
ThisWorkbook.Sheets("Sheet1").Range("E6:E61").Formula = "=INDIRECT(" & Chr(34) & "'[Fiber Loss Report - 7210 DCN.xlsx]1310'!G" & Chr(34) & " & (ROW()-3)*3+1)"
End Sub
关于vba - 通过 VBA 得出的公式结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31260081/