2

Я создал сценарий, который я хочу позволить пользователю выбрать файл (главный файл), и если условие выполнено, я хочу скопировать данные в книгу Excel (на которой выполняется сценарий). Идея о том, что я пытаюсь сделать. В настоящее время оператор if просто проверяет, содержит ли A2 значение 5. Я хочу, чтобы он проверял каждую строку в столбце, а не только одну ячейку.

Sub copyData()
Dim FolderPath As String, Filepath As String, Filename As String

 FolderPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLS*),  
 *.XLS*", Title:="Select File To Be Opened")
 Dim numTest As Integer

Filename = Dir(FolderPath)

Dim lastrow As Long, lastcolumn As Long

Do While Filename <> ""

Workbooks.Open (FolderPath)
numTest = ActiveSheet.Range("A2").Value
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Copy
Application.DisplayAlerts = False
ActiveWorkbook.Close

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
MsgBox "Testing: " & ActiveSheet.Name & " " & Cells(2, 1).Value & " is >= 5"
If numTest >= 5 Then
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 1),   
Cells(erow, 10))
Else
MsgBox ("test1")
End If
Filename = Dir
Loop

End Sub

Я также выяснил, как выбрать диапазон для копирования:

    Range(Cells(1, 1), Cells(lastrow, lastcolumn)).Copy

Как я могу изменить это так, чтобы копировались только определенные столбцы?

1 ответ1

0

Вам еще предстоит пройти небольшой путь, но это выглядит не так уж плохо :)

Вот несколько советов, которые облегчат вам написание кода:

  1. Сохраняйте каждый лист как переменную, это упрощает просмотр того, с какого листа вы получаете данные:

    Dim wbMaster As Workbook, wbCurrent As Workbook
    
    Set wbCurrent = ActiveWorkbook
    Set wbMaster = Workbooks.Open(FolderPath)
    
  2. Назовите свой рабочий лист в мастере, чтобы было легче обращаться к нему (в VB нажмите F4, чтобы увидеть свойства листа):

    numTest = wbMaster.SHEETCODENAME.Range("RANGENAME").Value
    lastrow = wbMaster.Cells(Rows.Count, 1).End(xlUp).Row 
    lastcolumn = wbMaster.Cells(1, Columns.Count).End(xlToLeft).Column
    
  3. Вам будет легче, если ваши основные данные будут храниться в виде таблицы, перейдите в Google и убедитесь, что ссылки на ячейки и столбцы становятся еще проще.

  4. Выполните вставку и копирование за один раз (лучше никогда не выбирать диапазоны во время выполнения макроса

    wbMaster.SHEETCODENAME.Range("A:A").Copy _
        Destination:=wbCurrent.SHEETCODENAME.PasteSheet.Range("B:B")
    
  5. Проверьте каждую строку в выбранном диапазоне:

    Dim rw As Range
    
    For Each rw In wbMaster.SHEETCODENAME.Range("RANGENAME").Rows
        'Do something
    Next rg
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .