0

我正在尝试在 excel 2007 中设计一个宏。这是我需要它做的事情:

当我在特定单元格中输入 ID 并运行宏时,它将在不同工作簿的 A 列中搜索该 ID 并自动筛选。然后我需要它来复制该数据并将其粘贴到第一个工作簿中。我的代码正在运行,但是当它在我的数据下方粘贴大量额外的行时。我怎样才能让它只复制和粘贴数据而不是空行?这是我的代码:

Sub Medications()
    '
    ' Medications Macro
    '
    ' Keyboard Shortcut: Ctrl+m
    '

    Range("B1").Select
    Workbooks.Open Filename:= _
        "I:\Pharmacy\MTMP\2013\Master Lists\CMR Medication List.xlsx"
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Member ID"
    Range("A1").Select
    Selection.AutoFilter
    ActiveSheet.Range(Selection, ActiveCell.SpecialCells(xlLastCell)).AutoFilter Field:=1, Criteria1:=Workbooks("Standardized Format Spreadsheet.xlsm").Worksheets("Demographics").Range("B1").Value
    Cells.Select
    Selection.Copy
    Windows("Standardized Format Spreadsheet.xlsm").Activate
    Sheets("Detailed Medication List").Select
    Range("A1").Select
    ActiveSheet.Paste
    Windows("CMR Medication List.xlsx").Activate
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    Sheets("Demographics").Select
End Sub
4

2 回答 2

0

尽可能避免选择项目总是最好的。您可以使用将工作簿设置为对象并通过该对象访问它。

复制/粘贴时获得额外单元格的原因是因为您选择了每个单元格然后复制。我建议仅使用已使用的范围,这样您就不会拾取任何额外的单元格。

Sub Medications()
    Dim CMR_Wkbk As Workbook
    Dim SFS_Wkbk As Workbook

    Set SFS_Wkbk = Workbooks("Standardized Format Spreadsheet")
    Set CMR_Wkbk = Workbooks.Open("I:\Pharmacy\MTMP\2013\Master Lists\CMR Medication List.xlsx")

    Range("A1").Value = "Member ID"
    ActiveSheet.UsedRange.AutoFilter Field:=1, Criteria1:=SFS_Wkbk.Sheets("Demographics").Range("B1").Value
    ActiveSheet.UsedRange.Copy Destination:=SFS_Wkbk.Sheets("Detailed Medication List").Range("A1")

    Application.DisplayAlerts = False
    CMR_Wkbk.Close
    Application.DisplayAlerts = True

    Sheets("Demographics").Select
End Sub
于 2013-07-28T22:47:10.383 回答
0
Cells.Select
Selection.Copy

Cells.Select正在选择工作表的全部内容。显然,我不知道您的工作表是什么样的,但请尝试仅选择CurrentRegion- 相当于单击单元格并按 Ctrl-A 时突出显示的内容:

ActiveCell.CurrentRegion.Copy
于 2013-07-28T23:04:23.060 回答