【问题标题】:Copy and paste data between workbooks depending on drop-down choice根据下拉选项在工作簿之间复制和粘贴数据
【发布时间】:2020-01-14 13:56:14
【问题描述】:

简单来说,我编写了一段 VBA 代码,用于在两个工作簿之间复制和粘贴数据。但是,我希望能够复制特定数据而不是整个表。所以工作簿“x”我想通过选择工作簿“y”中的下拉框来过滤列“L” - 字段“P14”。

我将如何做到这一点,以便无论用户选择什么,它都会过滤并将该数据粘贴到工作簿 y 中。

到目前为止我所做的代码如下:

Private Sub CommandButton1_Click()

    Dim x As Workbook
    Dim y As Workbook
    Dim p As String

    Set p = y.Worksheets("Title").Cells(14, "P").Value
    Set x = Workbooks.Open("C:\Users\name\Desktop\Project
    Autonetics\CoreData")
    'x.Worksheets("Xero").Range("L1").AutoFilter Field:=1, Criteria:="p"
    With Xero
        .AutoFilterMode = False
        With .Range("L:L")
            .AutoFilter Field:=1, Criteria:="p"
            .SpecialCells (xlCellTypeVisible)
        End With
    End With
    Set y = ThisWorkbook
    x.Worksheets("Xero").Range("A1:L100000").Copy
    Application.DisplayAlerts = False
    y.Worksheets("Costings").Range("A1").PasteSpecial

    x.Close
End Sub

【问题讨论】:

  • 你看过Range.AutoFilter吗?甚至可能更快的Range.AdvancedFilter =)
  • @JvdV 我确实有,但我不知道如何使用自动过滤功能,但这就是我想使用的方式。我将如何使用自动过滤器进行编程
  • 录制宏可能会有所帮助。这里也有关于如何使用AutoFilter的示例。
  • @BigBen 您好 BigBen,不太清楚如何使用自动过滤功能 - 我可以使用宏,但您是否有链接到 SO 上的自动过滤示例
  • 您应该将来自 WB Y 的值存储在一个变量(字符串或其他)中,并将此变量用作 Range.AutoFilter 中的输入条件

标签: excel vba


【解决方案1】:

这里有一些东西供您使用。就我个人而言,我不是On Error 的粉丝,但在使用SpecialCells 时,在内部检查返回的错误是合法的。

Private Sub CommandButton1_Click()

Dim wb1 As Workbook, wb2 As Workbook
Dim sht1 As Worksheet, sht2 As Worksheet
Dim lc As Long, lr As Long
Dim rng As Range, str As String

'Set your two workbooks
Set wb1 = ThisWorkbook
Set wb2 = Workbooks.Open("C:\Users\name\Desktop\ProjectAutonetics\CoreData")

'Set your two worksheets
Set sht1 = wb1.Worksheets("Title")
Set sht2 = wb2.Worksheets("Xero")

'Get your criteria ready
str = sht1.Range("P14").Value

'Get your range to filter ready
With sht2
    lr = .Cells(.Rows.Count, 12).End(xlUp).Row
    lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Set rng = .Range(.Cells(1, 1), .Cells(lr, lc))
End With

'Apply filter and act if any hits
rng.AutoFilter 12, str
If rng.SpecialCells(12).Cells.Count > rng.Rows(1).Cells.Count Then
    rng.SpecialCells(12).Copy sht1.Cells(1, 1)
End If

'Close your second workbook
wb2.Close False

End Sub

我非常详尽,希望您能清楚地看到这段代码中发生了什么。

祝你好运。

【讨论】:

  • 很高兴听到这个消息。很高兴它有帮助@Daisy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多