Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 08:28   #1
snowfrost
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 4
По умолчанию Определить длину листа.

Добрый день пытаюсь написать макрос по сборке данных со всех листов и формирования сводного листа. Хотелось бы, довести код до ума.


Цитата:
Sub Test()
d = 3
With Application.Workbooks.Item("1.xls") // Как работать с открытой книгой, без учета имени?

For i = 1 To 5
Application.Sheets(i).Activate // Как последовательно обрабатывать, каждый лист?

n = 4
Do While Cells(n, 1) <> 0
n = n + 1
Loop // Как вычислить длину листа?

For x = 3 To n
For y = 10 To 103

If Cells(x, y).Value <> 0 Then
Dim a As Integer
a = x
Do While Cells(a, 2) = 0
a = a - 1
Loop

im = Cells(a, 2).Value
Dim z As Integer
z = y
Do While Cells(1, z) = 0
z = z - 1
Loop

dt = Cells(1, z).Value
artikl = Cells(x, 3).Value
Cod_oper = Cells(x, 4).Value
oborud = Cells(x, 5).Value
colvo = Cells(x, y).Value

Application.Sheets(6).Activate
Cells(d, 1) = dt
Cells(d, 2) = im
Cells(d, 3) = artikl
Cells(d, 4) = Cod_oper
Cells(d, 5) = oborud
Cells(d, 6) = colvo
d = d + 1


End If
Next
Next
Next

End With
End Sub
snowfrost вне форума Ответить с цитированием
Старый 01.06.2011, 10:09   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

1. Если
With Application.Workbooks.Item("1.xls")
то где это используется?

Вообще не понял - если с активной, то можно не акцентировать, или через set wb =
Если с одной из открытых - то тоже set wb =

2.Два варианта

Sub tt()
For i = 1 To 5
With Worksheets(i)
MsgBox .Cells(1, 1).Value
End With
Next
End Sub

Sub ttt()
For Each sh In Worksheets
With sh
MsgBox .Cells(1, 1).Value
End With
'или
MsgBox sh.Cells(1, 1).Value
Next
End Sub

3. Есть много способов, практичный для большинства случаев (но не всех) такой:

iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 01.06.2011 в 10:14.
Hugo121 вне форума Ответить с цитированием
Старый 01.06.2011, 10:30   #3
snowfrost
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение

Sub ttt()
For Each sh In Worksheets
With sh
MsgBox .Cells(1, 1).Value
End With
'или
MsgBox sh.Cells(1, 1).Value
Next
End Sub
Как я понимаю в этом случае, скрип будет выбирать со всех листов, и я не смогу указать, что последний лист трогать не нужно?
snowfrost вне форума Ответить с цитированием
Старый 01.06.2011, 10:49   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Добавьте условие проверки имени или индекса листа.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 01.06.2011, 10:52   #5
snowfrost
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 4
По умолчанию

Да и еще вопрос, как записывать в неактивный лист.

В примере выше я использую Application.Sheets(i).Activate, и запись в 6 лист книги Application.Sheets(6).Activate, при этом активируя их, насколько это правильно? Возможно ли обойтись без .activate?

И пример в посте один не правильны, потому что у меня не работает, а работает в таком виде:

Цитата:
...
For i = 1 To 5

n = 4
Do While Cells(n, 1) <> 0
n = n + 1
Loop // Как вычислить длину листа?

For x = 3 To n
For y = 10 To 103
Application.Sheets(i).Activate //Активация листа

If Cells(x, y).Value <> 0 Then
Dim a As Integer
a = x
...
В итоге при n = 100 примерно, .activate срабатывает порядка 10000 что не очень-то и хорошо.

Последний раз редактировалось snowfrost; 01.06.2011 в 10:59.
snowfrost вне форума Ответить с цитированием
Старый 01.06.2011, 11:17   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Так выше же есть пример, как прочитать не активируя.
Так же можно и записать.
Или другой вариант:
set sh=worksheets(6)
sh.cells(1,1).value=1
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.06.2011, 11:42   #7
snowfrost
Новичок
Джуниор
 
Регистрация: 01.06.2011
Сообщений: 4
По умолчанию Спасибо

Огромное спасибо за совет, скрипт исполняет теперь намного быстрее)))
snowfrost вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для созданного текста определить длину содержащейся в нем максимальной серии символов, отличных от букв. rusfin01 Помощь студентам 1 28.02.2011 10:25
Как определить длину стороки занимаемую текстом. beda Win Api 0 23.06.2010 13:04
Дан файл. Определить длину наибольшего интервала возрастания. Tanu_shka Паскаль, Turbo Pascal, PascalABC.NET 1 18.05.2010 19:07
как определить длину мп3? Дима я Мультимедиа в Delphi 6 19.08.2009 19:44
Определить длину отрезка во 2-м квадранте системы координат kolduev Помощь студентам 9 13.02.2008 17:45