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

Страницы: 1 2 След.
Вставка строки в "Умную таблицу", При заполнении ячейки первой строки.
 
Цитата
KonstantinK написал:
Все так
Т.к. при удалении двух и более строк возникает ошибка не много подредактировал код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
    If Not Intersect(Target.Offset(-1), Me.ListObjects(1).ListColumns(3).Range) Is Nothing Then
        Target.Offset(0, -2).Resize(, 2) = Array(Format(Now, "dd mmmm yyyy"" г."), Format(Now, "hh:nn"))
    End If
ErrorHandler:
    Exit Sub
End Sub
Изменено: KonstantinK - 14.01.2021 15:17:09
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вставка строки в "Умную таблицу", При заполнении ячейки первой строки.
 
Большое спасибо. Все так.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вставка строки в "Умную таблицу", При заполнении ячейки первой строки.
 
Доброго времени суток.
В файле:
Лист2 Таблица2 - все нормально код рабочий. Также нужно и в Таблица1 Лист1.
Вся проблема в том, что на листе 1 заполняем первую строку (столбец 3), а она пустая. Т.Е. последняя заполненная строка rngCell = Nothing.
Событие должно наступать при Worksheet_Change.
Спасибо.
Изменено: KonstantinK - 14.01.2021 12:53:46
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
buchlotnik написал:
Это ВЕСЬ необходимый код, его не надо переписывать
5 из 36 у вас = 376992
а у эксель
Код
=ФАКТР(C5)/ФАКТР(A5)*ФАКТР(C5-A5) = 2,5490342555202E+73 
( 73 это нолики)
Код
=ФАКТР(36)/ФАКТР(5)*ФАКТР(31)

я не вижу в вашей формуле участия аргумента "y" и факториала (x-y)!
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
Андрей VG написал:
а мне с такими
Какими такими? Вы вопрос читали? Куда #17 приложить, в какое место  кода VBA?

Точно, ответ написан семантическими чернилами, я просто не вижу.
18 сообщений в теме, а по делу только одно #11.
Меня модераторы давно бы присекли.
Цитата
Андрей VG написал:
ещё и работать приходиться
работать с таким результатом? Задан вопрос, ответ =0 - это ваш результат.
Цитата
БМВ написал:
Да все тоже самое , но вид с боку
А ваш ответ чем отличается? Я думал вы серьезный человек, результат тот же. Жаль.

Мои вопросы риторические. Здесь место для конкретики, а не для бла-бла.
К стати с оружием аккуратнее. У меня был один "умник", все знал все умел, а на деле полный ноль. Самоутвердится у него  так и не получилось. Ствол в рот, затылок и содержимое черепа на бетоне. 7,62 - хороший калибр.

Здоровья всем.
Ответа на задачу, думаю не получу. Только пустышки.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
buchlotnik написал:
я вам уже развернутую версию в #11 привёл
этот код вы добавили позже, я его не видел. Спасибо, дело пошло.
Но в нем тоже не все так.
Если с аргументами x и y в функциях  понятно, то формула - как аргумент функции  ФакториалXY(x-y) - ?
То и  имя функции, которую мы вызываем, должно быть соответственно Function ФакториалXY(x-y) As Double
В коде ниже функция ФакториалXY(k) не рабочая, т.к. значения X и Y не определены или не связаны с основной функцией Число_сочетаний.
Опять стопор, полумеры?
Код
Function Число_сочетаний(ByVal x As Long, y As Long) As Double
Dim k As Double
k = x - y ' результата не дает
    Число_сочетаний = ФакториалX(x) / ФакториалY(y) / ФакториалXY(k) ' пишем ФакториалXY(k) потому что в "Function ФакториалXY(x-y)" аргумент функции не может быть формулой
End Function
Function ФакториалX(ByVal x As Long) As Double
Dim i As Long
    If x < 1 Then Exit Function
    ФакториалX = 1
    For i = 2 To x
        ФакториалX = ФакториалX * i
    Next
End Function
Function ФакториалY(ByVal y As Long) As Double
Dim i As Long
    If y < 1 Then Exit Function
    ФакториалY = 1
    For i = 2 To y
        ФакториалY = ФакториалY * i
    Next
End Function
Function ФакториалXY(k) As Double ' косяк с вычислением последнего аргумента??????
Dim i As Long
Dim x As Long, y As Long
k = x - y
    If k < 1 Then Exit Function
    ФакториалXY = 1
    For i = 2 To k
        ФакториалXY = ФакториалXY(k) * i ' если функцию записать как ФакториалXY(x-y) тоже нет смысла, т.к. значения X и Y не определены
    Next
End Function
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
buchlotnik написал:
а я о
Тогда поясните мне глупому что такое в вашем коде:
Код
Число_сочетаний=Факториал(n)/Факториал(m)/Факториал(n-m)
"Число_сочетаний" и "Факториал"
В моем, а точнее справки VBA
Код
Факториал = Факториал(n) * (n + 1)
слово "факториал" - это название пользовательской функции, которое может быть любым, При этом обратите внимание что перед знаком равно и после него используется одно и тоже слово. А у вас, извините .....
Поймите правильно, я пытаюсь найти истину решить задачу, может я что-то не понимаю? Но вокруг вашего ответа я истины и решения не вижу.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
buchlotnik написал:
какие ваши доказательства?
Тогда я вообще не понял вы о чем?
Я о VBA? а вы?
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
БМВ написал:
Хм, факториал вычислять рекурсивно, хм,
Очень сильно я не хотел в циклы лезть. Но видимо не обойтись.
Примеров видел массу, но везде как у Вас - только один факториал n! Дальше сложнее.
Т.е. Вы имеете ввиду, что с начала получить через вложенные циклы три переменные:  n!, m! и (n-m)!
Ну и затем простая арифметика:
Число_сочетаний = k/p*h, где k = n!, p = m!  и  h = (n-m)!
Както так?
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
Polkilo написал:
=Факториал(A2)/Факториал(A1)*Факториал(A2-A1)
Вообще не понятно. Вы наверно имели ввиду штатную функцию Excel:
= ФАКТР(C5)/ФАКТР(A5)*ФАКТР(C5-A5)
а я говорю о VBA.
Сразу оговорюсь что записанный макрос:
Код
ActiveCell.FormulaR1C1 = "= FACT(R[-19]C[-1])/FACT(R[-19]C[-3])*FACT(R[-19]C[-1]-R[-19]C[-3])"
тоже не проходит.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Цитата
buchlotnik написал:
Число_сочетаний=Факториал(n)/Факториал(m)/Факториал(n-m)
Не понял? "Число_сочетаний" - название функции, "Факториал" - тоже название функции.
Разве они могут быть одинаковые?

В общем все вариации выдают ошибки, что мне кажется естественно.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Вычисление в пользовательской функции VBA простого факториала n! понятно
Код
Function Факториал(ByVal n As Long) As Double
n = n - 1
    If n = 0 Then
        Факториал = 1
        Exit Function
    End If
Факториал = Факториал(n) * (n + 1)
End Function
а вот если нужно найти скажем число сочетаний:
n!/m!(n-m)!

Самым простым способом было бы записать макрос, но к сожалению функция, как процедура, не работает.
Каким образом можно адаптировать функцию выше не понимаю?
Подскажите кто знает.
Спасибо.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Диалоговое окно пользовательской формы, При закрытии ошибка типа #знач
 
МОЖНО -->
Код
Sub NumbersWords(control As IRibbonControl)
  Dim tmp As String
  tmp = ActiveCell.FormulaR1C1
    ActiveCell.FormulaR1C1 = "=СУММАПРОПИСЬЮ()"
    Application.Dialogs(xlDialogFunctionWizard).Show
        If IsError(ActiveCell) Then ActiveCell.FormulaR1C1 = tmp
End Sub
если искать не причины, а способы!
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Диалоговое окно пользовательской формы, При закрытии ошибка типа #знач
 

Когда закрываем диалоговое окно пользовательской формы и надстройки кнопкой ОК конструкция Application.Dialogs(xlDialogFunctionWizard).Show воспроизводит как ИСТИНА и закрывает окно вставляя в активную ячейку формулу, но если при этом мы не ввели адрес вычисляемой ячейки в поле "n"диалогового окна, то естественно получаем ошибку типа #знач .
Попробовал решить задачу через обработчик ошибок:

Код
Sub NumbersWords(control As IRibbonControl)
  Dim tmp As Variant
  tmp = ActiveCell.FormulaR1C1
  On Error GoTo Error_User
    ActiveCell.FormulaR1C1 = "=СУММАПРОПИСЬЮ()"
    Application.Dialogs(xlDialogFunctionWizard).Show
  
Error_User:
    ActiveCell.FormulaR1C1 = tmp
End Sub

Теперь активная ячейка очищается даже если введен адрес ячейки в поле "n"?
Что-то здесь не так? Подскажите плиз.


На всякий случай приложу файл надстройки.

В файле закоментирована предидущая верся процедуры NumbersWords  

Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вызов функции из надстройки, Проблема с вызовом ползовательской функции.
 
?
Изменено: KonstantinK - 18.07.2020 09:49:53
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вызов функции из надстройки, Проблема с вызовом ползовательской функции.
 
Не много доработал, т.к. все как-то коряво. Если  передумаешь вводить данные в ячейке остается #знач и формула в строке формул.
Так будет по лучше --->
Код
Sub NumbersWords(control As IRibbonControl)
  
  ActiveCell.FormulaR1C1 = "=СУММАПРОПИСЬЮ()"
  If Application.Dialogs(xlDialogFunctionWizard).Show = False Then ActiveCell = ""
    
End Sub
Я бы хотел написать ActiveCell.Delete но формула остается в ячейке пока она активна.
Если кто-нибудь подскажет правильнее буду признателен.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вызов функции из надстройки, Проблема с вызовом ползовательской функции.
 
Цитата
buchlotnik написал:
а вызывал явно
Дааа, конечно, большое человеческое спасибо!
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вызов функции из надстройки, Проблема с вызовом ползовательской функции.
 
у меня есть файл, там формула вычисления сторон треугольника, все прописано в одном файле с поддержкой макросов - без надстройки. Так вот когда я вызываю функцию кнопкой из ленты то открывается диалоговое окно для вставки аргументов. "Моя вкладка" кнопка "Формула S№1"
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Вызов функции из надстройки, Проблема с вызовом ползовательской функции.
 
Доброго времени суток!
Пытаюсь сделать надстройку и сразу ступор. Есть функция - число в текст. Надстройку подключил. При клике на кнопке "Цифры прописью" вкладка "CATHARSIS" функция вставляется в ячейку, а должно открываться диалоговое окно функции для ввода аргументов. По крайней мере так работает алгоритм без надстройки. Помогите разобраться, в чем проблема?
В приложении файл надстройки.
Спасибо.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Действия при выборе пункта списка на Ленте для dropDown как в comboBox?, onChange для dropDown (Ribbon XML)
 
При запуске Excel, по умолчанию, предлагаются заранее определенные пункты списка -> Личная вкладка -> По умолчанию при запуске. Здесь у меня два решения этой задачи с помощью dropDown.
Но теперь при выборе пункта меню возникает ошибка? Не пойму чего не хватает. Результат должен быть как с comboBox --> Лента-> При выборе пункта.
Дело в том, что dropDown не предполагает onChange. А onAction  вызавает ошибку.
Хотя мне кажется, что дело в самом теле процедуры ClickItemID вызываемой onAction.
Ribbon XML:
Код
<?xml version="1.0" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" xmlns:МПИ="http://customui.blogspot.ru">
    <ribbon startFromScratch="false">
      <tabs>
         <tab id="мояВкладка" label="Личная вкладка" insertBeforeMso="TabHome" keytip="ЁЖ">
            <group id="Параметры" label="По умолчанию при запуске">
               <dropDown id="Пример1" 
                  getSelectedItemID="get_id" 
                  label="Пример 1"  
                  screentip="Выбор" 
                  supertip="Необходимо выбрать." 
                  onAction="ClickItemID">
                     <item id="item1" label="Не печатать" imageMso="XDPPClose" />
                     <item id="item2" label="1 копия" imageMso="ChangePrinter" />
                     <item id="item3" label="2 копии" imageMso="ChangePrinter" />
               </dropDown>
               <dropDown id="Пример2" 
                  getSelectedItemID="CallbackDDGetSelectedItemID" 
                  label="Пример 2"  
                  screentip="Выбор" 
                  supertip="Необходимо выбрать." >
                     <item id="item11" label="Не печатать" imageMso="XDPPClose" />
                     <item id="item12" label="1 копия" imageMso="ChangePrinter" />
                     <item id="item13" label="2 копии" imageMso="ChangePrinter" />
               </dropDown>
            </group>
            <group id="Click" label="При выборе пункта">
               <comboBox id="ClickItem"
                  label="Результат при клике"
                  onChange="ClickItemID">
                     <item id="item21" label="Не печатать" imageMso="XDPPClose" />
                     <item id="item22" label="1 копия" imageMso="ChangePrinter" />
                     <item id="item23" label="2 копии" imageMso="ChangePrinter" />                  
               </comboBox>
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>
VBA:
Код
Option Explicit
Public MyRibbon As IRibbonUI
'Пример 1
Sub get_id(control As IRibbonControl, _
                            ByRef ID)
    ID = "item3"
End Sub
'Пример 2
Sub CallbackDDGetSelectedItemID(control As IRibbonControl, _
                            ByRef ID)
        Select Case control.ID
            Case "Пример2"
                ID = "item13"
        End Select
End Sub

Sub ClickItemID(control As IRibbonControl, _
                            Text As String)
    ActiveWorkbook.Worksheets("Лист1").Cells(1, 1) = Text
End Sub
Спасибо.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как получить данные ячейки строки "Итоги" из Умной таблицы
 
Да огромное спасибо!
Я кавычки не ставил.
Решение как всегда на поверхности.
Sanja  - еще раз огромное спасибо !!!
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как получить данные ячейки строки "Итоги" из Умной таблицы
 
В таблицу12 ячейка R12C4 нужно получить данные на основании значений  R12C2 - имя таблицы.


Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как получить данные ячейки строки "Итоги" из Умной таблицы
 
Доброго времени суток!

С конструкцией Таблица12[[#Итоги];[4]] - проблем нет, но не все так просто.

Дело в том, что эта формула стоит в другой умной таблице, где Таблица12 не константа а переменная.
Т.е. имя таблицы из которой я хочу получить данные находится в ячейке с выпадающим списком (списком таблиц). Список получаем через Данные - Проверка данных - Тип данных - Список (источник данных вида =ДВССЫЛ(R12C1&"[Наименование]"))
Другими словами формула, как мне казалось, должна выглядеть так:

R[-2]C[[#Итоги];[4]]  - где R[-2]C - ссылка на ячейку с именем умной таблицы из которой получаем данные итоговой строки.
Так ведь нет, не получается. Как только не пробывал - результата нет.
Формулы ДВССЫЛ(), ВПР(), Т() задачу не решают.

Как получить данные Итогов в моем случае?

Спасибо.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как перренести данные из формы в таблицу, Где ошибка?
 
Вот и всё, как всегда.
Кому интересно - что делает этот код:
Меняем выбранные значения из  Умной таблицы сразу в двух таких таблицах.через форму vba.
Код
Private Sub CommandButton4_Click() 
Dim myTable As Worksheet, myTableA4 As Worksheet 
Dim x As Long
Dim n, myArray  
Dim ListObj As ListObject, ListObjA4 As ListObject 
Dim ListRow As ListRow, ListRowA4 As ListRow
    n = GeneralForm1.ComboBox1.Value 
    Set myTable = Worksheets("Накладная")
    Set myTableA4 = Worksheets("Накладная")
    Set ListObj = myTable.ListObjects("Nakladnaya") 
    Set ListObjA4 = myTableA4.ListObjects("NakladnayaA4")
    myArray = ListObj.DataBodyRange 
        For x = LBound(myArray) To UBound(myArray) 
            Set ListRow = ListObj.ListRows(x)
            Set ListRowA4 = ListObjA4.ListRows(x)
                If n = myArray(x, 2) Then 
                    Call SheetActivate
                         ListRow.Range(2) = GeneralForm1.TextBox3.Value
                         ListRow.Range(3) = GeneralForm1.TextBox2.Value
                         ListRow.Range(4) = GeneralForm1.TextBox1.Value
                         ListRowA4.Range(2) = GeneralForm1.TextBox3.Value
                         ListRowA4.Range(3) = GeneralForm1.TextBox2.Value
                         ListRowA4.Range(4) = GeneralForm1.TextBox1.Value
                End If
        Next x
End Sub

Только здесь корявенько.
Код
                         ListRow.Range(2) = GeneralForm1.TextBox3.Value
                         ListRow.Range(3) = GeneralForm1.TextBox2.Value
                         ListRow.Range(4) = GeneralForm1.TextBox1.Value
                         ListRowA4.Range(2) = GeneralForm1.TextBox3.Value
                         ListRowA4.Range(3) = GeneralForm1.TextBox2.Value
                         ListRowA4.Range(4) = GeneralForm1.TextBox1.Value
Как бы окультурить? Кроме With конечно, с этим проблем нет.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как перренести данные из формы в таблицу, Где ошибка?
 
Цитата
Sanja написал:
массив myArray
Я так понимаю, что myArray это "Лист Накладная- Объект Nakladnaya- Данные таблицы- конкретная строка и столбец"
Соответственно туда я и пытаюсь передать данные при наступлении определённых условий из формы.
Или не так?
Тогда как?
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как перренести данные из формы в таблицу, Где ошибка?
 
Доброго времени соток.
Весь мозг взорвал. Не вижу - в чём проблема?  :(
Код
Private Sub CommandButton4_Click() ' внесение изменений в бланки
Dim myTable As ListObject, myTableA4 As ListObject 
Dim x As Long
Dim n, myArray 
    n = GeneralForm1.ComboBox1.Value 
    Set myTable = Worksheets("Накладная").ListObjects("Nakladnaya") 
    Set myTableA4 = Worksheets("Накладная").ListObjects("NakladnayaA4")
    myArray = myTable.DataBodyRange 
        For x = LBound(myArray) To UBound(myArray) 
            If n = myArray(x, 2) Then 
                Call SheetActivate
                        myArray(x, 2) = GeneralForm1.TextBox3.Value
                        myArray(x, 3) = GeneralForm1.TextBox2.Value
                        myArray(x, 4) = GeneralForm1.TextBox1.Value
            End If
        Next x
End Sub
Почему при нажатии на кнопку ничего не происходит?
Спасибо.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как обратиться к диапазону Умной таблицы?
 
Родил. Кому будет интересно вот код (исключительно с Умной таблицей):
Код
Private Sub ComboBox1_Change()
Dim myTable As ListObject
Dim x As Long
Dim n As String
Dim myArray As Variant
    n = ComboBox1.Text
    Set myTable = ActiveSheet.ListObjects("Таблица2")
    myArray = myTable.DataBodyRange
        For x = LBound(myArray) To UBound(myArray)
            If myArray(x, 2) = n Then
                myTable.DataBodyRange.Rows(x).Select
            End If
        Next x
End Sub
Забыл, есть нюанс:
Данный код будет обрабатывать первую строку - шапку и последнюю - итоги.
Здесь я ни чего не делал, чтобы убрать их, т.к. я их исключил в другом коде см. прикреплённый файл.
Изменено: KonstantinK - 10.02.2019 21:23:41
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как обратиться к диапазону Умной таблицы?
 
Ругается: "Требуется объект"
Код
Private Sub ComboBox1_Change()
Dim n As String
Dim i As Long
Dim lLastRow As Long
'Dim rgResult As Range
Dim rgResult As Object
    lLastRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
    n = ComboBox1.Text
'Set rgResult = Range("B7:B14").Find(n, , xlValues)
Set rgResult = Workbooks("Лист Microsoft Excel1.xlsm").Worksheets("Накладная").ListObjects("Таблица1").ListColumns("Наименование").DataBodyRange.Address
    For i = 7 To lLastRow Step 1
        If rgResult = n Then
            rgResult.Select
    End If
    Next

End Sub
Изменено: KonstantinK - 10.02.2019 17:49:54
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как обратиться к диапазону Умной таблицы?
 
Доброго времени суток!
Как обратиться к диапазону Умной таблицы. Написал код - он рабочий. Но на мой взгляд так писать не совсем верно.
Код
Private Sub ComboBox1_Change()
Dim n As String
Dim i As Long
Dim lLastRow As Long
Dim rgResult As Range
    lLastRow = Cells(Rows.Count, 2).End(xlUp).Row - 1
    n = ComboBox1.Text
Set rgResult = Range("B7:B14").Find(n, , xlValues)

    For i = 7 To lLastRow Step 1
        If rgResult = n Then
            rgResult.Select
    End If
    Next

End Sub
Я имею ввиду диапазон Range("B7:B14").
Дело в том что  у нас есть объект Умная таблица "Таблица1"  внутри которой именованный диапазон/массив "Наименование", а мы обращаемся к колонке активного листа.
А если в колонке "В" над таблицей будут записи? ...
Или колонка "В" не закончится на 14 строке?.... Можно, конечно написать Range("B7:B"), но опять обращаемся к колонке листа.
А что если взять и переместить таблицу внутри листа со смещением? И такое может быть.

Справка VBA так и предлагает обращаться Range("Test")? в моём случае Range("Наименование"), или Application.Goto "Test" - как бы не так??? Ни чего не выходит.
Объявлял объект, присваивал значения - ни чего и ни как?

Кто знает - подскажите.
Спасибо.
-
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Как передать значение формулы FormulaR1C1 в переменную "n"
 
Да ДА!!! Yes!

Большое человеческое спасибо.
Кто хочет — ищет способы, кто не хочет — причины (Сократ)
Страницы: 1 2 След.
Наверх