VBA ошибка 9 нижний индекс вне диапазона, если заявление - PullRequest
0 голосов
/ 12 января 2020

Здравствуйте, я новичок в VBA и надеюсь, что вы можете помочь мне с этой ошибкой, так как она кажется довольно распространенной. Основная идея сценария - пройти через диапазон данных и найти точку разделения, в которой изменяются значения в проверяемом столбце. Кто-то еще написал сценарий, и, признаюсь, у меня много проблем с его чтением. Пожалуйста, найдите сценарий до появления ошибки ниже (последняя строка - это то, где отладчик говорит, что это проблема):

Sub SplitWorkbook(splitbasis As String)
'sub below sorts the data in a table
SortPeople (splitbasis)

  Dim c               As Range
  Dim rngHeaderRange  As Range
  Dim lngColNumber    As Long
  Dim strColIndex     As String
  If splitbasis = vbNullString Then

    MsgBox "Please select a split basis first!", vbOKOnly
    Exit Sub
  End If


  lngColNumber = PeopleData.ListObjects("People_data").ListColumns(splitbasis).Range.Column

  strColIndex = Col_Letter(lngColNumber) & "1"


  'path to template for new workbook
  Dim strTemplate As String: strTemplate = ThisWorkbook.Path & "\NewNewFileTemplate.xlsm"

  Dim i                   As Long
  Dim j                   As Long
  Dim l                   As Long

  Dim lngTotalRow         As Long
  Dim lngTotalCol         As Long
  Dim temp                As Boolean
  Dim saveFilename        As String
  Dim rngMasterDataset As Variant
  'initialize splitpoint with 0 - this value will get updated in the loop
  Dim lngSplitPoint       As Long
  lngSplitPoint = 0

  Dim arrDataset()        As Variant
  Dim arrTempDataset()    As Variant

  Dim wbkMaster           As Workbook
  Set wbkMaster = ThisWorkbook

  Dim wksMasterData       As Worksheet
  Set wksMasterData = wbkMaster.Worksheets("People Detail")

  lngTotalRow = wksMasterData.Cells(Rows.Count, 4).End(xlUp).Row

  lngTotalCol = wksMasterData.Cells(11, Columns.Count).End(xlToLeft).Column


  Set rngMasterDataset = wksMasterData.Range(Cells(12, 4), Cells(lngTotalRow, lngTotalCol))


  'store whole dataset in array
  arrDataset = rngMasterDataset.Value2

  Dim lngArrDatasetRows   As Long
  Dim lngArrdatasetCols   As Long


  lngArrDatasetRows = UBound(arrDataset, 1)


  'go through the whole dataset in the array
  For i = 1 To lngArrDatasetRows

  If i = lngArrDatasetRows Then GoTo LastIteration

      'avoiding out of boundary (check because last iteration then does not go through)
  If i <> lngArrDatasetRows Then


          'get the number where the dataset needs to get split
      If arrDataset(i, lngColNumber) <> arrDataset(i + 1, lngColNumber) Then

Я не понимаю, почему это приведет к ошибке выхода за пределы диапазона, так как i (1) , i + 1 (2) и lngColNumber (8 - правильный столбец для «рецензирования»), кажется, находятся в диапазоне?

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