Ребята подскажите пожалуйста, что с этим кодом не так??? Как только row_num = 9 выскакивает ошибка, отрицать не стану, что с VBA начал общаться неделю назад. И руководство поставило задачу решить вопрос по раскодировке plt - файла и его оптимизации. Вот часть кода, в котором нужно загрузить файл из txt формата. произвести расчеты и выгрузить в новый txt. на этапе ReDim Preserve DynMas(1 To LBound(DynMas, 1) + 1, 1 To 5) возникает ошибка Run-time error 9: subscript out
[vba]
Код
Sub Massiv() Dim DynMas() As Variant Dim File_Path As String
File_Path = "C:\Users\Admin\Desktop\Maz T044SS (OOO NPP SGT).txt" row_num = 1 ReDim DynMas(1 To row_num, 1 To 5) As Variant Open File_Path For Input As #1
Do Until EOF(1) Line Input #1, Line_FromFile Line_Items = Split(Line_FromFile, ",") If row_num > 7 Then For i = 1 To 5 DynMas(UBound(DynMas, 1), i) = Line_Items(i - 1) Next i ReDim Preserve DynMas(1 To LBound(DynMas, 1) + 1, 1 To 5) End If row_num = row_num + 1 Loop Close #1 Call CulculateDistance(DynMas) End Sub
[/vba]
Ребята подскажите пожалуйста, что с этим кодом не так??? Как только row_num = 9 выскакивает ошибка, отрицать не стану, что с VBA начал общаться неделю назад. И руководство поставило задачу решить вопрос по раскодировке plt - файла и его оптимизации. Вот часть кода, в котором нужно загрузить файл из txt формата. произвести расчеты и выгрузить в новый txt. на этапе ReDim Preserve DynMas(1 To LBound(DynMas, 1) + 1, 1 To 5) возникает ошибка Run-time error 9: subscript out
[vba]
Код
Sub Massiv() Dim DynMas() As Variant Dim File_Path As String
File_Path = "C:\Users\Admin\Desktop\Maz T044SS (OOO NPP SGT).txt" row_num = 1 ReDim DynMas(1 To row_num, 1 To 5) As Variant Open File_Path For Input As #1
Do Until EOF(1) Line Input #1, Line_FromFile Line_Items = Split(Line_FromFile, ",") If row_num > 7 Then For i = 1 To 5 DynMas(UBound(DynMas, 1), i) = Line_Items(i - 1) Next i ReDim Preserve DynMas(1 To LBound(DynMas, 1) + 1, 1 To 5) End If row_num = row_num + 1 Loop Close #1 Call CulculateDistance(DynMas) End Sub
Для этого в Эксе есть справка. F1 трудно нажать? А справка говорит нам: Preserve Optional. Keyword used to preserve the data in an existing array when you change the size of the last dimension. Надеюсь понятно объяснил
Для этого в Эксе есть справка. F1 трудно нажать? А справка говорит нам: Preserve Optional. Keyword used to preserve the data in an existing array when you change the size of the last dimension. Надеюсь понятно объяснил KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Это УП для станка с ЧПУ? Я ничего не путаю? Считать txt файл на пару миллионов строк можно, да и раскодировать там нечего, ибо ничго и не закодировано. Но как такой файл править вручную, я с трудом представляю. Точнее говоря, я хорошо представляю, что там можно править вручную, а что нет. Но могу сказать абсолютно точно, для этого нужен не Excel, а специализированый софт. PS хотя, правда, у меня есть макросы для редактирования подобных файлов. Но все они решают конкретную, ведомую мне, задачу.
Это УП для станка с ЧПУ? Я ничего не путаю? Считать txt файл на пару миллионов строк можно, да и раскодировать там нечего, ибо ничго и не закодировано. Но как такой файл править вручную, я с трудом представляю. Точнее говоря, я хорошо представляю, что там можно править вручную, а что нет. Но могу сказать абсолютно точно, для этого нужен не Excel, а специализированый софт. PS хотя, правда, у меня есть макросы для редактирования подобных файлов. Но все они решают конкретную, ведомую мне, задачу.RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Пятница, 28.04.2017, 20:15
Нет к ЧПУ это никого отношения не имеет, это часть кода, которая отвечает за обработку данных поступающих со спутника. Короче за машинами следят. С одной строки можно считать место расположение расстояние, время работы, простоя и т.д. Вот пример строки [vba]
Код
66.475388, 77.115024, 1, 48.0, 42643.792419
[/vba] первое и второе значение долгота и широта, далее значения заданные по курсу движения объекта, и наконец время работы объекта
Нет к ЧПУ это никого отношения не имеет, это часть кода, которая отвечает за обработку данных поступающих со спутника. Короче за машинами следят. С одной строки можно считать место расположение расстояние, время работы, простоя и т.д. Вот пример строки [vba]
Код
66.475388, 77.115024, 1, 48.0, 42643.792419
[/vba] первое и второе значение долгота и широта, далее значения заданные по курсу движения объекта, и наконец время работы объекта
Sub Massiv() Dim DynMas() As Variant Dim File_Path As String File_Path = "C:\Users\Admin\Desktop\Maz T044SS (OOO NPP SGT).txt" row_num = 1 ReDim DynMas(0) As Variant Open File_Path For Input As #1
Do Until EOF(1) Line Input #1, Line_FromFile Line_Items = Split(Line_FromFile, ",") If row_num > 7 Then If UBound(Line_Items) > 4 Then ReDim RZ(1 To 5) ReDim Preserve DynMas(UBound(DynMas, 1) + 1) For i = 1 To 5 RZ(i) = Line_Items(i - 1) Next i DynMas(UBound(DynMas)) = RZ End If End If row_num = row_num + 1 Loop Close #1 Call CulculateDistance(DynMas) End Sub Function CulculateDistance(ByVal Coord) Dim distance As Variant Dim Lat1 As Double ' Широта А Dim Lat2 As Double ' Широта Б Dim Lng1 As Double ' Долгота А Dim Lng2 As Double ' Долгота Б For i = 1 To UBound(Coord, 1) Lat1 = Coord(i)(1) Lng1 = Coord(i)(2) Lat2 = Coord(i + 1)(1) Lng2 = Coord(i + 1)(2) Const pi = 3.14159265358979 ' определяем константу pi ' переводим градусы в радианы GradToRadLat1 = Lat1 * pi / 180 ' Радианы Широты А GradToRadLng1 = Lng1 * pi / 180 ' Радианы Долготы А GradToRadLat2 = Lat2 * pi / 180 ' Радианы Широты Б GradToRadLng2 = Lng2 * pi / 180 ' Радианы Долготы Б a = 6378137 ' экваториальный радиус земли (метров) f = 1 / 298.257223563 ' сжатие b = a * (1 - f) ' полярный радиус GSinLat = (Sin((GradToRadLat1 - GradToRadLat2) / 2) ^ 2) 'Гаверсинус широты GSinLng = (Sin((GradToRadLng1 - GradToRadLng2) / 2) ^ 2) 'Гаверсинус долготы CosLat = Cos(GradToRadLat1) * Cos(GradToRadLat2) 'Произведение косинусов широт 'вычисление арксинуса угла (Sqr(GSinLat + GSinLng * CosLat) x = Sqr(GSinLat + GSinLng * CosLat) Arcsin = Atn(x / Sqr(-x * x + 1)) 'расчет дистанции dist = (a + b) * Arcsin MsgBox dist Next i
Sub Massiv() Dim DynMas() As Variant Dim File_Path As String File_Path = "C:\Users\Admin\Desktop\Maz T044SS (OOO NPP SGT).txt" row_num = 1 ReDim DynMas(0) As Variant Open File_Path For Input As #1
Do Until EOF(1) Line Input #1, Line_FromFile Line_Items = Split(Line_FromFile, ",") If row_num > 7 Then If UBound(Line_Items) > 4 Then ReDim RZ(1 To 5) ReDim Preserve DynMas(UBound(DynMas, 1) + 1) For i = 1 To 5 RZ(i) = Line_Items(i - 1) Next i DynMas(UBound(DynMas)) = RZ End If End If row_num = row_num + 1 Loop Close #1 Call CulculateDistance(DynMas) End Sub Function CulculateDistance(ByVal Coord) Dim distance As Variant Dim Lat1 As Double ' Широта А Dim Lat2 As Double ' Широта Б Dim Lng1 As Double ' Долгота А Dim Lng2 As Double ' Долгота Б For i = 1 To UBound(Coord, 1) Lat1 = Coord(i)(1) Lng1 = Coord(i)(2) Lat2 = Coord(i + 1)(1) Lng2 = Coord(i + 1)(2) Const pi = 3.14159265358979 ' определяем константу pi ' переводим градусы в радианы GradToRadLat1 = Lat1 * pi / 180 ' Радианы Широты А GradToRadLng1 = Lng1 * pi / 180 ' Радианы Долготы А GradToRadLat2 = Lat2 * pi / 180 ' Радианы Широты Б GradToRadLng2 = Lng2 * pi / 180 ' Радианы Долготы Б a = 6378137 ' экваториальный радиус земли (метров) f = 1 / 298.257223563 ' сжатие b = a * (1 - f) ' полярный радиус GSinLat = (Sin((GradToRadLat1 - GradToRadLat2) / 2) ^ 2) 'Гаверсинус широты GSinLng = (Sin((GradToRadLng1 - GradToRadLng2) / 2) ^ 2) 'Гаверсинус долготы CosLat = Cos(GradToRadLat1) * Cos(GradToRadLat2) 'Произведение косинусов широт 'вычисление арксинуса угла (Sqr(GSinLat + GSinLng * CosLat) x = Sqr(GSinLat + GSinLng * CosLat) Arcsin = Atn(x / Sqr(-x * x + 1)) 'расчет дистанции dist = (a + b) * Arcsin MsgBox dist Next i