【问题标题】:excel VBA for resizing ranges refered with listobject ranges用于调整列表对象范围引用的范围的 excel VBA
【发布时间】:2019-04-06 14:13:36
【问题描述】:

我如何将范围设置为要使用的变量:

Private Sub Worksheet_Change(ByVal Target As Range)

我想引用一个单元格,它是列表对象特定列顶部的 3 个单元格。 这样:

set rOverlap = intersect(SRTbl.ListColumns(firstConceptColumn).DataBodyRange.iTem(1).offset(-3, 0).resize(0,3),target)

其中 firstconceptcolumn=9(或其他)

这行不通。

我这样做是因为如果我决定在表格的开头添加列,则不需要更改代码。 listobject 的第一行不是 row1 而是 row5。 前 5 行在数值变化时触发子程序(输入数据后按回车键)

我也尝试过使用 headerRowRange :

Set rOverlap = Intersect(SRTbl.HeaderRowRange(firstConceptColumn).offsset(-3, 0).Resize(, 4), Target)

这两个都行不通。

实际上,作为一个更基本的问题,我在想什么样的数据是:

SRTbl.HeaderRowRange(firstConceptColumn)

这是一个范围吗? 为什么不能使用以下内容:?

SRTbl.HeaderRowRange("name")

非常感谢

PS:我在stackoverflow 上所说的一切都是调整listobject 本身的大小。 PS2:我也不明白这两个家伙之间是否有区别:

.Resize Range("A1:B10")

 .Resize(1,10) 

何塞·费罗

【问题讨论】:

  • 首先删除您的offsset 错字...

标签: excel vba resize range listobject


【解决方案1】:

这是一种方法:

Option Explicit
Public Sub test()
    Dim SRTbl As ListObject, header As Range, ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet2")
    Set SRTbl = ws.ListObjects(1)
    Set header = SRTbl.ListColumns("Name").Range(1, 1)
    Debug.Print header.Offset(-3).Resize(1, 2).Address

End Sub

这是另一个:

Option Explicit
Public Sub test()
    Dim SRTbl As ListObject, header As Range, ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("Sheet2")   
    Set SRTbl = ws.ListObjects(1)
    Set header = SRTbl.HeaderRowRange.Find("Name")

    If Not header Is Nothing Then
        If header.Row > 3 Then
            header.Offset(-3) = "Tada"
        End If
    End If
End Sub

要引用偏移量为 -3 行的整个标题宽度:

SRTbl.HeaderRowRange.Offset(-3)

简单地调整找到的单元格:

header.Offset(-3).Resize(1,2) 

从找到的单元格调整到表格末尾

Debug.Print header.Resize(1, ws.Range(Split(SRTbl.HeaderRowRange.Address, ":")(1)).Column - header.Column + 1).Address

【讨论】:

  • 非常感谢。我仍在寻找解决方案,我仅引用列表对象的特定单元格,然后使用一种方法对其进行转换,即偏移和/或调整大小。您的解决方案有效,但很难理解,这使得代码在必须由其他人修改和阅读时变得非常危险。问题仍然存在:引用特定单元格:listobject.listcolumns(4).databodyrange.item(i) 如何从该单元格中获取位于范围内的 (a,b) 单元格,以及 (c,d) 单元格大。
  • 我的代码非常简单(直到最后一行——我承认这似乎更复杂)。 header.Offset(-3) 为您提供所需的范围。然后只需使用 .Resize 就可以了。 header.Offset(-3).Resize(1,2) 。您实际上需要我的其他代码行来防止引发潜在错误,这对您的用户来说将是另一个问题。
  • 我添加了一个编辑,我认为这是您所追求的。
  • 正如您所指出的,有很多方法可以实现所需的行为,但我得出的结论是:tbl4.HeaderRowRange(4).Offset(-4, 0).Resize( 0, 4).Interior.Color = vbGreen 它并不意味着工作,也不意味着 tbl4.HeaderRowRange(4).Resize(0, 4).Interior.Color = vbgreen。您的解决方案有效,但它是一个多线解决方案。我正在寻找一个不那么“冗长”的解决方案。一条线。 Tbl4.HeaderRowRange(4) 是单元格的范围。 offset(-4,0) 将其向上移动 4 个单元格,并且 resize(0,5) 应该(应用常识)将一个单元格范围变为 5 个单元格范围。
  • 我假设你想要:Set header = SRTbl.ListColumns("Name").Range(1, 1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 2018-12-05
  • 1970-01-01
相关资源
最近更新 更多