Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Индекс выходит за пределы допустимого диапазона / 8 сообщений из 8, страница 1 из 1
24.01.2019, 12:30
    #39764189
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
src_file = "C:\Users\operator\Desktop\transpon\src\16.xls"
dest_file = "C:\Users\operator\Desktop\transpon\src\load.csv"

Set objApp = CreateObject("Excel.Application")
Set objWbs = objApp.WorkBooks
objApp.Visible = False
Set objWorkbook = objWbs.Open(src_file)
Set objSheet = objWorkbook.Sheets(1)
    
   Set colvalue = objSheet.Cells.Find("*",objSheet.Range("A1"),xlValues,xlPart,xlByColumns,xlPrevious,False,False)
   c = colvalue.Column
   MsgBox (c)



Валится с ошибкой
Ошибка выполнения Microsoft VBScript: Индекс выходит за пределы
допустимого диапазона

Подскажите почему?
...
Рейтинг: 0 / 0
24.01.2019, 13:24
    #39764256
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
saxarock,

потому что VBS не знает, что такое xlValues,xlPart,xlByColumns,xlPrevious, и считает их неинициализированными Variant-ами.
...
Рейтинг: 0 / 0
24.01.2019, 14:22
    #39764324
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
ЦЦаsaxarock,

потому что VBS не знает, что такое xlValues,xlPart,xlByColumns,xlPrevious, и считает их неинициализированными Variant-ами.

Понятно, а как их инициализировать?
...
Рейтинг: 0 / 0
24.01.2019, 15:39
    #39764447
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
saxarockа как их инициализировать?Просто. Смотрите их числовые значения и вместо этих констант подставляете эти числа. Или назначаете этим константам эти значения в ходе выполнения. Вроде того:
Код: vbnet
1.
2.
3.
Dim xlValues
xlValues = -4163
Set colvalue = objSheet.Cells.Find("*",objSheet.Range("A1"),xlValues,xlPart,xlByColumns,xlPrevious,False,False)


с остальными сами по образу и подобию. Узнать числовое значение можно из Excel через F2 и поиск нужной константы или в окне Immediate: Ctrl+G -вставить знак вопроса(?), после него сразу нужную константу и нажать Enter:
Код: plaintext
?xlPart
...
Рейтинг: 0 / 0
25.01.2019, 07:19
    #39764717
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
The_Prist,

Спасибо, разобрался.
...
Рейтинг: 0 / 0
25.01.2019, 08:26
    #39764726
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Set FSO = CreateObject("Scripting.FileSystemObject")
src_file = "~\1.xls"
dest_file = "~\l.csv"

Set objApp = CreateObject("Excel.Application")
Set objWbs = objApp.Workbooks
objApp.Visible = True
Set objWorkbook = objWbs.Open(src_file)
Set objSheet = objWorkbook.Sheets(1)
name1 = objSheet.Name

Dim xlValues, xlPart, xlByColumns, xlPrevious, xlByRows
xlValues = -4163
xlPart = 2
xlByColumns = 2
xlPrevious = 2
xlByRows = 1

   Set colvalue = objSheet.Cells.Find("*", objSheet.Range("A1"), xlValues, xlPart, xlByColumns, xlPrevious, False, False)
   c = colvalue.Column
   
   Set rowvalue = objSheet.Cells.Find("*", objSheet.Range("A1"), xlValues, xlPart, xlByRows, xlPrevious, False, False)
   r = rowvalue.Row
   
   objSheet.Range(objSheet.Cells(1, 1), objSheet.Cells(r, c)).Select

   objWorkbook.Sheets.Add , objWorkbook.Sheets(objWorkbook.Sheets.Count)
   objWorkbook.Sheets(objWorkbook.Sheets.Count).Name = "P"
    
     For n = 0 To (r - 2)
         For i  = 1 To c
             objWorkbook.Sheets("P").Cells(i + n * c, 2) = objWorkbook.Sheets(name1).Cells(1, i)
             objWorkbook.Sheets("P").Cells(i + n * c, 1) = n + 1
         Next 
         For i = 1 To c
            objWorkbook.Sheets("P").Cells(i + n * c, 3) = objWorkbook.Sheets(name1).Cells(n + 2, i)
         Next
    Next 

    
 
objWorkbook.Sheets("Pr").Select
objWorkbook.SaveAs dest_file, 6 ',,,false,true,,,,,, -4143
objWorkbook.Close False
objApp.Quit



ошибка в цикле, подскажите что делаю не так?
...
Рейтинг: 0 / 0
25.01.2019, 09:06
    #39764731
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
saxarockошибка в цикле, подскажите что делаю не так?1) Не указываете, какая именно ошибка, в каком именно операторе, при каких именно значениях переменных
2) Постоянно дёргаете всю модель вместо того, чтобы завести переменные под objWorkbook.Sheets("P") и objWorkbook.Sheets(name1)
...
Рейтинг: 0 / 0
25.01.2019, 09:06
    #39764732
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс выходит за пределы допустимого диапазона
3) не указываете конкретные свойства (видимо, .Value), полагаясь на дефолтные
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Индекс выходит за пределы допустимого диапазона / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]