通过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你的代码的趋势。 这样你可以避免循环。

例如,从D6D61公式从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 

只是为了好玩

我可以用两行来转换上面的代码。 只需将Sheet1replace为相关的工作表名称即可。

 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解决了这个问题。 🙂