宏最初是在 64 位 excel 2016 版本(来自 Office 365(上创建的,但我一直在 32 位 2016 版本(来自 Office 365(中对其进行处理。该宏在我的 32 位计算机上完美运行。但是,我正在为其工作的人正在使用 64 位版本的 Excel 2016,他们说它一直在崩溃,但它不一致,一直在不同的地方崩溃,甚至偶尔正常运行。代码不包含任何声明语句或长整型,所以我不确定为什么会发生这种情况或如何处理它。有关如何解决此问题或问题是什么的任何帮助将不胜感激。谢谢。下面包含已崩溃的代码的副本。
Sub Formulas()
Dim rows As String
rows = CStr(Range("Sheet1!C31").Value)
Range("Sheet2!M2:M" & rows).Formula = "=((F2*1000)-(Sheet1!$C$13*(COS(2*PI()*(Sheet1!$C$15/360)))))*-1"
Range("Sheet2!N2:N" & rows).Formula = "=IF(G2<0,0,((G2+Sheet1!$C$19+Sheet1!$C$21)*Sheet1!$C$17))"
Range("Sheet2!O2:O" & rows).Formula = "=M2+N2"
Range("Sheet2!P2:P" & rows).Formula = "=O2/Sheet1!$C$23"
Range("Sheet2!Q2:Q" & rows).Formula = "=IF(OR(P2>(Sheet1!$C$25),P2<(Sheet1!$C$26)),1,0)"
Range("Sheet2!R2:R" & rows).Formula = "=IF(H2>0,1,0)"
Range("Sheet2!S2:S" & rows).Formula = "=IF(AND(Q2=1),(R2=1)*1,0)"
Range("Sheet2!B17").Formula = "=1-(SUM(S:S)/SUM(R:R))"
Range("Sheet1!C28") = Range("Sheet2!B17")
'Do While Not IsEmpty(ActiveCell.Value)
' Range("Sheet2!M" & CStr(ActiveCell.Row)).EntireRow.Delete
'Loop
End Sub
我对 vba 和宏相当陌生,所以如果有人可以指出代码的哪个方面在 64 位中不兼容,甚至建议如何修复它,我将不胜感激。谢谢。
代码最终很好。我们不得不按照此处"注册表信息"部分下发布的那样进行注册表黑客攻击:https://support.microsoft.com/en-us/help/3085435/august-8-2017-update-for-excel-2016-kb3085435