0

我有这个项目可以在 Excel 32 位上正常工作,但是在 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 在我在代码中指示的行上抛出错误?

4

2 回答 2

0

要验证公式,可以使用 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 for 循环

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
于 2013-05-03T04:30:07.563 回答
0

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

但是我仍然不知道为什么 excel 64 位不会抛出它曾经的错误。也许我下次有时间会研究它。

于 2013-05-06T02:54:16.317 回答