通过VBA不正确的公式结果
我已经做了一个简单的程序,把一个特定的公式在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
请让我知道如何避免这些单引号的发生。
继我的评论下面你的问题…
你需要find你的代码的趋势。 这样你可以避免循环。
例如,从D6
到D61
公式从G9
增加到G12
,等等。 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
replace为相关的工作表名称即可。
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
Option Explicit Sub CopyValues() Dim i As Long, j As Long j = 6 For i = 9 To 175 Step 3 Range("D" & j).Formula = "='[Fiber Loss Report - 7210 DCN.xlsx]1310'!G" & i Range("E" & j).Formula = "='[Fiber Loss Report - 7210 DCN.xlsx]1310'!G" & i + 1 j = j + 1 Next End Sub
结果:='[光纤损失报告 – 7210 DCN.xlsx] 1310'!G9
您可以删除单个反转的引号并更改为RC格式:
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!R" & n & "C7" ActiveCell.FormulaR1C1 = formulaText rngText = "E" & y Range(rngText).Select formulaText = "=[Fiber Loss Report - 7210 DCN.xlsx]1310!R" & n + 1 & "C7" ActiveCell.FormulaR1C1 = formulaText n = n + 2 y = y + 1 Next End Sub
使用.value
而不是.FormulaR1C1
解决了这个问题。 🙂