Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 След.
sumifs (VBA) работает медленно
 
всем доброго времени суток
у меня есть маленький код:
Код
Sub test()
Dim lr As Long
    With Sheets("продукт")
        lr = .Cells(3, 2).Value + 4
        Set fn = Application.WorksheetFunction
        For r = 5 To lr
            .Cells(r, 4).Formula = fn.SumIfs([procJanV], [procChainV], .Cells(r, 2), [procBrandV], .Cells(r, 3))
        Next r
    End With
End Sub

работает очень медленно, потому что вставляет данные в каждую ячейку отдельно
есть ли другой вариант? чтобы работал по быстрее
заранее спасибо за потраченное время
оптимальная формула для расчета дисконта
 
прошу изменить "дисконда" на "дисконта" в название темы, заранее спасибо
оптимальная формула для расчета дисконта
 
всем доброго времени суток
если клиент покупает товар на 10 000 000 руб., то скидка составляет 15%, а если на 100 000 000 руб., то 1%.
а если клиент покупает товар на 22 500 000 руб., то сколько процентов составляет скидка?
как написать оптимальную формулу для этой задачи? тестовый файл во вложении
буду очень признателен за любые идеи
Заранее спасибо за потраченное драгоценное время
возможно ли создать публичную функцию внутри Class Module?
 
KL, огромное спасибо за потраченное драгоценное время:)
возможно ли создать публичную функцию внутри Class Module?
 
KL, спасибо за потраченное время
сегодня утром выложил пример, сейчас вижу что нет, почему не знаю
еще надо учитывать по горизонтально (т.е. по месячно)
попробую переобразовать ваш код под себя
если не трудно, то прошу еще раз посмотреть мой пример, заранее спасибо
если будут ответы то буду очень признателен
возможно ли создать публичную функцию внутри Class Module?
 
RAN, спасибо за участие, к сожалению не поможет:((
возможно ли создать публичную функцию внутри Class Module?
 
KL, выложил тестовый файл
у меня 50, но в этом файле оставил только 10 наименование товаров
что не работает: если мы меняем данные в userForm, то данные внутри Экселя не меняются
прошу помочь, спасибо
возможно ли создать публичную функцию внутри Class Module?
 
KL, спасибо за инфо
реализовал вот так
class module:
Код
Option Explicit
Public WithEvents eBoxes As MSForms.TextBox

Private Sub eBoxes_Change()
    If eBoxes.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, r As Integer, Str
    Str = Split(eBoxes.Tag, ";")
    If UBound(Str) < 1 Then Exit Sub
    lc1 = val(Str(0))
    lc2 = val(Str(1))
    With Worksheets("updateEvent")
        For r = 3 To 52 Step 1
            If .Cells(5, 2).Value = .Cells(1, 1).Value Then
                .Cells(r, lc1).Value = Format(val(eBoxes.Value) / 100, "#0%")
            Else
                .Cells(r, lc2).Value = Format(val(eBoxes.Value) / 100, "#0%")
            End If
        Next r
    End With
    With eBoxes
        If Not IsNumeric(.Text) And .Text <> "" Then
            .Text = Left(.Text, Len(.Text) - 1)
            .SelStart = Len(.Text)
        End If
    End With
End Sub
add code:
Код
Dim eValues() As New eventFC

Private Sub UserForm_Initialize()
    Dim c, r, cnt As Integer
    Dim ctl As Control
    If Sheets("updateEvent").Cells(1, 2).Value = "New" Then
    Else
        cnt = 0
        For Each ctl In eventsFC.frmEvent.Controls
            If TypeName(ctl) = "txtBrand" Then
                For r = 1 To 50 Step 1
                    cnt = cnt + 1
                    ReDim Preserve eValues(1 To cnt)
                    For c = 1 To 12
                       Set eValues(c).eBoxes = eventsFC.frmEvent.Controls("txtBrand" & r & "_" & c)
                    Next c
                Next r
            End If
        Next ctl
    End If
End Sub
к сожалению не работает, не могу понять где ошибка, прошу помочь, заранее спасибо
возможно ли создать публичную функцию внутри Class Module?
 
всем доброго времени суток
у меня есть class module:
Код
Option Explicit
Public WithEvents eBx1 As MSForms.TextBox
Public WithEvents eBx2 As MSForms.TextBox
...
до Public WithEvents eBx50 As MSForms.TextBox


Private Sub eBx1_Change()
With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With
    If eBx1.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, r As Integer, Str
    Str = Split(eBx1.Tag, ";")
    If UBound(Str) < 1 Then Exit Sub
    lc1 = val(Str(0))
    lc2 = val(Str(1))
    With Worksheets("updateEvent")
        If .Cells(5, 2).Value = .Cells(1, 1).Value Then
            .Cells(3, lc1).Value = Format(val(eBx1.Value) / 100, "#0%")
        Else
            .Cells(3, lc2).Value = Format(val(eBx1.Value) / 100, "#0%")
        End If
    End With
    With eBx1
        If Not IsNumeric(.Text) And .Text <> "" Then
            .Text = Left(.Text, Len(.Text) - 1)
            .SelStart = Len(.Text)
        End If
    End With
With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With
End Sub

Private Sub eBx2_Change()
With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With
    If eBx2.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, r As Integer, Str
    Str = Split(eBx2.Tag, ";")
    If UBound(Str) < 1 Then Exit Sub
    lc1 = val(Str(0))
    lc2 = val(Str(1))
    With Worksheets("updateEvent")
        If .Cells(5, 2).Value = .Cells(1, 1).Value Then
            .Cells(4, lc1).Value = Format(val(eBx2.Value) / 100, "#0%")
        Else
            .Cells(4, lc2).Value = Format(val(eBx2.Value) / 100, "#0%")
        End If
    End With
    With eBx2
        If Not IsNumeric(.Text) And .Text <> "" Then
            .Text = Left(.Text, Len(.Text) - 1)
            .SelStart = Len(.Text)
        End If
    End With
With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With
End Sub
...
до Private Sub eBx50_Change()

возможно ли создать публичную функцию внутри Class Module?
затем использовать ее внутри UserForm
использую следующий код внутри UserForm
Код
'function for import data from eventsFC to sheet
Dim eVal1() As New eventFC 'название Class Molude
Dim eVal2() As New eventFC
...
до Dim eVal50() As New eventFC
Private Sub UserForm_Initialize()
Application.EnableEvents = False
Application.ScreenUpdating = False
    Dim c, r As Integer
    If Sheets("updateEvent").Cells(1, 2).Value = "New" Then
    Else
        ReDim eVal1(1 To 12)
            For c = 1 To 12
               Set eVal1(c).eBx1 = eventsFC.frmEvent.Controls("txtBrand1_" & c)
            Next c
        ReDim eVal2(1 To 12)
            For c = 1 To 12
               Set eVal2(c).eBx2 = eventsFC.frmEvent.Controls("txtBrand2_" & c)
            Next c
...
до 
        ReDim eVal50(1 To 12) 
           For c = 1 To 12
               Set eVal50(c).eBx50 = eventsFC.frmEvent.Controls("txtBrand50_" & c)
            Next c
    End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
можно ли добавить в этот код еще один цикл?
код у меня работал когда использовал в User Form 12 наименование товара
основная задача заключается в том что если пользователь меняет данные в UserForm, данные должны менятся внутри Excel
есть ли у вас какая-то идея по этому поводу
заранее спасибо за потраченное время
Как изменить типы ячеек, чтобы не исчезли нули?
 
Сергий,заменить на текстовый формат
Суммирование из двух листов с условиями
 
Сергей, спасибо
обновленный файл во вложении
Суммирование из двух листов с условиями
 
всем доброго времени суток
нужна ваша помощь
какую формулу лучше использовать для суммирования данных из двух листов с условиями?
подробно все написано внутри файла (файл во вложении)
заранее спасибо за потраченное время
Авто запуск все формулы внутри одного листа, если ТОЛЬКО значение одной ячейки в другом листе меняется
 
Пытливый, спасибо за оперативность
если бы все мои формулы были бы внутри макроса, то это легко и понятно
все мои формулы внутри ячейки определенного листа, все формулы других листов запускаются автоматически, а все формулы этого листа нет
Авто запуск все формулы внутри одного листа, если ТОЛЬКО значение одной ячейки в другом листе меняется
 
всем доброго времени суток
как всем известно в экселе все взаимосвязанные формулы автоматически запускаются (или внучную), когда данные меняются
есть ли возможность запустить все формулы внутри одного листа, если ТОЛЬКО значение одной ячейки на другом листе меняется?
например, есть много взаимосвязанных формул внутри одного листа (например, лист 1), они запускаются автоматически ТОЛЬКО тогда, когда значение ячейки А1 (Лист 2) меняется
заранее спасибо
Создание классов на n строк товара в UserForm
 
доброго времени суток
реализовал следующим образом
код внутри UserForm:
Код
'function for import data from updatingFC to sheet
Dim txtVal1() As New updateFC
Dim txtVal2() As New updateFC
Dim txtVal3() As New updateFC

Private Sub UserForm_Initialize()
    Dim c As Integer
    ReDim txtVal1(1 To 12)
        For c = 1 To 12
            Set txtVal1(c).oTxtBx1 = updatingFC.frmUF.Controls("txtUfcProd1_" & c)
        Next c
    ReDim txtVal2(1 To 12)
        For c = 1 To 12
            Set txtVal2(c).oTxtBx2 = updatingFC.frmUF.Controls("txtUfcProd2_" & c)
        Next c
    ReDim txtVal3(1 To 12)
        For c = 1 To 12
            Set txtVal3(c).oTxtBx3 = updatingFC.frmUF.Controls("txtUfcProd3_" & c)
        Next c
End Sub
код внутри Class:
Код
Option Explicit
Public WithEvents oTxtBx1 As MSForms.TextBox
Public WithEvents oTxtBx2 As MSForms.TextBox
Public WithEvents oTxtBx3 As MSForms.TextBox

Private Sub oTxtBx1_Change()
    If oTxtBx1.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, lc3 As Long, lc4 As Long, r As Integer, str
    str = Split(oTxtBx1.Tag, ";")
    If UBound(str) < 1 Then Exit Sub
    lc1 = Val(str(0))
    lc2 = Val(str(1))
    lc3 = Val(str(2))
    lc4 = Val(str(3))
    If Worksheets("updatingFC").Cells(12, 1).Value = 11 Then
        If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
            Worksheets("updatingFC").Cells(3, lc1).Value = oTxtBx1.Value
        Else
            Worksheets("updatingFC").Cells(3, lc2).Value = oTxtBx1.Value
        End If
    ElseIf Worksheets("updatingFC").Cells(11, 1).Value = 11 Then
        If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
            Worksheets("updatingFC").Cells(3, lc3).Value = oTxtBx1.Value
        Else
            Worksheets("updatingFC").Cells(3, lc4).Value = oTxtBx1.Value
        End If
    End If
End Sub

Private Sub oTxtBx2_Change()
    If oTxtBx2.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, lc3 As Long, lc4 As Long, r As Integer, str
    str = Split(oTxtBx2.Tag, ";")
    If UBound(str) < 1 Then Exit Sub
    lc1 = Val(str(0))
    lc2 = Val(str(1))
    lc3 = Val(str(2))
    lc4 = Val(str(3))
    If Worksheets("updatingFC").Cells(12, 1).Value = 11 Then
        If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
            Worksheets("updatingFC").Cells(4, lc1).Value = oTxtBx2.Value
        Else
            Worksheets("updatingFC").Cells(4, lc2).Value = oTxtBx2.Value
        End If
    ElseIf Worksheets("updatingFC").Cells(11, 1).Value = 11 Then
        If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
            Worksheets("updatingFC").Cells(4, lc3).Value = oTxtBx2.Value
        Else
            Worksheets("updatingFC").Cells(4, lc4).Value = oTxtBx2.Value
        End If
    End If
End Sub

Private Sub oTxtBx3_Change()
    If oTxtBx3.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, lc3 As Long, lc4 As Long, r As Integer, str
    str = Split(oTxtBx3.Tag, ";")
    If UBound(str) < 1 Then Exit Sub
    lc1 = Val(str(0))
    lc2 = Val(str(1))
    lc3 = Val(str(2))
    lc4 = Val(str(3))
    If Worksheets("updatingFC").Cells(12, 1).Value = 11 Then
        If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
            Worksheets("updatingFC").Cells(5, lc1).Value = oTxtBx3.Value
        Else
            Worksheets("updatingFC").Cells(5, lc2).Value = oTxtBx3.Value
        End If
    ElseIf Worksheets("updatingFC").Cells(11, 1).Value = 11 Then
        If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
            Worksheets("updatingFC").Cells(5, lc3).Value = oTxtBx3.Value
        Else
            Worksheets("updatingFC").Cells(5, lc4).Value = oTxtBx3.Value
        End If
    End If
End Sub

реализовал для 3 строк, а у меня 48 строк, возможно ли оптимизировать данный код через for next?
разными путями попробовал но не получил желаемого результата
буду очень признателен за ваш ответ
заранее спасибо
Создание классов на n строк товара в UserForm
 
The_Prist, спасибо за оперативность и потраченное драгоценное время
попробую реализовать, потом постараюсь написать подробно как решил данную задачу
Создание классов на n строк товара в UserForm
 
vikttur, спасибо за комментарии
думаю можно так: "Создание классов на n строк товара в UserForm"
спасибо за понимание
Создание классов на n строк товара в UserForm
 
The_Prist, спасибо за оперативный отчет
если у меня не одна строка (не один продукт по месяцам), а n продукт, что будет?
по каждому продукту (строке) сделать отдельный модуль?
грубо говоря у меня n строк и 12 колонок с двумя условиями
буду очень признателен, если получу ответ
заранее спасибо
Создание классов на n строк товара в UserForm
 
всем доброго времени суток
у меня есть следующий обычный код:
Код
Private Sub txtUfcProd1_1_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 37).Value = txtUfcProd1_1.Value
    Else
        Worksheets("updatingFC").Cells(3, 49).Value = txtUfcProd1_1.Value
    End If
End Sub

Private Sub txtUfcProd1_2_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 38).Value = txtUfcProd1_2.Value
    Else
        Worksheets("updatingFC").Cells(3, 50).Value = txtUfcProd1_2.Value
    End If
End Sub

Private Sub txtUfcProd1_3_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 39).Value = txtUfcProd1_3.Value
    Else
        Worksheets("updatingFC").Cells(3, 51).Value = txtUfcProd1_3.Value
    End If
End Sub

Private Sub txtUfcProd1_4_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 40).Value = txtUfcProd1_4.Value
    Else
        Worksheets("updatingFC").Cells(3, 52).Value = txtUfcProd1_4.Value
    End If
End Sub

Private Sub txtUfcProd1_5_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 41).Value = txtUfcProd1_5.Value
    Else
        Worksheets("updatingFC").Cells(3, 53).Value = txtUfcProd1_5.Value
    End If
End Sub

Private Sub txtUfcProd1_6_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 42).Value = txtUfcProd1_6.Value
    Else
        Worksheets("updatingFC").Cells(3, 54).Value = txtUfcProd1_6.Value
    End If
End Sub

Private Sub txtUfcProd1_7_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 42).Value = txtUfcProd1_7.Value
    Else
        Worksheets("updatingFC").Cells(3, 54).Value = txtUfcProd1_7.Value
    End If
End Sub
...

как вы уже знаете, с помощью данного кода все изменения автоматически заносятся в определенную ячейку из формы
форма большая и много ячеек, есть ли возможности оптимизировать данный код?
заранее спасибо
выбор между датами в сводной таблице (VBA)
 
Цитата
JayBhagavan пишет: как предлагал выше.
вашу идею можно использовать, если не будем показывать сводную таблицу пользователям, а то придется объяснить каждым, что мы имеем ввиду под TRUE и FALSE

Андрей VG, спасибо за участие и потраченное драгоценное время, вот то что надо
выбор между датами в сводной таблице (VBA)
 
к сожалению все попробовал
файл во вложении
спасибо за потраченное время
выбор между датами в сводной таблице (VBA)
 
Цитата
JayBhagavan пишет: А ввести признак ИСТИНА/ЛОЖЬ по указанному условию
вы можете подробно описать? буду очень признателен
заранее спасибо за потраченное время
выбор между датами в сводной таблице (VBA)
 
всем спасибо за участие
если as Long, то следующая ошибка:
Сравнение формулы со значениями и по результатам вывод текста из предложеных вариантов
 
вы хотите точное совпадение или приблизительное?
выбор между датами в сводной таблице (VBA)
 
всем доброго времени суток
у меня данные обновляются ежедневно
и у меня есть сводная таблица, в сводной таблице надо показать только данные за последние 3 дня
использую следующий код:
Код
Sub select_last_3_days()
Application.ScreenUpdating = False
Dim StartDate As Date
Dim EndDate As Date

StartDate = Sheets("analytics").Range("AC2").Value
EndDate = Sheets("analytics").Range("AD2").Value
    
    With Worksheets("analytics").PivotTables("PivotTable3").PivotFields("HistoryUpdateDate")
        .ClearAllFilters
        .PivotFilters.Add Type:=xlDateBetween, Value1:=StartDate, Value2:=EndDate
    End With

Application.ScreenUpdating = True
End Sub
 
пишет следующую ошибку


использую: DD.MM.YYYY формат


нужна ваша помощь, есть ли у вас какая-либо идея, как исправить???
заранее спасибо за потраченное драгоценное время
Изменено: hk1209 - 17.12.2014 13:02:18
фильтр сводной таблицы (VBA) Office 2007
 
всем спасибо за участие
сам решил
вот правильный код для 2007:
Код
 ....
With Worksheets("analytics").PivotTables("PivotTable3").PivotFields("CompanyName")
        .ClearAllFilters
        .PivotFilters.Add Type:=xlValueIsLessThan, DataField:=Worksheets("analytics").PivotTables( _
        "PivotTable3").PivotFields("Sum of AvPrice"), Value1:=Sheets("Dashboard").Range("B8").Value
End With   
....
фильтр сводной таблицы (VBA) Office 2007
 
Цитата
Михаил Лебедев пишет: Естью. Если Вы смогли написать код в О 13, то сможете его также написать и в О 07.
спасибо за участие, к сожалению нет
если знал бы то зачем мне создать новую тему и написать Вам всем???
фильтр сводной таблицы (VBA) Office 2007
 
всем доброго времени суток
у меня дома office 2013, но на работе office 2007
вчера вечером написал код для фильтра в сводных таблицах
код работает в офисе 2013, но запускаю в офисе 2007, он не работает
вот часть кода, где не работает:
Код
...     
With Worksheets("analytics").PivotTables("PivotTable3").PivotFields("companyName")
        .ClearAllFilters
        .PivotFilters.Add2 Type:=xlValueIsLessThan, DataField:=Worksheets("analytics").PivotTables( _
        "PivotTable3").PivotFields("Sum of AvPrice"), Value1:=Sheets("Dashboard").Range("B8").Value
End With
 ...
пишет что не поддерживает такого метода


есть у вас какая-либо идея, почему не работает в офисе 2007?
заранее благодарю за потраченное драгоценное время
преобразование горизонтальный массив в вертикальный (VBA)
 
Z, спасибо за участие
если не трудно, то прошу подробно написать, как вы преобразовали?
заранее спасибо  
преобразование горизонтальный массив в вертикальный (VBA)
 
всем доброго времени суток
имею горизонтальный массив и его надо преобразовать в вертикальный (см. влож.)
имею около 30 колонок и более 10 000 строк (ежемесячно увеличивается кол-во строк и колонок)
есть ли идея как это реализовать?
буду очень признателен
заранее спасибо за потраченное время  
Страницы: 1 2 3 4 5 6 7 8 9 10 След.
Наверх