Excel 2013升级"打破"我的VBA功能

时间:2014-03-25 21:25:40

标签: vba excel-vba excel-2013 excel

附加代码用作目录构建器。根据函数所在的行,它会从后续工作表中提取某些单元格。

Asset        Location   Model 
__________________________________________________________
Freezer      Kitchen    Freezerator 5000 (from worksheet 2)
Television   Den        Panasung 55" (from worksheet 3, etc.)

在“升级”之前,该功能正常运行。现在,如果我编辑销售,它可以工作,但如果我在同一工作表(任何地方,而不仅仅是“特殊”单元格)中复制单元格,单元格会闪烁并闪烁很多秒然后解决。有时它失败并出现溢出错误(如果我没记错的话,今天它没有这样做。)将单元格从一个工作表复制到另一个工作表只是没有这样的延迟。

如果我注释掉Application.Volatile行,延迟会消失,但函数什么也不做。

代码:

'Return values in subsequent worksheets based on row that the function
'is located on.  Usage in this particular instance is a TOC
'Num = number of rows to offset, based on starting position of the TOC
'and skipping any worksheets not to be included in the TOC
'srow and scol is the target cell on the following worksheets

Function GetSpot(num, srow, scol)
    Application.Volatile
    If num > (ThisWorkbook.Worksheets.Count) Then
      GetSpot = " "
    Else
      GetSpot = ThisWorkbook.Worksheets(num).Cells(srow, scol).Value
    End If
    If GetSpot = 0 Then GetSpot = " "
End Function

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您遇到的问题是Office 2013中与工作表中用户定义的函数使用相关的错误。我们向微软报告了这一情况,并且被告知它不会成为修复程序版本的一部分,因为只有3个人报告了它。

如果工作表中有用户定义的函数,并且执行复制/粘贴或插入行等操作,则工作表需要花费很长时间才能完成计算。只要您选择了marching ants(缺少更好的术语)并且用户定义函数的工作表计算,就会发生这种情况。

这不是你的功能,它是Office 2013.这是一个快速复制问题的方法:

  • 创建新的空白工作簿
  • 打开Visual Basic编辑器并添加新的Module
  • 将以下VBA粘贴到模块中

    Function TimesTwo(ver) TimesTwo = ver * 2 End Function

enter image description here

  • 在工作簿上,将公式=INT(RAND()*8)粘贴到单元格A1
  • D1:F100范围内,粘贴公式=TimesTwo($A$1)
  • 在配置上述工作簿之后,在该工作表中执行复制和粘贴。

结果是计算需要很长时间才能完成,这可以在status bar中看到。

除了使用native Excel functions, if available或使用工作簿Calculation设置为Manual之外,没有其他解决方法。也就是说,在手动调用之前禁用工作表的计算。