Как я могу изменить этот диапазон на что-то более динамичное? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть диапазон, который я определяю перед выполнением макроса массива, но я должен изменить способ, которым я его определяю.Раньше это было фиксированное количество столбцов, но теперь оно транспонировано и имеет фиксированное количество строк.

Как я могу изменить это, чтобы выразить 62 rows и столбцы B to columns.count?

With ThisWorkbook.Sheets("Profiles")
Data = .Range("bj1", .Range("B" & Rows.Count).End(xlUp))
End With

Или даже сделать еще один шаг вперед, как я могу просто сделать columns & rows.count?

Весь скрипт:

Option Explicit

Sub Main()
  Dim wb As Workbook
  Dim Data, Last, JobFamily
  Dim i As Long, j As Long, k As Long, a As Long
  Dim Dest As Range

  'Refer to the template
  Set wb = Workbooks("Book2.xlsx")
  'Refer to the destination cell
  Set Dest = wb.Sheets("Sheet11").Range("B1")
  'Read in all data
  With ThisWorkbook.Sheets("Profiles")
    Data = .Range("B1", .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, .Columns.Count).End(xlToLeft))
End With
  wb.Activate
  Application.ScreenUpdating = False

  'Process the data
  For i = 1 To UBound(Data)
    'Manager changes?
    If Data(1, i) <> Last Then
      'Skip the first
      If i > 1 Then
        'Scroll into the view
        Dest.Select
        'Save a copy
        wb.SaveCopyAs ThisWorkbook.Path & Application.PathSeparator & _
          ValidFileName(Last & ".xlsx")
      End If
      'Clear the employees
      Dest.Resize(, Columns.Count - Dest.Column).EntireColumn.ClearContents
      'Remember this manager
      Last = Data(1, i)
      'Start the next round
      j = 0
    End If
    'Write the employee data into the template
    a = 0
    For k = 1 To UBound(Data, 2)
      Dest.Offset(a, j) = Data(k, i)
      a = a + 1
    Next
    'Next column
    j = j + 1
  Next
End Sub

с ошибкой subscript out of range в этой строке:

Dest.Offset(a, j) = Data(k, i)

1 Ответ

0 голосов
/ 26 декабря 2018

на основе дальнейших разъяснений в комментариях:

With ThisWorkbook.Sheets("Profiles")
    Data = .Range("B1", .Cells(62, .Columns.Count).End(xlToLeft))
End With

, в то время как если вы хотите, чтобы последний столбец B оставался динамическим (и всегда перехватывал последний столбец вдоль этого последнего):

With ThisWorkbook.Sheets("Profiles")
    Data = .Range("B1", .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, .Columns.Count).End(xlToLeft))
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...