Проблема с кодом для циклического прохождения именованных листов и копирования значений из каждого листа в отдельную строку в массиве и вставки полного массива в основную рабочую книгу - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь написать код, который будет циклически проходить через серию именованных рабочих листов, в каждом рабочем листе отдельные непрерывные ячейки должны быть скопированы в один двумерный массив, где каждый рабочий лист находится в отдельной строке.Затем я хотел бы вставить массив в другую рабочую книгу.

У меня есть некоторые данные, которые разбросаны по нескольким рабочим листам.Данные находятся в одинаковых ячейках на каждом листе.Я хотел бы скопировать данные в другую рабочую книгу с данными из каждого рабочего листа в разных строках.

Мой код показан ниже:

Sub CommandButton1_Click()
    Dim fd As Office.FileDialog                                 
    Dim bb As Workbook                                        
    Dim cs As Worksheet     
    Dim bb As Workbook                                         
    Dim cs As Worksheet
    Dim nextrow As Long
    Dim compiledvalues(11, 7) As Variant
    Dim openbook As Variant
    Dim sheetname As Variant
    Dim i As Long

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        .Filters.Clear
        .Title = "Select Buildbook"
        .Filters.Add "Excel Files", "*.xlsm", 1 'only show macro-enabled excel docs
        .AllowMultiSelect = False   'don't allow multiple files to be selected
        .InitialFileName = "\C:Users\hsa\shared\"
        .Show   'show dialog box
        bbpath = .SelectedItems(1)

    End With

    Application.DisplayAlerts = False

     Set bb = Workbooks.Open(bbpath, True, True)
    openbook = Array ("Jan", "Feb", March, "April", "May","June","July", "August", "September", "October", "December")

    i=0

    For Each sheetname In openbook
            compiledvalues(i, 0) = ActiveSheet.Range("B26")
            compiledvalues(i, 1) = ActiveSheet.Range("C16")
            compiledvalues(i, 2) = ActiveSheet.Range("C15")
            compiledvalues(i, 3) = ActiveSheet.Range("D15")
            compiledvalues(i, 4) = ActiveSheet.Range("E36")
            compiledvalues(i, 5) = ActiveSheet.Range("F37")
            compiledvalues(i, 6) = ActiveSheet.Range("G16")
            compiledvalues(i, 7) = ActiveSheet.Range("G15")
            i = i + 1
    Next sheetname

    ThisWorkbook.Activate
    nextrow = ThisWorkbook.Sheets("Compiled Data").Range("C3:C").Find(What:="*", After:=Range("A1"), SearchORder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    Worksheets("Compiled Data").Activate
    ActiveSheet.Range(Cells(nextrow, 3), Cells(nextrow + 11, 10)) = compiledvalues

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