过滤器和可见单元格

问题描述 投票:0回答:1

下面是我制作的VBA宏。它将在名称列上进行过滤,并从另一个工作表中查找空单元格。

应该找到电话号码的名称并将其粘贴在此处。

我只希望用于空单元格,但是此代码适用于每一行。

如何仅查找可见单元格的值?

Sub namenumbers()

    On Error Resume Next
    rw = ActiveWorkbook.Name
    MP = InputBox("Please enter Marketplace", "AU/AE/BR/CA/CN/DE/ES/FR/IT/UK/US/IN/JP/MX/SG/TR")
    Dim wb As Worksheet, rng As Range
    lrr = ActiveSheet.UsedRange.Rows.Count
    Set r = Range("A1").CurrentRegion
    r.AutoFilter
    BN = r.Find(what:="Numbers", after:=r(1)).Column
    Kolumn = r.Find(what:="names", after:=r(1)).Column
    r.AutoFilter Field:=Kolumn, Criteria1:="="

    Workbooks.Open "C:\Macros\names with numbers.xlsx"
    nw = ActiveWorkbook.Name
    Workbooks(nw).Activate
    Workbooks(nw).Sheets(MP).Activate
    Workbooks(rw).Activate
    For I = 3 To lrr
        Cells(I, Kolumn) = Application.WorksheetFunction.VLookup(Cells(I, BN), Workbooks(nw).Sheets(MP).Range("B2:D1000000"), 3, 0)
    Next

End Sub
excel vba
1个回答
0
投票

您可以尝试这样的事情:

Sub namenumbers()
    Dim wb As Workbook, MP, lrr As Long, wsData As Workbook, i As Long
    Dim ws As Worksheet, rng As Range, r As Range, BN As Long, Kolumn As Long

    On Error Resume Next

    Set wb = ActiveWorkbook
    Set ws = ActiveSheet

    MP = InputBox("Please enter Marketplace", _
                  "AU/AE/BR/CA/CN/DE/ES/FR/IT/UK/US/IN/JP/MX/SG/TR")

    Set r = ws.Range("A1").CurrentRegion
    lrr = r.Rows.Count

    BN = r.Rows(1).Find(what:="Numbers", lookat:=xlWhole).Column
    Kolumn = r.Rows(1).Find(what:="names", lookat:=xlWhole).Column

    Set wsData = Workbooks.Open("C:\Macros\names with numbers.xlsx").Worksheets(MP)

    For i = 3 To lrr
        With ws.Cells(i, Kolumn)
            If Len(.Value) = 0 Then
                .Value = Application.VLookup(ws.Cells(i, BN).Value, _
                                             wsData.Range("B2:D1000000"), 3, False)
            End If
        End With
    Next

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.