【问题标题】:Setting a table row as a range将表格行设置为范围
【发布时间】:2019-11-22 09:10:17
【问题描述】:

一旦我通过 for 循环确定了一个感兴趣的单元格,我如何才能从包含所述感兴趣的单元格的整个表格行中创建一个范围? 我只需要我较大代码的一小部分的帮助。

'TransColumn is a table column in which I am looking for the phrase "NPD".
'TransCell is my cell of interest, containing the phrase "NPD".

'I want Trans_Queue_Row to be the table row in which TransCell is located.  

                        For Each TransCell In TransColumn
                        If InStr(1, TransCell.Value, "NPD") > 0 Then

                        Dim Trans_Queue_Row As Range
                        Set Trans_Queue_Row = ThisWorkbook.Sheets("Project Queue").ListObjects("TableQueue").ListRows

'I know this looks like a weird way to achieve what I'm asking for, but I'm using InStr to support some other elements of my code not displayed here.

我想要一个变量(即 - Trans_Queue_Row)来标识包含 TransCell 的整个表格行。

【问题讨论】:

  • 我已经在你之前的问题中回答了这个问题 - stackoverflow.com/questions/56996550/…
  • 我已经进一步开发了我的工作簿所需的功能(自上一个问题以来)。我现在意识到我不能简单地从源表中复制整行并将其全部粘贴到目标表中。相反,我需要识别源行中的特定列位置并将它们映射到目标行中的特定列位置。源行的具体列位置可能与目标行的不同。所以我想首先确定源行(根据这个问题),然后在它们之间映射所需的相应列位置。
  • @TimWilliams 我在您之前的回复中看到您为源表、目标表、源列和目标行提供了变量。我看不到在哪里为源行创建了任何变量。对不起,如果我错过了。我需要创建一个源行变量。

标签: excel vba row listobject


【解决方案1】:
Dim TableQueue as ListObject, Trans_Queue_Row As Range, i as Long
Set TableQueue = ThisWorkbook.Sheets("Project Queue").ListObjects("TableQueue")

With TransColumn.DataBodyRange
    For i = 1 To .Count
        If InStr(1, .Rows(i).Value, "NPD") > 0 Then 
            Set Trans_Queue_Row = TableQueue.DataBodyRange.Rows(i)
        End If
    Next i
End With

【讨论】:

  • 谢谢!既然我已经定义了源行(Trans_Queue_Row),并且我有一个目标行(Trans_NPD_Row),那么如何将各个单元格从源行映射到目标行?我尝试通过以下方式将第 2 列从源映射到目标中的第 1 列……但没有成功。 Trans_Queue_Row.Cells(, 2).Value = Trans_NPD_row.Cells(, 1).ValueTrans_Queue_Row.Range.Columns(2).Value = Trans_NPD_row.Range.Columns(1).ValueIntersect(TransCell.EntireRow, TableQueue.ListColumns(2).Range).Value = Intersect(Trans_NPD_row, TableNPD.ListColumns(1)).Value
  • @DaveF 您是否尝试将一个表的列的值分配给另一个表中的另一列?正如我之前提到的,将其发布在一个新问题中,并添加所有细节,包括一些图片来说明你想要什么。
【解决方案2】:

根据我对您上一个问题的回答:

Trans_new_NPD_row.Range.Value = _
     Application.Intersect(TransCell.EntireRow, QueueTable.DataBodyRange).Value

您可以使用 Intersect 查找 TransCell.EntireRow 的公共范围以及 table/listobject 的数据部分。

【讨论】:

  • 谢谢。我不知道 Intersect 是如何工作的。我查过了。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多