Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将引用与公式串联会产生运行时错误_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 将引用与公式串联会产生运行时错误

Excel 将引用与公式串联会产生运行时错误,excel,vba,excel-formula,Excel,Vba,Excel Formula,我正在尝试使用VBA连接公式中的字符串。如果我只使用下面的代码,我不会得到任何错误,但是当我将IFERROR与代码一起添加时,我会得到一个运行时错误 有没有办法解决这个问题 text1 = "='C:\Users\JOHLA\\Desktop\Yield ark\Nyt-yield-ark\[Yield-Uge-" text2 = ".xlsm]Scrap'!H7" 下面给出了包含给出运行时错误的IFERROR字符串的代码 Private Sub CommandButton1_Click()

我正在尝试使用VBA连接公式中的字符串。如果我只使用下面的代码,我不会得到任何错误,但是当我将IFERROR与代码一起添加时,我会得到一个运行时错误

有没有办法解决这个问题

text1 = "='C:\Users\JOHLA\\Desktop\Yield ark\Nyt-yield-ark\[Yield-Uge-"
text2 = ".xlsm]Scrap'!H7"
下面给出了包含给出运行时错误的IFERROR字符串的代码

Private Sub CommandButton1_Click()

Dim ws As Worksheet
Dim i As Integer
Dim preRange As Range
Dim path, filename1 As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set ws = ActiveWorkbook.Sheets("Sheet1")
Set preRange = ws.Range("E9:I17")
i = ws.Range("C1").Value
text1 = "=IFERROR('C:\Users\JOHLA\Desktop\Yield ark\Nyt-yield-ark\[Yield-Uge-"
text2 = ".xlsm]Scrap'!H7;0)"

With ws
    For i = .Range("C1").Value To .Range("C1").Value + 4
        debug.print text1 & i & text2
        preRange = text1 & i & text2
        Set preRange = preRange.Offset(0, 5)
    Next i
End With

End Sub

从您在公式中使用分号判断,这表明您使用的是与VBA.formula不兼容的本地设置

在这种情况下,您需要将公式更改为使用逗号,或者使用
FormulaLocal
设置公式:

preRange.FormulaLocal = Replace(text1 & i & text2, "'", Chr(34))
如您所见,我还添加了一个
Replace
,它将
更改为
——因为我认为您也需要它

最后,不要忘记在例行程序结束时启用
屏幕更新
显示警报

任何时候使用

Application.ScreenUpdating = False 
Application.DisplayAlerts = False
您需要确保使用错误处理来管理代码是否中断

On Error GoTo ExitErr

   Application.ScreenUpdating = False 
   Application.DisplayAlerts = False
   <your code here>

ExitErr:
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
转到出口时出错

Application.ScreenUpdating=False
Application.DisplayAlerts=False
出口:
Application.ScreenUpdating=True
Application.DisplayAlerts=True

这可以确保如果代码中断(在您的情况下,最明显的是有人重命名了“Sheet1”),Excel没有关闭屏幕更新和显示警报。我无法告诉您我有多少次必须修复其他人的代码,因为他们关闭了这些功能,然后无法找出Excel出现问题的原因。

调试此代码
text1&I&text2
您会看到有许多错误,例如
J0HLA\\桌面
当它应该是
J0HLA\Desktop
时,您的
IFERROR
结尾像
;”
注意,VBA中公式中的引号应该加倍。例如,
“=IF(A1=2,”,“OK”)”
应该是
“=IF(A1=2,”,“OK”)”
我已经更新了代码,但仍然收到运行时错误“1004”。语法应该是正确的。如果我手动写入,则不会发生错误。我可以从调试中复制打印,然后它就可以工作了。您是否尝试过
preRange.Formula1:=text1&I&text2
?我不确定Formula1是否可以工作?对函数的描述非常模糊。FormulaLocal是拼图的最后一块!我正在引用另一个已关闭工作簿中的单元格,这就是为什么“'”位于文件路径的两端。这只是一个代码片段,所以我有了ScreenUpdate和DisplayAlerts的进一步介绍。很高兴你把它整理好了。确保你对ScreenUpdate和DisplayAlerts调用使用了良好的错误处理。如果您不能确保始终重置它们,则代码中的错误将使Excel处于非常糟糕的状态。@FrankBall我是编程新手,但是否可以通过If语句来解决此问题,在该语句中我检查它是否为真?如果真的,则无需使用
。如果您决定在代码中添加错误陷阱,只需将它们设置为
True
。如果它们已经是
真的
,那没有什么害处。您正在
exiter
中将它们设置为
假的
。。?我想你是说
真的