如果我使用Set我得到一个对象所需的错误。如果我不使用set我得到块变量没有设置错误

时间:2016-06-23 16:21:25

标签: vba excel-vba excel

我正在尝试制作一个动态按钮,根据仪表板页面上单元格D15中列出的部门,将用户带到正确的位置以输入数据。我知道As String不需要Set命令,但我不确定我做错了什么?

Sub GPS1()
  Dim Dashboard As Worksheet
    Set Dashboard = ThisWorkbook.Worksheets("Dashboard")
Dim Func1 As String
    'Set does not belong here  Func1 = Dashboard.Range("D15")
Dim OpenJobsCalculations As Worksheet
    Set OpenJobsCalculations = ThisWorkbook.Worksheets("Open Jobs Calculations")


    OpenJobsCalculations.Range("B:B").Find(Func1).Select



End Sub

4 个答案:

答案 0 :(得分:2)

您不需要这些 @MyRest(path = @Path("/XYZ")) public RestServiceResponse getXYZ(String jsonRequest) 对象引用。选择"仪表板" Project Explorer (Ctrl + R)中的工作表,然后点击 F4 以显示其属性,并设置其Worksheet属性有意义的事情,比如(name)

这个"代码名称"然后可以在代码中的任何地方使用它来引用代表该工作表的(free!)全局范围的对象变量,如下所示:

DashboardSheet

同样的"开放职位计算" sheet - 将其MsgBox DashboardSheet.Range("A1").Value 属性设置为(name),然后您可以执行此操作:

OpenJobsCalcSheet

请注意Dim result As Range Set result = OpenJobsCalcSheet.Range("B:B").Find("SomeStringValue") If result Is Not Nothing Then result.Select 调用的结果如何Find - 在Nothing上调用.Select会抛出运行时错误91"对象引用或使用块变量未设置",因此您需要首先检查返回的Nothing对象是否为Range

现在,Nothing是您已注释掉的字符串变量,因此完整代码为:

"SomeStringValue"

答案 1 :(得分:2)

我喜欢将匹配功能用于单列搜索。根据{{​​3}}页面,对于单列查找,它比Find()稍快一些:

Sub GPS1()
    Dim Dashboard As Worksheet
    Set Dashboard = ThisWorkbook.Worksheets("Dashboard")

    Dim Func1 As String
    Func1 = Dashboard.Range("D15").Value

    Dim OpenJobsCalculations As Worksheet
    Set OpenJobsCalculations = ThisWorkbook.Worksheets("Open Jobs Calculations")

    Dim mtch
    'find match
    mtch = Application.Match(Func1, OpenJobsCalculations.Range("B:B"),0)
    'If no match was found mtch will be an error.
    'we now test whether it is an error or not.
    If IsError(mtch) Then
        MsgBox "No Match Found"
    Else
        OpenJobsCalculations.Range("B" & mtch).Select
    End If
End Sub

答案 2 :(得分:2)

您无法在非活动工作表上选择单元格。使用:

Set OpenJobsCalculations = ThisWorkbook.Worksheets("Open Jobs Calculations")
OpenJobsCalculations.Select

答案 3 :(得分:0)

Dashboard.Range("D15")是一个范围,但我认为你需要该单元格中的值...你需要使用.Value对象的Range属性指定它。

Func1 = Dashboard.Range("D15").Value

希望这有帮助!