Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 Индекс выходит за пределы допустимого диапазона  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 163
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: Индекс выходит за пределы
допустимого диапазона

Подскажите почему?
24 янв 19, 12:30    [21793188]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
ЦЦа
Member

Откуда:
Сообщений: 11
saxarock,

потому что VBS не знает, что такое xlValues,xlPart,xlByColumns,xlPrevious, и считает их неинициализированными Variant-ами.
24 янв 19, 13:24    [21793289]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 163
ЦЦа
saxarock,

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


Понятно, а как их инициализировать?
24 янв 19, 14:22    [21793375]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1800
saxarock
а как их инициализировать?
Просто. Смотрите их числовые значения и вместо этих констант подставляете эти числа. Или назначаете этим константам эти значения в ходе выполнения. Вроде того:
Dim xlValues
xlValues = -4163
Set colvalue = objSheet.Cells.Find("*",objSheet.Range("A1"),xlValues,xlPart,xlByColumns,xlPrevious,False,False)

с остальными сами по образу и подобию. Узнать числовое значение можно из Excel через F2 и поиск нужной константы или в окне Immediate: Ctrl+G -вставить знак вопроса(?), после него сразу нужную константу и нажать Enter:
?xlPart
24 янв 19, 15:39    [21793530]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 163
The_Prist,

Спасибо, разобрался.
25 янв 19, 07:19    [21793893]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 163
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


ошибка в цикле, подскажите что делаю не так?
25 янв 19, 08:26    [21793907]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18431
saxarock
ошибка в цикле, подскажите что делаю не так?
1) Не указываете, какая именно ошибка, в каком именно операторе, при каких именно значениях переменных
2) Постоянно дёргаете всю модель вместо того, чтобы завести переменные под objWorkbook.Sheets("P") и objWorkbook.Sheets(name1)
25 янв 19, 09:06    [21793917]     Ответить | Цитировать Сообщить модератору
 Re: Индекс выходит за пределы допустимого диапазона  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18431
3) не указываете конкретные свойства (видимо, .Value), полагаясь на дефолтные
25 янв 19, 09:06    [21793918]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить