使用find函数并将结果单元格作为excel VBA中的选择

时间:2015-08-01 11:50:27

标签: excel vba excel-vba

希望你身体健康。

我有一个数据记录文件来记录PO和付款。我正在使用具有许多不同公式的excel文件来最大化操作的自动化。但它越来越重,不可能再用它了。

所以我生成了删除所有公式并将其放在第一行的想法。现在我希望excel在每次运行命令时从第一行复制那些公式,并在必需的行上过去更新记录,并立即转换为值。这将使所有数据保持自动化并缩短处理时间。

我在这里使用的脚本正在运行,但有一点我必须使用find功能。它应该在所选表格的B列中找到所需的值,并选择作为结果找到的单元格。选择后,它将偏移到所需的列以继续进一步的步骤。

Sub find()
Sample Sheets("PO").Range("a1"), Sheets("PO").Range("b:b")
End Sub

完整的脚本是

Sub Macro4()
'
' Update the PO/WO detail with the effect of new payment entry and alsoupdate the corresponding in payment entry
'
' Keyboard Shortcut: Ctrl+j
'
    ActiveCell.Offset(0, -16).Range("A1").Select
    ActiveCell.FormulaR1C1 = "*"
    ActiveCell.Offset(0, 7).Range("A1").Select
    Selection.Copy
    ActiveSheet.Previous.Select
    Range("A1").Select
    ActiveSheet.Paste
    End Sub
    Sub find()
    Sample Sheets("PO").Range("a1"), Sheets("PO").Range("b:b")
    End Sub

    Sub Sample(FirstRange As Range, ListRange As Range)
        Dim aCell As Range, bCell As Range, oRange As Range

        Set oRange = ListRange.find(what:=FirstRange.Value, LookIn:=xlValues, _
        lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)


        ActiveCell.Offset(0, 7).Range("A1").Select
        ActiveCell.Offset(0, 10).Range("A1").Select
        ActiveCell.FormulaR1C1 = "*"
        Selection.End(xlUp).Select
        Selection.End(xlToLeft).Select
        ActiveCell.Offset(0, -1).Range("A1:B1").Select
        ActiveCell.Activate
        Selection.Copy
        ActiveCell.Offset(0, 10).Range("A1").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(0, -10).Range("A1").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        ActiveCell.Offset(0, 10).Range("A1").Select
        Application.CutCopyMode = False
        Selection.ClearContents
        ActiveCell.Offset(0, -10).Range("A1").Select
        ActiveSheet.Next.Select
        Range("A1").Select
        ActiveCell.Offset(0, 16).Range("A1:B1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("A1").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(0, 16).Range("A1").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        ActiveCell.Offset(0, -16).Range("A1").Select
        Application.CutCopyMode = False
        Selection.ClearContents
        ActiveCell.Offset(0, 17).Range("A1").Select
    End Sub

请建议任何决议,

提前致谢

此致

1 个答案:

答案 0 :(得分:0)

嗯,如果我理解你的问题,你只需要一个选择陈述。

    Set oRange = ListRange.find(what:=FirstRange.Value, LookIn:=xlValues, _
    lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    oRange.Select

虽然您不会在代码中的任何其他地方使用oRange变量,但您可能只是摆脱它。你写这段代码了吗?你懂这个了吗?这绝不是一个干净,优化,良好,可读或快速的代码...但如果它适合你,那就不用了。