someExcel VBA:无法成功创建范围对象

时间:2016-04-06 07:50:46

标签: vba excel-vba excel

这是我的第一个问题,请耐心等待。我是一名从事大规模防火墙迁移的安全顾问,为此我从厚厚的灰尘层中获得了我的VBA技能。到目前为止,我已经设法通过搜索解决了我的所有问题,但是这个问题:我在完全按照我的方式找到它时会遇到错误。

我想做什么: 我有一个数组,其中包含(其中包括)格式如下的字符串:" A3:P59",表示单元格范围。 现在,这是表格中的范围。当我得到表格中某个单元格的地址时,我想测试它是否在该范围内。

我写了一个测试函数:

   Function TestCellRange() As Boolean  
    Dim tbl As ListObject  
    Dim cell, rng, test As range  
    Dim range As range

    Dim bRow, eRow As Integer

    Set tbl = shRulebase.ListObjects("tblBFFirewallRules")
    shRulebase.Activate
    With shRulebase

    cell = tbl.DataBodyRange(5, 1).Address(False, False) 'it's this command that gives me issues
    Set range = .range(.Cells(bRow, 1), .Cells(eRow, 16)) 

    Debug.Print cell
    'Set rng = shRulebase.range(range)
    Debug.Print rng

    Set test = Application.Intersect(cell, range(range(A3), range(P59)))
    If test Is Nothing Then
        MsgBox ("oops")
        TestCellRange = False

    Else
        MsgBox ("yup yup")
        TestCellRange = True
    End If
    End With

End Function

现在无论我尝试什么,我都会在设定范围内受阻:

  • 设置范围=。范围(" A3:P59") - >将返回"#34; set test"," set test" line(如果我使用intersect(cell,range))
  • 设置范围=范围(" A3:P59") - >将返回对象变量或块变量未设置在同一行
  • 设置范围= .range(。细胞(bRow,1),。细胞(eRow,16)) - >将逐步执行,但debug.print返回类型不匹配和"设置test = Application.Intersect(单元格,范围)"返回一个"所需的对象"

任何帮助都会非常感激...我都熟悉网络ip及其位和字节,但在这里我有点超出了我的舒适区域,我需要明天完成:(

问候, Kraganov

编辑更多尝试:

  • rng和cell作为变体:
    cell = tbl.DataBodyRange(5,1).Address(False,False)
    rng = .range(" A3:P59")。地址(False,False)
    设置test = Application.Intersect(cell,rng)
    ==>我会得到所需的对象

  • 只使用rng作为范围并尝试设置它而不用"设置"
    rng = .range(" A3:P59")

编辑2:我找到了使用范围的方法。

所以我想做的是以下内容: 我有一个表,其中包含有关防火墙规则的信息。但是,并非每条线都描述了规则。还有一些行描述了放置该行下面的规则的上下文。 在表格之外,除了这些行之外,还有一个单元格,其中包含该上下文的单元格范围。如果我拉它们,我想用它来描述这些规则的上下文。 我最终循环遍历表行并识别那些特定行并设置" context"变量的时候,这样的行就满足了。

4 个答案:

答案 0 :(得分:0)

尝试设置单元格以及以下内容:

set cell = tbl.DataBodyRange(5, 1).Address(False, False)

什么是细胞?范围?

答案 1 :(得分:0)

您无需添加'设置'到范围值赋值。

尝试

range = .Range(" A3:P59")

答案 2 :(得分:0)

Function TestCellRange() As Boolean
    Dim tbl As ListObject
    Dim cellToTest As Range
    Dim testResult As Range

    Set tbl = shRulebase.ListObjects("tblBFFirewallRules")
    Set cellToTest = tbl.DataBodyRange.Cells(5, 1)
    'or with one more level of indirection
    'Set cellToTest = shRulebase.range(tbl.DataBodyRange.Cells(5, 1).Value)         
    Set testResult = Application.Intersect(cellToTest, [A3:P59])
    If testResult Is Nothing Then
        MsgBox ("oops")
        TestCellRange = False
    Else
        MsgBox ("yup yup")
        TestCellRange = True
    End If
End Function

答案 3 :(得分:0)

感谢VincentG的职位,我找到了可行的解决方案。感谢那。

Function TestCellRange() As Boolean
Dim tbl As ListObject
Dim cellToTest As range
Dim testResult As range

Set tbl = shRulebase.ListObjects("tblBFFirewallRules")
shRulebase.Activate
Set cellToTest = tbl.DataBodyRange.Cells(5, 1)
'or with one more level of indirection
'Set cellToTest = shRulebase.range(tbl.DataBodyRange.Cells(5, 1).Value)
Set testResult = Application.Intersect(cellToTest, range("A3:P59"))
If testResult Is Nothing Then
    MsgBox ("oops")
    TestCellRange = False
Else
    MsgBox ("yup yup")
    TestCellRange = True
End If
End Function