Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Макрос выполняющий формулы

Автор baters, 20.05.2011, 23:24:35

« назад - далее »

baters

Sub Фильтры()
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("E3:E" & lLastRow).FormulaR1C1 = "=SUMIF(Лист1!C4,RC1,Лист1!C11)"
    Range("F3:F" & lLastRow).FormulaR1C1 = "=SUMIF(Лист1!C4,RC1,Лист1!C12)"
    Range("G3:G" & lLastRow).FormulaR1C1 = "=SUMIF(Лист1!C4,RC1,Лист1!C13)"
    Range("H3:H" & lLastRow).FormulaR1C1 = "=SUMIF(Лист1!C4,RC1,Лист1!C14)"
    Range("I3:I" & lLastRow).FormulaR1C1 = "=RC7-RC5"
    Range("J3:J" & lLastRow).FormulaR1C1 = "=RC8-RC6"
    Range("M3:M" & lLastRow).FormulaR1C1 = "=SUMIF(Лист2!C4,RC1,Лист2!C17)"
    Range("N3:N" & lLastRow).FormulaR1C1 = "=SUMIF(Лист2!C4,RC1,Лист2!C18)"
    Range("P3:P" & lLastRow).FormulaR1C1 = "=RC9+RC13"
    Range("Q3:Q" & lLastRow).FormulaR1C1 = "=RC10+RC14"
    lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    End Sub

Вроде работает...тока как то странно.....на компе работает ...на ноуте ошибка :( хм...

Serge 007

Цитата: The_Prist от 21.05.2011, 14:58:11
Application.Calculate
В 2010 записал макрорекордером.
Работает и без Application...

baters

Цитата: Serge 007 от 21.05.2011, 20:36:43
Цитата: The_Prist от 21.05.2011, 14:58:11
Application.Calculate
В 2010 записал макрорекордером.
Работает и без Application...

только не нужно снова мерить у кого больше......(в смысле знаний в екеселе)..лучше скажите как макрос?

Дмитрий Щербаков(The_Prist)

Да нечего Вам сказать...Вы же опять текст ошибки от нас скрываете....А вот определение последней строки я бы сделал так:
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

Цитата: The_Prist от 21.05.2011, 21:21:25
Да нечего Вам сказать...

Пары слов восхищения моей сообразительностью хватило бы :)
PS Вообщем макрос работает всем спасибо.

Serge 007

Цитата: baters от 21.05.2011, 21:16:10
Цитата: Serge 007 от 21.05.2011, 20:36:43
Цитата: The_Prist от 21.05.2011, 14:58:11
Application.Calculate
В 2010 записал макрорекордером.
Работает и без Application...

только не нужно снова мерить у кого больше......(в смысле знаний в екеселе)
Я в макросах ни в зуб ногой (только рекордером записывать умею), в отличие от формул. Тут как Дима скажет - так и есть.

baters

Sub прил3()
'
' прил3 Макрос
    Dim wSh1 As Worksheet: Set wSh1 = [KOD1].Parent 
    Dim wSh2 As Worksheet: Set wSh2 = [KOD2].Parent
    Dim wSh As Worksheet: Set wSh = [KOD].Parent   
    Dim Arr(), lRow&
    Dim rKOD As Range, rNAZV As Range, rCENA As Range, rEDIN As Range

   
    With CreateObject("Scripting.Dictionary")
        lRow = wSh1.Cells(wSh1.Rows.Count, [KOD1].Column).End(xlUp).Row - [KOD1].Row - 1 
        If lRow > 0 Then   
            Set rNAZV = [NAZV1].Offset(2, 0).Resize(lRow)
            Set rKOD = [KOD1].Offset(2, 0).Resize(lRow)
            Set rCENA = [CENA1].Offset(2, 0).Resize(lRow)
            Set rEDIN = [EDIN1].Offset(2, 0).Resize(lRow)
            For lRow = 1 To rKOD.Rows.Count
                .Item(Trim(rKOD(lRow))) = Array(rKOD(lRow).Value, rNAZV(lRow).Value, rCENA(lRow).Value, rEDIN(lRow).Value)
            Next lRow
        End If
        lRow = wSh2.Cells(wSh2.Rows.Count, [KOD2].Column).End(xlUp).Row - [KOD2].Row - 1   
        If lRow > 0 Then    'если есть данные на листе
            Set rNAZV = [NAZV2].Offset(2, 0).Resize(lRow)
            Set rKOD = [KOD2].Offset(2, 0).Resize(lRow)
            Set rCENA = [CENA2].Offset(2, 0).Resize(lRow)
            Set rEDIN = [EDIN2].Offset(2, 0).Resize(lRow)
            For lRow = 1 To rKOD.Rows.Count
                .Item(Trim(rKOD(lRow))) = Array(rKOD(lRow).Value, rNAZV(lRow).Value, rCENA(lRow).Value, rEDIN(lRow).Value)
            Next lRow
        End If
              If .Count > 0 Then
            Arr = Application.Transpose(Application.Transpose(.Items)) 
        Else: Exit Sub
        End If
    End With
   
    Application.ScreenUpdating = 0
    On Error Resume Next: ActiveSheet.ShowAllData: On Error GoTo 0
    [KOD].Offset(2, 0).Resize(wSh.Cells.SpecialCells(xlCellTypeLastCell).Row, 17).ClearContents
    [KOD].Offset(2, 0).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
    Dim lLastRow As Long
    lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

    'прописываем формулы
    Range("E3:E" & lLastRow).FormulaR1C1 = "=SUMIF(Инвентаризация!C4,RC1,Инвентаризация!C11)"
    Range("F3:F" & lLastRow).FormulaR1C1 = "=SUMIF(Инвентаризация!C4,RC1,Инвентаризация!C12)"
    Range("G3:G" & lLastRow).FormulaR1C1 = "=SUMIF(Инвентаризация!C4,RC1,Инвентаризация!C13)"
    Range("H3:H" & lLastRow).FormulaR1C1 = "=SUMIF(Инвентаризация!C4,RC1,Инвентаризация!C14)"
    Range("I3:I" & lLastRow).FormulaR1C1 = "=RC5-RC7"
    Range("J3:J" & lLastRow).FormulaR1C1 = "=RC6-RC8"
    Range("M3:M" & lLastRow).FormulaR1C1 = "=SUMIF(Аппеляция!C4,RC1,Аппеляция!C17)"
    Range("N3:N" & lLastRow).FormulaR1C1 = "=SUMIF(Аппеляция!C4,RC1,Аппеляция!C18)"
    Range("P3:P" & lLastRow).FormulaR1C1 = "=RC9+RC13"
    Range("Q3:Q" & lLastRow).FormulaR1C1 = "=RC10+RC14"
    Range("T3:T" & lLastRow).FormulaR1C1 = "=SUMIF('Межинвентаризационный период'!C4,RC1,'Межинвентаризационный период'!C9)"
    Range("U3:U" & lLastRow).FormulaR1C1 = "=SUMIF('Межинвентаризационный период'!C4,RC1,'Межинвентаризационный период'!C10)"
    Range("R3:R" & lLastRow).FormulaR1C1 = "=SUMIF('Предыдущая сплошная'!C4,RC1,'Предыдущая сплошная'!C17)"
    Range("S3:S" & lLastRow).FormulaR1C1 = "=SUMIF('Предыдущая сплошная'!C4,RC1,'Предыдущая сплошная'!C18)"
    Range("X3:X" & lLastRow).FormulaR1C1 = "=SUMIF('РЦ инвентаризация'!C2,RC1,'РЦ инвентаризация'!C5)"
    Range("Y3:Y" & lLastRow).FormulaR1C1 = "=RC24*RC3"
    Range("V3:V" & lLastRow).FormulaR1C1 = "=SUMIF(РЦ!C2,RC1,РЦ!C5)"
    Range("W3:W" & lLastRow).FormulaR1C1 = "=RC22*RC3"
    Range("Z3:Z" & lLastRow).FormulaR1C1 = "=IF(AND(RC5=0,RC13=0),RC7,0)"
    Range("AA3:AA" & lLastRow).FormulaR1C1 = "=IF(AND(RC5=0,RC13=0),RC8,0)"
    Application.Calculation = xlAutomatic
    Range("E3:AA" & lLastRow).Value = Range("E3:AA" & lLastRow).Value
    Range("A3:Q" & lLastRow).Sort Range("B3"), xlAscending
    'устанавливаем фильтр и накладываем условие
    ActiveSheet.Range("$A$1:$Q" & lLastRow).AutoFilter Field:=16, Criteria1:="<>0", Operator:=xlAnd
    Application.ScreenUpdating = 1


Добрый вечер.
То что я переделал несрботало :(  (в самый ответственный момент)  по этим строкам 
   Range("R3:R" & lLastRow).FormulaR1C1 = "=SUMIF('Предыдущая сплошная'!C4,RC1,'Предыдущая сплошная'!C17)"
    Range("S3:S" & lLastRow).FormulaR1C1 = "=SUMIF('Предыдущая сплошная'!C4,RC1,'Предыдущая сплошная'!C18)"
    Range("X3:X" & lLastRow).FormulaR1C1 = "=SUMIF('РЦ инвентаризация'!C2,RC1,'РЦ инвентаризация'!C5)"
макрос выдает бред .....запускается он с листа Итог...ни как не могу понять в чем дело, кучу макросов пересмотрел....
Помогите плиз разобраться :(((


http://zalil.ru/31214221

Дмитрий Щербаков(The_Prist)

Ну очень не хочется пароль взламывать...лень....
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters


Дмитрий Щербаков(The_Prist)

Надо тщательней имена листов проверять и имена, которые в коде пишите:
"=SUMIF('РЦ инвентаризация '!C2,RC1,'РЦ инвентаризация '!C5)"

Пробел на конце забыли. В имени листа он есть, а вот в коде - нет...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

в эти столбцах как раз макрос вылетал и просил путь указать....а вот в этих строках....непонятно от куда цифры беруться.....может причиной быть еправельное наименование листа?
   

Range("T3:T" & lLastRow).FormulaR1C1 = "=SUMIF('Межинвентаризационный период'!C4,RC1,'Межинвентаризационный период'!C9)"
    Range("U3:U" & lLastRow).FormulaR1C1 = "=SUMIF('Межинвентаризационный период'!C4,RC1,'Межинвентаризационный период'!C10)"

Дмитрий Щербаков(The_Prist)

Неправильные цифры могут быть либо из-за исходных данных, либо из-за неверной формулы.
Где именно неверно считает? В какой строке или какое именно значение?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

В примере этого нет, но столбцы Т и U показывают в строках количество по номенклутурам которых в листе от куда сумируются значения (межинвентаризационный период) просто нет......я грешу, либо на объедение ячеек в листе межинвентаризационный период...либо даже не знаю на что......

Дмитрий Щербаков(The_Prist)

Так если в примере этого нет - как можно сказать Вам откуда ноги ростут? :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

baters

ну не наю....может в макросе, что то не так.

Беру паузу до завтра, завтра выложу пример с ошибкой.
Спасибо.

Яндекс.Метрика Рейтинг@Mail.ru