搜索复制的值MACRO

时间:2018-12-13 12:34:55

标签: excel vba excel-vba search error-correction

我有两张纸

  1. 数据库

  2. 宏工作表:它的一行带有日期,该日期将作为宏后面表格的标题。

目标:在宏表中获取第一个日期的值,并在数据库表中查找其位置。然后,在数据库表中,复制与先前复制的日期相对应的整列。

我了解该代码应如下所示:

    Sheets("Macro").Select
    Range("K3").Select
    Selection.Copy
    Sheets("Database").Select
    Cells.Find(What:=Selection.PasteSpecial xlValues, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Macro").Select
    ActiveSheet.Paste

此代码不起作用,因为搜索部分做得不好,我将感谢您进行一些纠正

2 个答案:

答案 0 :(得分:1)

遵循这些原则。

阅读this,了解不使用“选择”或“激活”的优点。

使用onCreateView()时,请始终先检查是否找到了搜索词,以免出现错误。例如,您不能激活不存在的单元格。

Find

答案 1 :(得分:1)

在宏工作表中循环浏览标题日期。如果可以在“数据库”工作表的标题行中找到任何内容,则将该列复制到标题下的“宏”工作表中。

sub getDateData()

    dim h as long, wsdb as worksheet, m as variant, arr as variant

    set wsdb = worksheets("database")

    with worksheets("macro")

        for h=1 to .cells(1, .columns.count).end(xltoleft).column

            m = application.match(.cells(1, h).value2, wsdb.rows(1), 0)

            if not iserror(m) then
                arr = wsdb.range(wsdb.cells(2, m), wsdb.cells(rows.count, m).end(xlup)).value
                .cells(2, h).resize(ubound(arr, 1), ubound(arr, 2)) = arr
            end if

        next h
    end with

end sub