【问题标题】:Find value in the last cell based on column header根据列标题在最后一个单元格中查找值
【发布时间】:2015-08-19 01:57:58
【问题描述】:

我正在尝试构建一个宏,该宏可以根据其列标题(“TOTAL”)(工作表名称:FIL)找到并复制最后一个单元格,并将其复制到另一个工作表中的特定单元格(B2)(工作表名称:宏模板)。我找到了它的代码,但它没有复制另一张表中的值。我尝试调整它以使其工作但没有运气(如果命令按钮在同一张表(FIL)上,则代码有效,但如果放在另一张表(MACRO TEMPLATE)中,则代码不起作用。)。

我还有另一个关于代码的问题。合并标题所在的单元格(第 9 行和第 10 行)。是否可以按列搜索而不是查找标题行,以便合并单元格不受影响?任何帮助将不胜感激。

代码如下:

Dim headerRow As Integer
Dim totalColumnsInHeaderRow As Integer
Dim searchColumn As Integer
Dim lastRowInSearchColumn As Integer
Dim columnSearchString As String
With Sheets("FIL")
headerRow = 9   
totalColumnsInHeaderRow = Sheets("FIL").Cells(headerRow, Columns.Count).End(xlToLeft).Column
columnSearchString = "TOTAL" 
searchColumn = 0


Dim currentColumn As Integer
For currentColumn = 1 To totalColumnsInHeaderRow

    If StrComp(Sheets("FIL").Cells(headerRow, currentColumn).value, columnSearchString, vbTextCompare) = 0 Then

        searchColumn = currentColumn
        Exit For
    End If
Next


If searchColumn > 0 Then
    'Set F2 equal to the last value in that column
    lastRowInSearchColumn = Sheets("FIL").Cells(Rows.Count, searchColumn).End(xlUp).Row
    Sheets("MACRO TEMPLATE").Range("B2").value = Cells(lastRowInSearchColumn, searchColumn).value
End If

End With

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    关闭End IfEnd With 之前的最后一行包含Cells(lastRowInSearchColumn, searchColumn).Value。如果这应该来自 FIL 工作表?

    您正在使用With ... End With statement,但没有利用它提供的父工作表参考机会。

    Dim headerRow As Long
    Dim totalColumnsInHeaderRow As Long
    Dim searchColumn As Long
    Dim lastRowInSearchColumn As Long
    Dim currentColumn As Long
    Dim columnSearchString As String
    
    With Sheets("FIL")
        headerRow = 9
        totalColumnsInHeaderRow = .Cells(headerRow, Columns.Count).End(xlToLeft).Column
        columnSearchString = "TOTAL"
    
        searchColumn = 0
        For currentColumn = 1 To totalColumnsInHeaderRow
            If StrComp(.Cells(headerRow, currentColumn).Value, columnSearchString, vbTextCompare) = 0 Then
                searchColumn = currentColumn
                Exit For
            End If
        Next currentColumn
    
        If searchColumn > 0 Then
            'Set F2 equal to the last value in that column
            lastRowInSearchColumn = .Cells(Rows.Count, searchColumn).End(xlUp).Row
            Sheets("MACRO TEMPLATE").Range("B2") = _
                .Cells(lastRowInSearchColumn, searchColumn).Value
        End If
    End With
    

    请注意,任何Range.Cells property 只需要一个句点(也称为句号或.)就可以使其父工作表由带有With ... End With 语句的工作表分配。这不会阻止您在特殊情况下指定另一个工作表,例如在最后一个价值转移目标中,

    【讨论】:

    • 完美!像魅力一样工作。谢谢!我会注意的。
    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多