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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2010, 10:08   #11
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Вот он проблемный файл --> макрос Табличка
Вложения
Тип файла: rar Problemniy.rar (1.83 Мб, 6 просмотров)
1134 вне форума Ответить с цитированием
Старый 08.02.2010, 10:20   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В макрос "TABLICHKA1" внес изменения, которые я советовал Вам сделать в посте №8. Ошибка исчезла. Посмотрите вложение.
Вложения
Тип файла: rar No_Problem.rar (1.84 Мб, 8 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 08.02.2010, 12:42   #13
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию Невероятно, но факт!

Sub TABLICHKA1()

Dim ws As Worksheet, x As Range, y As Range, i As Long, fst As String, nm As Integer
Application.ScreenUpdating = False: Application.DisplayAlerts = False
On Error Resume Next: Sheets("Èñòîðè÷åñêèå ïîêàçàòåëè").Delete: On Error GoTo 0
Worksheets.Add.Name = "Èñòîðè÷åñêèå ïîêàçàòåëè"
[A1] = "--WELL": [B1] = "DD.MM.YYYY": [C1] = "Qoil,ì3/ñóò"
[D1] = "Qwat,ì3/ñóò": [E1] = "Qliq,ì3/ñóò": [F1] = "WEFA": [G1] = "BHP"
For Each ws In Sheets
If ws.Name <> ActiveSheet.Name Then
Set x = ws.[D:D].Find(what:="Qæ,ì3/ñóò", LookAt:=xlWhole)
If Not x Is Nothing Then
fst = x.Address
Do
i = Cells(Rows.Count, 1).End(xlUp).Row + 1: Cells(i, 1) = ws.Name
Cells(i, 2) = DateValue(ws.Cells(x.Row, 1) & " 1, 2009") 'Year(Date))
Cells(i, 5) = Application.AverageIf(ws.Range(ws.C ells(x.Row, 6), ws.Cells(x.Row, 36)), "<>0")
If Application.IsErr(Cells(i, 5)) Then Range(Cells(i, 3), Cells(i, 7)) = 0
If ws.[AC5] <> "" Then Cells(i, 7) = ws.[AC5]
If Cells(i, 6).Value <> "0" Then
nm = Day(DateSerial(Year(Cells(i, 2)), Month(Cells(i, 2)) + 1, 1) - 1)
Cells(i, 6) = Application.CountA(ws.Range(ws.Cell s(x.Row, 6), ws.Cells(x.Row, 36))) / nm
End If
If Cells(i, 5) <> 0 And Val(ws.[AG5]) <> 0 Then _
Cells(i, 3) = Application.AverageIf(ws.Range(ws.C ells(x.Row + 1, 6), ws.Cells(x.Row + 1, 36)), "<>0") / ws.[AG5] _
Else Cells(i, 3) = 0
Set x = ws.[D:D].FindNext(x)
Loop While fst <> x.Address
End If: End If: Next: Columns("A:G").AutoFit

End Sub

Но у меня по-прежнему затыкается на листе 1033 и по-прежнему выдаёт ошибку в той же строке...
1134 вне форума Ответить с цитированием
Старый 08.02.2010, 16:37   #14
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Sub TABLICHKA1()

Dim ws As Worksheet, x As Range, y As Range, i As Long, fst As String, nm As Integer
Application.ScreenUpdating = False: Application.DisplayAlerts = False
On Error Resume Next: Sheets("Èñòîðè÷åñêèå ïîêàçàòåëè").Delete: On Error GoTo 0
Worksheets.Add.Name = "Èñòîðè÷åñêèå ïîêàçàòåëè"
[A1] = "--WELL": [B1] = "DD.MM.YYYY": [C1] = "Qoil,ì3/ñóò"
[D1] = "Qwat,ì3/ñóò": [E1] = "Qliq,ì3/ñóò": [F1] = "WEFA": [G1] = "BHP"
For Each ws In Sheets
If ws.Name <> ActiveSheet.Name Then
Set x = ws.[D:D].Find(what:="Qæ,ì3/ñóò", LookAt:=xlWhole)
If Not x Is Nothing Then
fst = x.Address
Do
i = Cells(Rows.Count, 1).End(xlUp).Row + 1: Cells(i, 1) = ws.Name
Cells(i, 2) = DateValue(ws.Cells(x.Row, 1) & " 1, 2009") 'Year(Date))
Cells(i, 5) = Application.AverageIf(ws.Range(ws.C ells(x.Row, 6), ws.Cells(x.Row, 36)), "<>0")
If Application.IsErr(Cells(i, 5)) Then Range(Cells(i, 3), Cells(i, 7)) = 0
If ws.[AC5] <> "" Then Cells(i, 7) = ws.[AC5]
If Cells(i, 6).Value <> "0" Then
nm = Day(DateSerial(Year(Cells(i, 2)), Month(Cells(i, 2)) + 1, 1) - 1)
Cells(i, 6) = Application.CountA(ws.Range(ws.Cell s(x.Row, 6), ws.Cells(x.Row, 36))) / nm
End If
If Cells(i, 5) <> "0" And ws.[AG5] <> "" Then
If Application.IsErr(Application.Avera geIf(ws.Range(ws.Cells(x.Row + 1, 6), ws.Cells(x.Row + 1, 36)), "<>0")) Then
Cells(i, 3).Value = 0
Else:
Cells(i, 3).Value = Application.AverageIf(ws.Range(ws.C ells(x.Row + 1, 6), ws.Cells(x.Row + 1, 36)), "<>0") / ws.[AG5]
End If
End If
If Cells(i, 3) <> 0 And Cells(i, 5) <> 0 And Cells(i, 3) <> "" And Cells(i, 5) <> "" Then _
Cells(i, 4).Value = Cells(i, 5).Value - Cells(i, 3).Value
If Cells(i, 3) = 0 Or Cells(i, 3) = "" And Cells(i, 4) = 0 Then
Cells(i, 4) = Cells(i, 5): Cells(i, 5) = 0: Cells(i, 3) = 0
End If
Set x = ws.[D:D].FindNext(x)

Loop While fst <> x.Address
End If: End If: Next: Columns("A:G").AutoFit

Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
End Sub

Вот так заработало + я ещё кое что добавил.
Подскажите пожалуйста как мне можно сместить дату на 1 месяц вперёд?
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 04:33   #15
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Подскажите пожалуйста как мне можно сместить дату на 1 месяц вперёд?
Какую дату? В каком месте? Не экономьте слова, объясните подробнее.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.02.2010, 05:37   #16
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Во втором столбце таблички у меня выгружает:

01.01.2009
01.02.2009
01.03.2009
01.04.2009
01.05.2009
01.06.2009
01.07.2009
01.08.2009
01.09.2009
01.10.2009
01.11.2009
01.12.2009

а хочется так:

01.02.2009
01.03.2009
01.04.2009
01.05.2009
01.06.2009
01.07.2009
01.08.2009
01.09.2009
01.10.2009
01.11.2009
01.12.2009
01.01.2010

чтобы расчёты за месяц стояли напротив первого числа следующего месяца. Вообще я знаю как исправить это в Excelе ручками, а как бы сделать это автоматически?...
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 08:15   #17
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если речь идет о данных столбца "B" в сформированном макросом листе "Исторические показатели", то в самом конце кода макроса "TABLICHKA1" добавьте следующий код:
Код:
Dim cell As Range: Application.ScreenUpdating = False
For Each cell In Range([B2], Cells(Rows.Count, 2).End(xlUp))
    cell = DateSerial(Year(cell), Month(cell) + 1, Day(cell))
Next
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.02.2010, 09:27   #18
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Спасибо ещё раз!
1134 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура Telec Помощь студентам 2 20.01.2010 12:46
C++. Структура. bpystep Помощь студентам 12 24.11.2009 00:28
структура hungry Общие вопросы C/C++ 11 25.06.2009 20:31
Структура SL1CK Общие вопросы C/C++ 8 08.06.2009 21:31
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43