Я пытаюсь получить доступ к файлу, не открывая его, и скопировать из него строки на основе их значения "140. На удержании" в столбце G - PullRequest
0 голосов
/ 13 февраля 2020

Приведенный ниже код открывает папки и позволяет мне выбрать, какой документ я хочу использовать в качестве источника, затем открывает его за экраном и работает только при копировании листов, однако я попытался изменить код так, чтобы он подходил для копирования строк на основе столбец G, содержащий «140. На удержании», затем вставка каждой из этих строк в активную рабочую книгу. пожалуйста помоги. ОБНОВЛЕННЫЙ КОД

  Sub GetBIDFileCopyData()

Dim Fname As String
Dim SrcWbk As Workbook
Dim DestWbk As Workbook
Dim C As Range
Dim J As Long

Set DestWbk = ThisWorkbook

Fname = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", Title:="Select a File")
If Fname = "False" Then Exit Sub
Set SrcWbk = Workbooks.Open(Fname)

SrcWbk.Sheets("ChangeDetails").Rows(C.Row).Copy DestWbk.Sheets("Bids On-Hold 29.01.20").Rows(J)
J = 1
For Each C In SrcWbk.Range("G2:G200")
If C.Value = "140. On Hold" Then
J = J + 1
End If
Next C

SrcWbk.Close False

End Sub

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Как прокомментировал @SiddharthRout, лучший способ копирования / вставки, основанный на определенных c критериях, - это использование фильтра. Комментарии приведены в коде ниже. Я не проверял ваш код, чтобы открыть файл.

Dim Fname As String, SrcWbk As Workbook, DestWS As Worksheet, Rng As Range 'Assign your variables

    'Set your destination worksheet
    Set DestWS = ThisWorkbook.Sheets("Bids On-Hold 29.01.20")

    Fname = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", Title:="Select a File")

        If Fname = "False" Then Exit Sub

    Set SrcWbk = Workbooks.Open(Fname)

    'Set the range you want to filter on your scorce worksheet
    Set Rng = SrcWbk.Sheets("ChangeDetails").Range("G2:G200")

    'Since you used only column G for your range, use the copy line below.
    'But if you use the full range of the worksheet, e.g. Range("A1:Z200"),
    'you could use field:=7 in the filter, and remove .EntireRow from the copy line

        With Rng
            'Filter Column G
            .AutoFilter field:=1, Criteria1:="140. On Hold"
            'use Resize and Offset to copy the visible data
            'If Row 2 has data and is not a header row, you should use Row 1, in Rng
            'Offset and Resize adjusts the range so the top row(Header) is not copied
            Rng.Resize(Rng.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Copy
            DestWS.Range("A1").PasteSpecial xlPasteValues

        'Clear the filter    
        .AutoFilter
        End With
0 голосов
/ 13 февраля 2020

Две строки

SrcWbk.Sheets ("ChangeDetails")
DestWbk.Sheets ("Bid Delivery Report")

не компилируются. Что они должны делать?

Вы пытаетесь скопировать строки со следующим кодом:

SrcWbk.Rows(C.Row).Copy DestWbk.Rows(J)

, но у вас отсутствует ссылка на лист.

Итак может быть, вы ищете:

    SrcWbk.Sheets("ChangeDetails").Rows(C.Row).Copy DestWbk.Sheets("Bid Delivery Report").Rows(J)

или лучше используйте varables для ваших листов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...