Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 379 След.
Как при открытии файла не обновлять именованные диапазоны, только формулы
 
Никак. Потому что именованные диапазоны это те же формулы, просто им назначили "удобное имя".
Но Вы можете перед открытием файла открыть его любым архиватором, зайти в папку "xl", открыть файл "workbook.xml" и удалить из него блок "<definedNames>". Все имена будут удалены.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защитить кигу, чтобы нельзя было простым способом получить алгоритмы?
 
Цитата
bedvit написал:
Кстати, откуда 15%?
Это мой личный принцип(основан на когда-то ранее проведенном анализе своих проектов). Здесь может быть и 25 - каждый решает для себя. Для коммерческого продукта на постоянную продажу можно чуть завысить процент(если есть понимание, что хорошо продажи пойдут), т.к. разработать алгоритм защиты надо будет один раз и периодически дорабатывать, а прибыль будет более-менее постоянной и рассчитать её заранее практически нереально.
Все написанное мое личное мнение и никого не призываю делать так же - забыл это в предыдущем сообщении обозначить  :)  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Обработка событий в классе (динамические элементы формы), Обработка событий в классе (динамические элементы формы)
 
Цитата
katep написал:
Никакой ошибки, тупо закрывается excel
вывод прост - отказаться. Потому как это явно проблема где-то "внутри" и решить её нормальными методами вряд ли получится. Page вообще своеобразный элемент.
А зачем Вам вообще все динамически создавать? Неужели нет возможность настроить хотя бы те же Page и Frame заранее?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Обработка событий в классе (динамические элементы формы), Обработка событий в классе (динамические элементы формы)
 
Цитата
katep написал:
если динамически контролов создается несколько
вот это ключевое - там же другой подход должен быть. Нужен массив.  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Обработка событий в классе (динамические элементы формы), Обработка событий в классе (динамические элементы формы)
 
Цитата
katep написал:
есть вложенность контролов на форме
у меня на Frame замечательно работает все. Вряд ли в этом проблема.
Попробуйте в модуле класса записать так:
Код
Option Explicit

Public WithEvents ctrl As MSForms.ListBox
 
Private Sub ctrl_Change()
    MsgBox ctrl.Name & " change"
End Sub

Private Sub ctrl_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox ctrl.Name & " DblClic"
End Sub
'
Public Sub ctrl_Click()
    MsgBox ctrl.Name & " Click"
End Sub
т.е. убрать отсылку на создание самого контрола, а создавать в обычном модуле(не в модуле формы!):
Код
Sub Test()
    Dim lbEvent As clControlEvents

    Set lbEvent = New clControlEvents
    Set lbEvent.ctrl = UserForm1.Controls("Frame1").Controls.Add("Forms.ListBox.1")
    
    lbEvent.ctrl.AddItem "1"
    lbEvent.ctrl.AddItem "2"
    UserForm1.Show
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 20 окт 2020 17:02:23
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Обработка событий в классе (динамические элементы формы), Обработка событий в классе (динамические элементы формы)
 
Цитата
katep написал:
Public Sub CreateListBox(owner As MSForms.Control)
   Set ctrl = owner.Controls.Add("Forms.ListBox.1")
End Sub
это где у Вас такое записано? owner здесь что? Это указание на форму, в которой создавать листбокс? Или что это?
Вы бы приложили свой файл с кодами, чтобы другие не гадали насчет загадочных строк, значение которых приведенными кодами не понять.
Плюс Вы уверены, что элемент ListBox, созданный таким образом вообще содержит такие события? Как Вы эти события в класс добавляли? У Вас хоть одна форма создана в файле вообще?
Изменено: Дмитрий(The_Prist) Щербаков - 20 окт 2020 16:44:05
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Защитить кигу, чтобы нельзя было простым способом получить алгоритмы?
 
Цитата
DopplerEffect написал:
а какие есть сложные методы защиты?
писать алгоритмы не в VBA и формулах листа.
Формулы с их расчетами выносить в функции XLL, если возможно. Если есть более сложные алгоритмы(работа с форматами ячеек и т.п.) - в отдельную библиотеку на языке С.
Но тут нюанс: это не будет уже работать в Google и он-лайн редакторах.
И всегда следует помнить: нет защиты такой, которую не могли бы взломать. Microsoft взламывают :) Так что всегда надо исходить из принципа: затраты на создание защиты не должны превышать 15% от всей стоимости проекта(выгоды от своих алгоритмов). Иначе защита начнет стоить дороже, чем выгода от неё.
Изменено: Дмитрий(The_Prist) Щербаков - 20 окт 2020 13:11:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
[ Закрыто] Вирус или ошибки файла???, подозреваю вирус в файле
 
И опять: столько сообщений, а название темы ни о чем. Правила-то пора бы уже знать. А в таком виде тема кандидат на удаление, вся помощь кандидат на скрытие. И смысл тогда тратить время на помощь, если она все равно в никуда уйдет?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Замена разделителя в csv
 
Цитата
smipeter написал:
решения для изменения разделителя?
чтобы хоть что-то предлагать надо знать где это делать и когда. Это надо сделать при создании файлов? Если да - где они создаются? Если уже созданные файлы - где пример файлов со "стандартным разделителем", ибо стандартным может быть и точка и точка-с-запятой и даже табуляция. Плюс не мешало бы уточнить что именно разделяем: строки или столбцы...А то вдруг...
И следует помнить: что прямая черта не является чем-то стандартным и она перестанет уже считаться разделителем. И надо быть точно уверенным, что прямой черты не может быть в составе простой строки в Ваших CSV.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Как через надстройку отправлять картинки в теле письма ?, Отправка картинки диапазона с листа в теле письма
 
Цитата
Александр написал:
через надстройку ПЛЕКС картиной
через PLEX никак, пока автор надстройки не реализует в ней такую возможность.
В этих статьях есть направление для реализации:
Как отправить письмо из Excel? - есть код, прикрепляющий картинку именно в тело письма. Но для этого диапазон надо будет сначала сохранить в картинку. В этой статье есть готовый код: Как сохранить картинки из листа Excel в картинки JPG
А здесь приведен код вставки таблицы с форматированием: Вставить в письмо Outlook таблицу Excel с форматированием
Это больше похоже на нужное Вам.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Поиск через editBox на ленте
 
Цитата
tchack написал:
как заставить работать поиск
Объявлять процедуры обратного вызова так, как того требует спецификация(в Вашем случае не хватает второго аргумента - text As String):
Код
Public Sub CompactFindR(rc As IRibbonControl, text As String)
    On Error Resume Next
    If ActiveWorkbook Is Nothing Then
        Msg = "Нет открытых книг Excel" & vbNewLine & _
              "Сначала откройте книгу Excel, а потом уже запускайте поиск!"
        MsgBox Msg, vbExclamation, "Поиск по всем листам книги"
        Exit Sub
    End If
    
    txt = text
    If Len(Trim(txt)) Then
        ' MsgBox "Получена команда поиска текста: " & txt, vbInformation
        Dim coll As Collection: Set coll = SearchResults(txt)
        If coll.Count Then
            ReDim res(0 To coll.Count - 1, 0 To 3)
            For I = 1 To coll.Count
                arr = Split(coll(I), sep)
                res(I - 1, 0) = I
                res(I - 1, 1) = arr(1)
                res(I - 1, 2) = arr(0)
                res(I - 1, 3) = arr(2)
            Next I
            CompactFindForm.Caption = "Результаты поиска текста """ & txt & """"
            CompactFindForm.Show
            CompactFindForm.ListBox_Search.list = res
            CompactFindForm.TextBox_count.text = coll.Count
        Else
            Msg = "Поиск завершён" & vbNewLine & _
                  "Текст """ & txt & """ не найден ни на одном из листов файла «" & ActiveWorkbook.name & "»"
            MsgBox Msg, vbInformation, "Поиск по всем листам книги"
        End If
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Добавление оси с подписями на спарклайны
 
Никак не добавить, они это не поддерживают. Можно лишь сделать имитацию, путем оформления ячейки, но это так себе красота.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Почему так работает запрос в Power Query?, Непонятна причина почему запрос по разному обрабатывает данные по условию
 
Цитата
PooHkrd написал:
даже без примера, 95% что это тема
поэтому и хотел увидеть пример, чтобы показать где и в чем именно ошибка :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Перемещение папки из одного места, в другое.
 
А нет ли в папках файлов(или подпапок) с доступом только для чтения? Если есть - переименование папки как раз будет выдавать ошибку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Перемещение папки из одного места, в другое.
 
Цитата
Edgar-by написал:
работа именно с файлами, а не с папками
проверьте еще раз вторую ссылку - дополнил статью работой с папками
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Почему так работает запрос в Power Query?, Непонятна причина почему запрос по разному обрабатывает данные по условию
 
Цитата
hudoi написал:
И формат тоже
тогда
Цитата
Дмитрий(The_Prist) Щербаков написал:
Реально думаете, что без файла только по скрину можно точно что-то сказать?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
VBA. Перевод даты в числовой формат из текстового.
 
Цитата
Юла написал:
переводит в дату
а во что должен, если формат ставите "dd/mm"?
Цитата
Юла написал:
в числовом формате, а не текстовом
ничего не понятно. В каком в итоге формате хотите видеть дату? Числовой предложили - не подходит. Так какой для Вас числовой в итоге? Поставьте вообще общий тогда:
Код
.NumberFormat = ""
и не мешало бы хоть чуть-чуть понимать что находится в arr. Может так текст вообще...
Изменено: Дмитрий(The_Prist) Щербаков - 20 окт 2020 08:50:53
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Почему так работает запрос в Power Query?, Непонятна причина почему запрос по разному обрабатывает данные по условию
 
Реально думаете, что без файла только по скрину можно точно что-то сказать? Может у Вас числа различаются в каком-нибудь 4-м разряде после запятой. Вы это проверяли?

P.S. Название темы ни о чем. Предложите название, отражающее суть проблемы(как того правила требуют) - модераторы придут и заменят. Иначе тему могут закрыть или сообщения с помощью скрыть.
Изменено: Дмитрий(The_Prist) Щербаков - 20 окт 2020 08:47:40
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Полоса прокрутки для CheckBox'ов
 
Цитата
kohet написал:
Но их более 100 штук в каждом случае, и на юзерформу влезает только 24 штуки
в таких случаях делают ListBox со свойством ListStyle = fmListStyleOption и MultiSelect = fmMultiSelectMulti:
Код
    ListBox1.AddItem "aaa"
    ListBox1.AddItem "bbb"
    ListBox1.ListStyle = fmListStyleOption
    ListBox1.MultiSelect = fmMultiSelectMulti
и обрабатывать проще и прокрутка есть сама по себе уже. Если нужно сделать так, чтобы не было заметно, что это ListBox, то можно еще кой-какие свойства подкрутить и будет как будто CheckBox-ы прямо на форме:
Код
    ListBox1.BackColor = Me.BackColor
    ListBox1.BorderStyle = fmBorderStyleNone
    ListBox1.SpecialEffect = fmSpecialEffectFlat
Изменено: Дмитрий(The_Prist) Щербаков - 20 окт 2020 08:40:40
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Скрыть строки имеющих количество выполненных работ равных 0, увеличить скорость работы макроса
 
Как минимум можно попробовать так:
Код
Dim Pos As String
Dim flag As Boolean
 
 
Sub Скрыть_только_ноль()

Dim rr As Range
Application.ScreenUpdating = False
Rows.EntireRow.Hidden = False
 
For i = 31 To Cells(Rows.Count, 1).End(xlUp).Row
    j = 1
    flag = 0
    'If (ActiveSheet.Cells(i, 21).Value = 0) And (ActiveSheet.CheckBoxes(1).Value = 1) Then Rows(i).EntireRow.Hidden = True     ' пробую сразу скрывать
    'If ActiveSheet.Cells(i, 21).Value = 0 Then
    '    'нафига?
    '    Rows(i).EntireRow.Hidden = True     ' пробую сразу скрывать
    'End If
    If ActiveSheet.Cells(i, 21).Value = "" Then
    'Pos = ActiveSheet.Cells(i, 3).Value
        Do While InStr(1, CStr(Cells(i + j, 3)), CStr(Cells(i, 3))) = "1"
            If Cells(i + j, 21) > 0 Then
                flag = 1
                Exit Do
         
            End If
            j = j + 1
        Loop
        If Not flag Then
            If rr Is Nothing Then
                Set rr = Cells(i, 1)
            Else
                Set rr = Union(rr, Cells(i, 1))
            End If
        End If
    End If
Next i

If Not rr Is Nothing Then
    rr.EntireRow.Hidden = True
End If
End Sub
хотя суть цикла Do мне лично не очень понятна. Какова цель макроса? Просто скрыть строки с 0? Может отсюда что-то подойдет? Как удалить строки по условию?
Изменено: Дмитрий(The_Prist) Щербаков - 19 окт 2020 12:41:20
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вынос пользовательских функций в ленту надстройки
 
Цитата
dim284 написал:
Что делать?
Ну во-первых, посмотреть хотя бы на первый вариант предложенного мной кода.
Во-вторых смекалку подключить и использовать тот же label - скорее всего он у Вас и так в точности повторяет имя функции. Если нет - так написать именно так.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вынос пользовательских функций в ленту надстройки
 
Основной посыл:
Код
Private Sub OnDropDownSelected(control As IRibbonControl, selectedId As String, selectedIndex As Integer)
    Select Case control.ID
    Case "DropDownItem1"
        InsertMyFunction "MyFuncs1"
    Case "DropDownItem2"
        InsertMyFunction "MyFuncs2"
    Case "DropDownItem3"
        InsertMyFunction "MyFuncs3"
    End Select
End Sub
Sub InsertMyFunction(sFuncName$)
    Dim sFrml$, bDlgRes As Boolean
    sFrml = ActiveCell.Formula
    ActiveCell.Formula = "=" + sFuncName + "()"
    bDlgRes = Application.Dialogs(450).Show 'xlDialogFunctionWizard
    If bDlgRes = False Then
        ActiveCell.Formula = sFrml
    End If
End Sub

Function MyFuncs1(arg1)

End Function
Function MyFuncs2(arg1)

End Function
Function MyFuncs3(arg1)

End Function
хотя правильнее где-то здесь:
Код
<item id="DropDownItem1" label="Item 1" />
как минимум задавать хотя бы свойство Tag, в котором прописывать непосредственно имя функции в коде VBA. Тогда все будет проще:
Код
<item id="DropDownItem1" label="Item 1" tag="MyFuncs1" />
<item id="DropDownItem2" label="Item 2" tag="MyFuncs2" />
<item id="DropDownItem3" label="Item 3" tag="MyFuncs3" />
коды обратных вызовов:
Код
Private Sub OnDropDownSelected(control As IRibbonControl, selectedId As String, selectedIndex As Integer)
    InsertMyFunction control.Tag
End Sub
Sub InsertMyFunction(sFuncName$)
    Dim sFrml$, bDlgRes As Boolean
    sFrml = ActiveCell.Formula
    ActiveCell.Formula = "=" + sFuncName + "()"
    bDlgRes = Application.Dialogs(450).Show 'xlDialogFunctionWizard
    If bDlgRes = False Then
        ActiveCell.Formula = sFrml
    End If
End Sub

Function MyFuncs1(arg1)

End Function
Function MyFuncs2(arg1)

End Function
Function MyFuncs3(arg1)

End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Формулы массива некорректно вызывают пользовательскую функцию VBA
 
Цитата
БМВ написал:
не сильно сложнее
это как посмотреть. Все зависит от опыта ТС. Ведь показали уже выше несколько примеров - он не смог адаптировать. Значит надо показать самое-самое примитивное под его конкретный пример. Чтобы сам принцип был понятен и усвоен. Я так думаю. Но для расширения кругозора все варианты хороши - на одном потренируется, над другим подумает - глядишь и уляжется информация правильно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Добавление новых символов (графических изображений) к командам
 
Цитата
dim284 написал:
пришлось атрибут "imageMso" поменять на "image"
ну по моей ссылке изначально именно так оно все и выглядит  :)  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Как назначить на кнопку диалогового окна макрос?
 
Тут даже форма не нужна - для двух кнопок и MsgBox хватит. Осваивайте: Работа с диалогами
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Формулы массива некорректно вызывают пользовательскую функцию VBA
 
Цитата
БМВ написал:
Дима, спокойнее
да я спокоен. Мне-то вообще все равно. Но примеров вроде накидали, как сделать подсказали, а тут "Вы формулу массива не используете...". Абыдна, да?  :D
Цитата
БМВ написал:
если для общего случая
специально усложнять не стал и сделал именно под пример ТС. Чтобы он на своем файле понял принцип и уже ПОСЛЕ ЭТОГО двигался дальше, в сторону определения типов и т.п. В своих функциях я делаю все максимально универсально в зависимости от передаваемых параметров. Но ТС-у надо сначала хоть сам изначальный принцип понять. А то он явно совершенно не понял, как именно и в каких случаях надо делать.

P.S. чуть подправил предыдущее сообщение - добавил "извините" :) Так должно быть лучше :D  
Изменено: Дмитрий(The_Prist) Щербаков - 16 окт 2020 10:51:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Формулы массива некорректно вызывают пользовательскую функцию VBA
 
Цитата
Алексей К. написал:
я настаиваю, что Вы просто перестали использовать формулу массива
Вы, извините, часом не охренели с такими выводами? Не можете разобраться - не надо гнать волну на нас, мы Вам все разжевали давно. Где у Вас обработка того, одно значение передается в функцию или массив? Я это показывал на примере(пока Вашего не было). У Вас тупо две функции - одна работает исключительно как формула массива (MyAbs2), а другая исключительно с одним значением MyAbs1. Так чего Вы ожидаете тогда?
Цитата
Алексей К. написал:
И что Вы мне можете предложить в этот раз?) Как получить в C3 правильный результат "2"?
ответ: следовать советам и правильно записать функцию в коде:
Код
Function MyAbs2(i As Range)
  Dim v, res
  If i.Count = 1 Then
    res = Abs(i)
  Else
    ReDim v(1 To 2, 1 To 1)
    v(1, 1) = Abs(i.Cells(1, 1).Value)
    v(2, 1) = Abs(i.Cells(2, 1).Value)
    res = v
  End If
  MyAbs2 = v
End Function
Цитата
Алексей К. написал:
Видимо верно утверждение
нет. Верно утверждение: три раза отмерь, один отрежь. Переведя на тему: сначала разберитесь до конца в теме, потом волну гоните.
Изменено: Дмитрий(The_Prist) Щербаков - 16 окт 2020 10:50:47
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Форматы. Как отобразить строки одной длины визуально одинаковыми в MsgBox
 
Цитата
Jack Famous написал:
зависит ли это от шрифта
очень зависит. Чтобы все выглядело красиво нужен моноширный, который в MsgBox "из коробки" не поддерживается. Да и даже через API вроде нет решения, насколько мне известно. Поэтому как ни крути своя форма будет куда удобнее и практичнее. Делал как-то такое - ни разу не пожалел, т.к. очень многое можно было докрутить в итоге и подвесить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Формулы массива некорректно вызывают пользовательскую функцию VBA
 
Цитата
Алексей К. написал:
я вставляю в формулу массива свою функцию
Цитата
Алексей К. написал:
Никаким ухищрениями мне не удалось заставить формулу массива вызывать мою функцию для каждой ячейки диапазона
это Ваша функция и Вы должны предусмотреть возможность работы внутри формул массива. Какие ухищрения Вы пробовали? Вот для примера:
Код
'функция перемножает значения
'в случае с вводом как формулы массива - для каждой строки будет свое произведение
Function MyMultiple(arg1 As Range, arg2 As Range)
    Dim rr As Range, lr As Long
    Dim res
    
    Debug.Print Application.Caller.Address
    'если только одна ячейка в качестве аргумента - просто делаем нужное действие
    If arg1.Rows.Count = 1 Then
        res = arg1.Cells(1).Value * arg2.Cells(1).Value
    Else
        'мы передали не одну ячейку, а несколько
        'значит нужно делать цикл
        'а в качестве результата еще и массив создавать
        ReDim res(1 To arg1.Rows.Count, 1 To 1)
        For lr = 1 To arg1.Rows.Count
            res(lr, 1) = arg1.Cells(lr, 1).Value * arg2.Cells(lr, 1).Value
        Next
    End If
    MyMultiple = res
End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Запрет вставлять ячейки при копировании, вставить только значения
 
Дополните чутка:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.CutCopyMode Then
        Dim rr As Range
        Set rr = Target
        rr.Copy
         
        With Application
            .EnableEvents = 0
            .Undo
            Target.PasteSpecial xlPasteValues
            .EnableEvents = 1
        End With
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 379 След.
Наверх