Ошибка времени выполнения 9, индекс вне диапазона
Привет,
Я нашел старый макрос excel (примерно с 2005 года), но не могу заставить его работать.
Предпосылка кода берет базу данных на листе под названием "top" и еще один лист под названием "bot" и удаляет соответствующие элементы, а остатки объединяет в 3-й лист под названием " new"
Эти базы данных основаны на выходных данных, сгенерированных с рабочей машины, поэтому не имеют традиционного стиля базы данных
Он падает на
temp = sArray(1)
Sub MergeDat() Dim countTop As Long Dim countBot As Long Dim alg As String Dim sArray As Variant Dim temp As String Dim temp2 As String Dim count As Long Dim count2 As Long Dim count3 As Long Dim tempcount As Long Dim this As Boolean countTop = 1 Do While Not Sheets("Top").Cells(countTop, 2).Value = "OCVDatabase" If Sheets("Top").Cells(countTop, 1).Value = "USER" Then alg = Sheets("Top").Cells(countTop, 2).Value 'Search for this algorithm in the bottom side countBot = 1 Do While (Not Sheets("Bottom").Cells(countBot, 2).Value = alg) And (Not Sheets("Bottom").Cells(countBot, 2).Value = "OCVDatabase") countBot = countBot + 1 Loop If Sheets("Bottom").Cells(countBot, 2).Value = alg Then 'Clear the data from the bottom sheet if it already exists in the top one. tempcount = countBot Do While Not Sheets("Bottom").Cells(tempcount, 1).Value = "" tempcount = tempcount + 1 Loop Sheets("Bottom").Select Range("A" + CStr(countBot) + ":W" + CStr(tempcount)).Select Selection.Clear 'Clear the OCV data countBot = 1 Do While Not Sheets("Bottom").Cells(countBot, 2).Value = "OCVDatabase" countBot = countBot + 1 Loop countBot = countBot + 2 Do While Not Sheets("Bottom").Cells(countBot, 2).Value = "Classifiers" sArray = Split(Sheets("Bottom").Cells(countBot, 2).Value, "[") temp = sArray(1) sArray = Split(temp, "]") temp = sArray(0) sArray = Split(temp, "ocv") temp2 = sArray(0) If temp2 = alg Then 'erase this line Sheets("Bottom").Rows(countBot).Select Selection.Clear 'Seek out the data from the above database count = 1 Do While Not Sheets("Bottom").Cells(count, 2).Value = "OCVDatabase" If Sheets("Bottom").Cells(count, 1).Value = "DEVICE" And Sheets("Bottom").Cells(count, 2).Value = temp Then 'erase it Sheets("Bottom").Select Range("A" + CStr(count) + ":W" + CStr(count + 26)).Select Selection.Clear End If count = count + 1 Loop End If countBot = countBot + 1 Loop End If End If countTop = countTop + 1 Loop ' Now, compile the new database in the sheet "New," starting with the top of the top database countTop = countTop - 1 Sheets("Top").Select Range("A1:W" + CStr(countTop)).Select Selection.Copy Sheets("New").Select Range("A1").Select ActiveSheet.Paste 'Delete all unnecessary entries count2 = 1 Do While count2 < countTop If Sheets("New").Cells(count2, 1).Value = "#" Then If Sheets("New").Cells(count2 - 1, 1).Value = "" Then 'delete the section count3 = count2 Do While Not Sheets("New").Cells(count3, 1).Value = "" count3 = count3 + 1 Loop Rows(CStr(count2) + ":" + CStr(count3)).Select Selection.Delete Shift:=xlUp countTop = countTop - (count3 - count2) - 1 End If End If count2 = count2 + 1 Loop countTop = countTop + 1 countBot = 7 this = False Do While this = False 'Find the first lot of writing Do While Sheets("Bottom").Cells(countBot, 2).Value = "" countBot = countBot + 1 Loop 'Make sure it's a useful part Do While Sheets("Bottom").Cells(countBot, 1).Value = "#" Do While Not Sheets("Bottom").Cells(countBot, 2).Value = "" countBot = countBot + 1 Loop Do While Sheets("Bottom").Cells(countBot, 1).Value = "" countBot = countBot + 1 Loop Loop count = countBot 'Find the end of the writing Do While Not Sheets("Bottom").Cells(countBot, 2).Value = "" If Sheets("Bottom").Cells(countBot, 2).Value = "Classifiers" Then this = True End If countBot = countBot + 1 Loop countBot = countBot 'Paste it in Sheets("Bottom").Select Range("A" + CStr(count) + ":W" + CStr(countBot)).Select Selection.Copy Sheets("New").Select Range("A" + CStr(countTop)).Select ActiveSheet.Paste Do While Not Sheets("New").Cells(countTop, 1).Value = "" countTop = countTop + 1 Loop countTop = countTop + 1 Loop countBot = countTop countTop = 1 Do While Not Sheets("Top").Cells(countTop, 2).Value = "OCVDatabase" countTop = countTop + 1 Loop count = countTop + 2 Do While Not Sheets("Top").Cells(countTop, 2).Value = "Classifiers" countTop = countTop + 1 Loop Sheets("Top").Select Range("A" + CStr(count) + ":E" + CStr(countTop)).Select Selection.Copy Sheets("New").Select Range("A" + CStr(countBot - 2)).Select ActiveSheet.Paste Beep End Sub
Что я уже пробовал:
Я пробовал везде искать решение, но у меня практически нет понимания VBA, поэтому я не уверен, что даже если я исправлю эту конкретную ошибку, она может перестать работать на следующей строке!
RedDk
Попробуйте пройти через него в консоли VBA. Предполагая практически ... возможно, отсутствует библиотека объектов, которую вы можете добавить туда через браузер объектов. Но Ошибка времени выполнения 9, вероятно, торчит как отсутствующий входной файл или массив или даже диапазон, который не имеет имени.