这是我的第一个问题,请耐心等待。我是一名从事大规模防火墙迁移的安全顾问,为此我从厚厚的灰尘层中获得了我的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
现在无论我尝试什么,我都会在设定范围内受阻:
任何帮助都会非常感激...我都熟悉网络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"变量的时候,这样的行就满足了。
答案 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