powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Индекс выходит за пределы допустимого диапазона
8 сообщений из 8, страница 1 из 1
Индекс выходит за пределы допустимого диапазона
    #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
Индекс выходит за пределы допустимого диапазона
    #39764256
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
saxarock,

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

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

Понятно, а как их инициализировать?
...
Рейтинг: 0 / 0
Индекс выходит за пределы допустимого диапазона
    #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
Индекс выходит за пределы допустимого диапазона
    #39764717
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,

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


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