powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите понять ошибку в коде (excel vba)
9 сообщений из 9, страница 1 из 1
Помогите понять ошибку в коде (excel vba)
    #39640443
pomogitepls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макрос еще в процессе, но не могу понять, в чем сейчас проблема. В диалоговом окне беру разные эксель файлы, и пролистывая их по очереди ищу информацию в них и добавляю на лист shTotal. (В будущем еще хотелось чтобы данные из каждой новой книги кидались в шаблонную shTotal, который у меня в коде добавляется, если будет несколько книг. Пока не знаю как это реализовывать)
Выдает ошибку "subscript out of range", помогите с ней разобраться.


Код: 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.
46.
47.
48.
49.
50.
51.
52.
Sub Smeta()

Dim oFD As FileDialog
Dim sFolder$, Filename$, MyName$
Dim OutRow&, KolSmet&
Dim sh As Worksheet
Dim y, z, w As Range
Dim cr, cr2, cr3 As Integer

MyName = ThisWorkbook.Name
Set oFD = Application.FileDialog(msoFileDialogFilePicker)

With oFD
.Title = "Nazvanie"
.Filters.Add "Excel files", "*.xls*;*.xla*"
.InitialFileName = ThisWorkbook.Path & "\"
If .Show = 0 Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.StatusBar = "Status......."

For cr = 1 To oFD.SelectedItems.Count
  
  If cr < oFD.SelectedItems.Count Then Sheets(Sheets.Count).Copy after:=Sheets(Sheets.Count)
  sFolder = .SelectedItems(cr)
  Filename = Dir(sFolder, vbNormal)

       'Workbooks("Filename").Activate ---------нужно ли это вообще здесь?
    For cr2 = 1 To Workbooks("Filename").Worksheets(Sheets.Count)-----------Жалуется на это место и на похожие дальше
      Set sh = Workbooks(Filename).Worksheets(cr2)
      Set y = sh.UsedRange.Find("*(nevazhnochto)", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns)
      shTotal.Range("R2") = y.Offset(2, 0)
      shTotal.Cells(4, 2).EntireRow.HorizontalAlignment = xlCenter
      Set z = sh.UsedRange.Find("*(nevazhnochto)*", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns)
      shTotal.Cells(4, 3) = z.Offset(-1, 0)
      Set w = sh.UsedRange.Find("*(nevazhnochto)*", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns)
      shTotal.Range("R1") = w.Offset(-1, 0)
    Next cr2
   
    Workbooks(Filename).Close
    KolSmet = KolSmet + 1
    Filename = Dir()
Next

End With

Application.ScreenUpdating = True
Application.StatusBar = False
MsgBox "Smet: " & KolSmet
Application.DisplayAlerts = True

End Sub
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640487
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pomogitepls
Код: vbnet
1.
Workbooks("Filename").Worksheets...

pomogitepls
Код: vbnet
1.
Workbooks(Filename).Close...

найдите десять отличий. Ну или хотя бы одно ))
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640489
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще я не нашел, собственно, открытия книги
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640490
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pomogitepls
Код: vbnet
1.
Filename = Dir(sFolder, vbNormal)

вот еще косяк - каждый раз будет использоваться один и тот же файл.

В общем, косяков, видимо, полно, лень делать полный анализ кода
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640509
pomogitepls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Использую ведь Filename = Dir() в конце цикла, что возьмут следующий файл.
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640511
pomogitepls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
да и зачем открывать книгу, если все делается в фоне
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640529
pomogitepls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPD

Разобрался с некоторыми моментами. Подскажите, пожалуйста, в том ли месте и правильно ли я закрываю открываемые книги.
И еще, как в данном коде сделать так, чтобы данные из новой книги переносились сначала на шаблонный лист изначальной книги shTotal(он идет под номером 2, на 1 листе находятся кнопки), а затем на его копии, каждая книга в новый лист.

Код: 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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
Sub Smeta()

Dim oFD As FileDialog
Dim sFolder$, Filename$, MyName$
Dim OutRow&, KolSmet&
Dim sh As Worksheet
Dim y, z, w As Range
Dim cr, cr2, cr3 As Integer

MyName = ThisWorkbook.Name
Set oFD = Application.FileDialog(msoFileDialogFilePicker)

With oFD
.Title = "Выберите сметы"
.Filters.Add "Excel files", "*.xls*;*.xla*"
.InitialFileName = ThisWorkbook.Path & "\"
If .Show = 0 Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.StatusBar = "Ожидайте. Идёт процесс......."

For cr = 1 To oFD.SelectedItems.Count Step 1
  
  If cr < oFD.SelectedItems.Count Then Sheets(Sheets.Count).Copy after:=Sheets(Sheets.Count)
        
  With shTotal
  sFolder = oFD.SelectedItems(cr)
  Filename = Dir(sFolder, vbNormal)
  FileData = sFolder
  Workbooks.Open FileData
  Workbooks(Filename).Activate
  
    For Each sh In Workbooks(Filename).Worksheets
      Set y = sh.UsedRange.Find("*(наименование стройки и/или объекта)", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns)
      Set z = sh.UsedRange.Find("*(наименование работ и затрат)*", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns)
      .Cells(2, 1).Value = y.Offset(2, 0) & " " & z.Offset(-1, 0)
      Set w = sh.UsedRange.Find("*(наименование стройки и/или объекта)*", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns)
      .Cells(1, 1) = w.Offset(-1, 0)
    Next sh
  Workbooks(Filename).Close
  End With
 
  KolSmet = KolSmet + 1
  
Next cr

End With


Application.ScreenUpdating = True
Application.StatusBar = False
MsgBox "Итоговая таблица сформирована. Кол-во обработанных файлов со сметами: " & KolSmet
Application.DisplayAlerts = True

End Sub
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640532
pomogitepls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот примеры файлов(основной и два файла(бесконечное их количество в итоге может быть), откуда будет браться информация):
https://www.dropbox.com/sh/386bymwrs543aex/AAAzQoOprAwHILf-huv2UInja?dl=0
(сохранил на дропбокс, в прикрепленные файлы не помещается немного)
...
Рейтинг: 0 / 0
Помогите понять ошибку в коде (excel vba)
    #39640573
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pomogiteplsИспользую ведь Filename = Dir() в конце цикла, что возьмут следующий файл.а в начале цикла опять Filename = Dir(sFolder, vbNormal), что затирает Filename = Dir(). Впрочем, в новом коде Dir нет вообще.


pomogiteplsв том ли месте и правильно ли я закрываю открываемые книги.ну сейчас вроде да. Activate не нужен.
pomogitepls
Код: vbnet
1.
2.
Dim y, z, w As Range
Dim cr, cr2, cr3 As Integer

объявления неправильные, почитайте как пользоваться оператором Dim

pomogiteplsИ еще, как в данном коде сделать так, чтобы данные из новой книги переносились сначала на шаблонный лист изначальной книги shTotal(он идет под номером 2, на 1 листе находятся кнопки), а затем на его копии, каждая книга в новый лист.Что означает "сначала" и "затем"?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите понять ошибку в коде (excel vba)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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