2013-05-03 91 views
0

我有这个项目,与Excel 32位工作正常,但我有问题在64位运行它。无效的公式不会抛出错误-VBA Excel 2010 64位

我有这个部分,我处理无效的公式(那些无法由Excel评估的东西。)32位用于抛出错误,我可以捕获,但在64位,我似乎有问题,我不知道的。代码有点困难。

Sub Macro1() 
    Dim x As Variant 
    On Error Goto ErrH: 
    ReDim x(1, 1) 
    x(0, 0) = "=1+1" 
    x(0, 1) = "=1+ " ' <--this is a sample of what I refer to as Invalid formula 
    x(1, 0) = "=1+2" 
    x(1, 1) = "=1+1" 


    Range("A1:B2").Value = x ' <--Im stuck in this part. 
           ' the program does not proceed beyond this point 
           ' and does not throw error like it used to. 

    'I do something here 


    On Error Goto 0 
    Exit Sub 

ErrH: 


    ' I have bunch of stuffs that I do here, basically, Error handling. 


End Sub 

我需要为Excel做些什么来在我的代码中指出的行上抛出错误?

回答

0

我已经找到一种方法这个工作为了我。 我只是使用Range.FormulaArray而不是Range.Value,虽然我还不确定这两者之间有什么区别,它似乎工作得很好。

但我仍然不知道为什么excel 64位不会抛出它曾经使用过的错误,也许我下次有空看看它。

0

为了验证该式中,可以使用predifined功能VBA

Right(text,number of character) 
ISNUMBER(text) 

暗淡i设定为整数:I = 0 暗淡J所示整数:J = 0

for i = 0 to 1 
    for j = 0 to 1 
     if ISNUMBER(Right(x(i,j),1)) OR Right(x(i,j),1)=")" Then 
     ' do anything you want if the formula is correct 
     else 
      Goto ErrH: 
     End If 
    next 
next 

我不认为你可以使用这种方法输出X的值,因为X是一个二维数组。

Range("A1:B2").Value = x 

输出正确的方法是用2循环

dim i as integer :i=0 
dim j as integer :j=0 

for i = 0 to 1 
    for j = 0 to 1 
    Cells(i+1).value = x(i,j) 
    next 
next 

错误处理有可能会输出一个消息

ErrH: 
    MsgBox "Invalid Formula" 
    exit sub 
+0

感谢您的快速响应。但我不能用这个理由有两个原因,第一,你的建议只限于我给出的那些公式。我们的代码使用更复杂的Excel公式函数,如AVERAGE,COUNT,IF等,我们也使用命名范围。第二,处理我们所做的事情需要时间,我们通常处理超过65k行和大约500列,循环遍历单元格会花费时间。我保证在我们迁移到64位办公室之前,以我所做的方式显示2D并不会导致问题。我只想知道为什么64位Excel不会像过去那样抛出错误 – user2345501 2013-05-03 05:32:52