使用VBA转换引用" Application.ConvertFormula"在Excel 2010中,表在结构化引用上使用时返回错误

时间:2016-05-11 17:57:43

标签: excel vba excel-vba

在此之前,我需要澄清一些观点:

  • 我的Excel版本是2010 32位,用巴西葡萄牙文。;
  • 葡萄牙语函数=SOMASE是英语函数=SUMIF;
  • 公式参数分离是使用;完成的,而不是,

我尝试在包含结构化和非结构化引用(例如.ConvertFormula)的表中使用方法=SOMASE($B$4:$B$67;[@Nível]+1;$H$4:$H$67)来转换具有相对非结构化引用的任何单元格绝对的。

我从ExtendOffice Kutools网站获得了有效的VBA代码,并对其进行了修改,因此我可以将任何非结构化引用从相对转换为绝对引用。代码如下:

编辑:少一个问题;使用@jkpieterse sugestion,不会擦除非公式细胞。)

Sub ToAbsolute()
    Dim c As Range
    Dim textoFormula As Variant
    Dim novaFormula As Variant

    ' Para evitar que dê erro na hora de passar o resultado da Sub para o Excel
    Dim originalReferenceStyle
    originalReferenceStyle = Application.ReferenceStyle

    ' Application.ReferenceStyle = xlA1

    For Each c In Selection
        If c.HasFormula = True Then
            textoFormula = c.Formula
            novaFormula = Application.ConvertFormula(textoFormula, _
              fromReferenceStyle:=xlA1, _
              toReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
    '           MsgBox novaFormula
            c.Formula = novaFormula
        End If
    Next c

    ' Application.ReferenceStyle = originalReferenceStyle

End Sub

在找到结构化参考之前,它就像魅力一样;它将excel错误#VALUE!作为包含其公式中任何结构化引用的范围内的每个单元格中的文本。 另外,由于某种原因,它会删除任何不是公式的值。←(编辑:更正,使用@jkpieterse sugestion。)

我试图摆弄变量类型(Variant和String,两者都有),但我只得到:

  • 特别是novaFormula As StringType Mismatch Error行上有ConvertFormula(错误13);
  • 任何其他类型的组合都使用#VALOR!(葡萄牙语为#VALUE!并擦除非公式

即使我可以使用Selection + F4手动将引用从一种类型切换到另一种类型(即使选择了整个单元格文本也不会导致任何错误),但对于1000多行来说这是不切实际的。

任何人都有任何线索如何解决这个问题?我认为类似于Rebecca's解决方案,但我认为它不会那么容易......

提前致谢

0 个答案:

没有答案