【问题标题】:Excel VBA ERROR - Function or Interface marked as restricted. or the function uses an Automation type not supported in Visual BasicExcel VBA 错误 - 函数或接口标记为受限。或函数使用 Visual Basic 不支持的自动化类型
【发布时间】:2013-03-19 17:32:56
【问题描述】:

我正在用 VBA 编写一个小的分数查找程序,下面的代码在标题中给出了错误,我是 VBA 新手,错误指向 Excel 本身生成的第一行。

Private Sub btnSearch_Click()
    Name = txtSearch.Text
    AmountOfEntries = Range("i10")
    For i = 1 To AmountOfEntries
        If Range("a" + i) = Name Then
            cell = i
        Else
            cell = "Error"
        End If
    Next i

    If cell = "Error" Then
        lblScore.Caption = "Your Username is Incorrect. Please Try Again"
    Else
        lblScore.Caption = "Your Score Is : " + Range("b" + cell)
    End If
End Sub

我的电子表格在“A”列中包含一个姓名列表,然后在“B”列中包含一个分数列表。在“I10”中有一个字段包含列表中的条目数量。

【问题讨论】:

  • 错误号和描述是什么?模块顶部有Option Explicit 指令吗?
  • cell 声明在哪里,声明为什么?

标签: excel compiler-errors vba


【解决方案1】:

您应该尽量避免使用“名称”、“单元格”等(VBA 中的通用术语)作为变量名称。尝试定义变量Dim strName as String, i as Integer, intCell as Integer, intAmountOfEntries as Integer

此外,您的范围语句应更改为使用 & 并指定您要使用 VALUE 而不是对象的 RANGE 方面:

Range("a" & i).ValueRange("b" & intCell).Value

编辑 =============

下面是你的cmets:

我认为问题是由于您使用单元格作为整数(行号)和字符串(“错误”)。我会创建一个新变量来检测是否有错误:

Dim blnError as Boolean

然后替换这个:

cell = "Error"blnError = True

您下面的 If 语句需要修改为 If blnError = True Then

您能否确认您有一个名为“Sheet1”的工作表?如果不是,那么这就是Sheets("Sheet1") 代码不起作用的原因。我通常使用 VBA 名称代替工作表 - 在 VBE 中,您可以看到它们在项目资源管理器中的内容(括号前的名称),您可以使用属性窗口更改它们。然后你只需使用sheetname.Range("A1")

【讨论】:

  • 谢谢,我使用了 'Dim' 和 '.Value' 但现在我收到错误 Method 'Range' of object '_Global' failed
  • 另外,如果我在范围之前使用'Sheets("Sheet1")',它会显示错误'应用程序定义或对象定义错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多