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

Страницы: 1 2 3 4 5 След.
Тонкости отправки письма через Outlook с кнопками голосования, Если в параметрах сообщения, в копии, есть адреса почты: есть ли решение отправки кнопок согласования ТОЛЬКО основному получателю
 
МатросНаЗебре
Спасибо! Это безальтернативный подход? (а я чего-то этот вариант и не рассматривал))))
Тонкости отправки письма через Outlook с кнопками голосования, Если в параметрах сообщения, в копии, есть адреса почты: есть ли решение отправки кнопок согласования ТОЛЬКО основному получателю
 
Уважаемые профессионалы! Прошу помощи в решении вопроса:
при формировании параметров отправки письма из Excel через Outlook, в сообщение прикрепляются кнопки согласования;
однако, когда в копию письма приходится вставлять адреса получателей, то им тоже приходят кнопки согласования письма.
Каким образом в коде прописать, чтобы указанные кнопки отправлялись (ну или были бы активны) только основному получателю
Код
Function SendEmailUsingOutlook(ByVal Email$, ByVal MailText$, Optional ByVal Subject$, Optional ByVal rootFile$, _
    Optional ByVal AttachFilename$, Optional ByVal FileName$, Optional ByVal sCbt$, Optional ByVal sCC$) As Boolean
    ' функция производит отправку письма с заданной темой и текстом на адрес Email
    ' с почтового ящика, настроенного в Outlook для отправки писем "по-умолчанию"
    ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл (файлы)
    Dim i As Long, arr, aX1, aX2
    Dim strHTML As String
    
    On Error Resume Next: Err.Clear
    Dim OA As Object
    Dim OMail As Object
    
    Set OA = CreateObject("Outlook.Application")
    If OA Is Nothing Then MsgBox "Не удалось запустить OUTLOOK для отправки почты", vbCritical: Exit Function
    Set OMail = OA.CreateItem(0) 'создаем новое сообщение
 
    With OMail
        .To = Email$: .Subject = Subject$: .Body = MailText$
        If sCC$ <> "" Then .CC = sCC$
        
        .Importance = 2 ' 2 - важное, 1 - обычное, 0 - низкое
        .Attachments.Add rootFile
        ' Добавляем кнопки .VotingOptions в тему и гиперссылку на файл в текст письма
        .VotingOptions = sCbt$

        strHTML = "ДЛЯ СОГЛАСОВАНИЯ ИЛИ ОТКЛОНЕНИЯ ДОКУМЕНТА" & "<br>" & "ВОСПОЛЬЗУЙТЕСЬ КНОПКАМИ В ЗАГОЛОВКЕ СООБЩЕНИЯ"
        .HTMLBody = "<p>" & .Body & "</p>" & _
            "<a href=""" & rootFile & """ >" & FileName & "</a>" & _
            "<br><br>" & strHTML

        For i = 1 To 100000: DoEvents: Next    ' без паузы не отправляются письма без вложений
        Err.Clear: .Send
        SendEmailUsingOutlook = Err = 0
    End With
    Set OA = Nothing
    
End Function
Изменено: gena10111 - 07.02.2024 12:41:01 (Вставка кода из Excel)
Сформировать массив имен ключей коллекции, Как сформировать массив имен ключей коллекции, если элементами коллекции являются массивы
 
Hugo натолкнул меня на интересную мысль, что я и воплотил в коде) Файл прилагаю, может кому пригодится что?) В итоге, при добавлении массива к коллекции, в этот массив первым (нулевым) значением я поставил сам ключ. Ну а роль ключа в коллекции - это для отсечки уникальных элементов. Вытащить потом ключи стало без проблем). Всем спасибо, но если есть еще мысли, буду очень рад их оценить!
Код
Option Explicit
 
Sub test1()
    Dim r As Range, rCell As Range, s As String
    Dim arr1, arr2, arrShData, j As Long
    Dim colShapes As New Collection, Item As Variant, aMistake As String
     
    Dim arrKeysCol
     
    Set r = ThisWorkbook.Worksheets("TEST").Range("A2:A13")
    For Each rCell In r
        s = IIf(s = "", rCell.Value & "|" & rCell.Offset(0, 1).Value & "|" & rCell.Offset(0, 2).Value & "|" & rCell.Offset(0, 3).Value, _
            s & "#" & rCell.Value & "|" & rCell.Offset(0, 1).Value & "|" & rCell.Offset(0, 2).Value & "|" & rCell.Offset(0, 3).Value)
    Next
     
    Key = "TEST"
    arr1 = Split(s, "#")
    For j = 0 To UBound(arr1)
        arr2 = Split(CStr(arr1(j)), "|")
        On Error Resume Next
        colShapes.Add arr2, CStr(arr2(0))
        
        If Err.Number > 0 Then _
            aMistake = IIf(aMistake = "", CStr(arr2(0)), aMistake & "|" & CStr(arr2(0))): Err.Clear
            
        Erase arr2
    Next j
     
    ReDim arrKeysCol(colShapes.Count - 1)
    j = 0
    For Each Item In colShapes
        arrKeysCol(j) = Item(0)
        j = j + 1
    Next
     
End Sub
Сформировать массив имен ключей коллекции, Как сформировать массив имен ключей коллекции, если элементами коллекции являются массивы
 
Hugo, благодарю за участие и добрый совет! Обмозгую и прицеплю в словарь ключи и элементы, ведь словарь живет до закрытия книги)) Ничего его не берет, пока не очистишь или не удалишь) Спасибо!
Сформировать массив имен ключей коллекции, Как сформировать массив имен ключей коллекции, если элементами коллекции являются массивы
 
Hugo, спасибо)! Это выход наверное единственно верный!)

Кстати, Вы правы насчет кол-ва элементов в массиве, их не 34, а 13, из них уникальных - 9.
Прикладываю файл без ошибки, может кто и решит первоначальный вопрос!)
Изменено: gena10111 - 21.09.2023 19:54:20 (Устранение ошибки в файле)
Сформировать массив имен ключей коллекции, Как сформировать массив имен ключей коллекции, если элементами коллекции являются массивы
 
Или отказаться от коллекции как элемента словаря вообще?) Использовать просто массив, а ключ коллекции перенести и сделать ключом словаря? Да)?

для информации: схема файла Visio (один Лист) может содержать массу шейпов (фигур) со своими атрибутами, еще есть и вложенные уровни) чтобы провести рецензию файла приходится прибегать к разным вариантам, еще и скорость выполнения задачи имеет значение!)
Изменено: gena10111 - 21.09.2023 19:16:27 (Добавление сведений)
Сформировать массив имен ключей коллекции, Как сформировать массив имен ключей коллекции, если элементами коллекции являются массивы
 
Sanja, в основной программе эта коллекция является одним из элементов словаря, и когда я работаю с данными созданных словарей для заполнения форм или табличных данных, приходится доставать данные разными путями и выдумками)). Но тут чего-то туплю наверное, никак не пойму, массив значений вижу, а извлечь его нужно по названию фигуры...)). Программа контактирует с Visio...
Сформировать массив имен ключей коллекции, Как сформировать массив имен ключей коллекции, если элементами коллекции являются массивы
 
Уважаемые форумчане!
В прилагаемом файле представленной таблице есть список фигур и какие-то данные в соответвующих 1-3 столбцах.
В редакторе VBE, в Module1, я написал макрос "test1", в котором данные из диапазона собираются по определенным правилам (разделителям) в массив. Затем массив разбирается как бы по строкам таблицы, и формируется коллекция "colShapes" с ключами-названиями фигур!!.
Также, в случае обнаружения дубля записи, формируется переменная aMistake, с перечнем дублированных названий фигур.

Вопрос заключается в том, каким образом в массив "arrKeysCol" разместить все ключи коллекции и далее, по работе цикла ключей массива, искать уже соответствующие им элементы коллекции?
Поиск значения по 2-м критериям: один из которых необычный, Поиск значения в таблице данных по 2-м критериям: один указан явно, другой критерий относится к диапазону из текстового значения ячейки
 
Спасибо огромное! Максим В., формула массива - работает отлично! Всё просто, когда знаешь))!
Поиск значения по 2-м критериям: один из которых необычный, Поиск значения в таблице данных по 2-м критериям: один указан явно, другой критерий относится к диапазону из текстового значения ячейки
 
Уважаемые форумчане, в прилагаемом файле:

Сверху слева таблица со значениями в зависимости от интервала температур и номера Варианта.
В ячейке рядом с "Температура:" вручную вписывается значение температуры;
В ячейке рядом с "Вариант:" в выпадающем списке выбирается номер Варианта;
Под таблицей, с помощью формул я извлек интервалы температур "От" и "До";

В ячейке рядом с "ИСКОМОЕ ЗНАЧЕНИЕ:" выводится результат поиска нужного значения по критериям Температуры и номера Варианта;
В ячейках рядом с "Строка:" и "Столбец:" - вспомогательные формулы поиска строки и столбца с нужным значением.

Не получается скомпоновать формулу ИСКОМОГО ЗНАЧЕНИЯ из всех вспомогательных формул.
Кроме того, здесь представлена скромная таблица всего из 4-х вариантов и 3-х диапазонов температур (а и тех и других значений может быть очень много).

Просьба:
Помогите с формулой (вероятно с помощью применения массивов можно решить, но я не понимаю как)). Макросами это очень просто делается, но задача - обойтись без них((
Настраиваемый импорт из Excel в Visio, Не получается импортировать именованные диапазоны таблиц в чистый файл Visio
 
acer8743, спасибо за пояснение и макрос, огромное спасибо!
Я опробовал применение Вашего, кода: всё в 5 раз быстрее закачалось в Visio, однако на Листе "Material_V" в 1-м столбце в ячейке "А2" есть наименование "Units". Оно не отображается в списке импортированной таблицы в Visio. Также, не будут отображаться данные, если, например, изменить 2000 на 2000-1 и т.д.
В моем решении выше, которое выполняется подольше, такого дефекта нет, и все данные импортируются отлично. Видимо, проблема кроется в методе импорта внешних данных (т.е. в параметре "connectionIDORString" при добавлении объекта DataRecordsets). В моем примере решения, с помощью макро рекордера я использовал настраиваемый импорт из файла Excel. В Вашем коде dataConnection.ConnectionString содержит запись импорта из "Другого источника данных OLEDB или ODBC", как я понял. Но всё равно еще раз благодарю за полезный отклик!
Изменено: gena10111 - 26.02.2023 21:10:54
Настраиваемый импорт из Excel в Visio, Не получается импортировать именованные диапазоны таблиц в чистый файл Visio
 
Судя по количеству просмотров, тема актуальна). Тему можно закрывать, так как, благодаря Туманову Геннадию Евгеньевичу, удалось разобраться и решить задачу. Для тех, кому интересно, загружаю файл с решением
Настраиваемый импорт из Excel в Visio, Не получается импортировать именованные диапазоны таблиц в чистый файл Visio
 
Уважаемые профессионалы, прошу помощи в решении вопроса импорта таблиц из файла Excel в файл Visio, с помощью VBA!
Прилагаемый файл "Связать_с_Visio.xlsm" содержит процедуру выбора файла Excel (выбираю файл "Тест_Для_Visio.xlsx"), где содержатся 2 таблицы как именованные диапазоны. Производится считывание наименований Листов и диапазонов таблиц в них: эти данные помещаются во вспомогательную таблицу Листа "Spiski" файла "Связать_с_Visio.xlsm". Далее в диалоговом окно выбирается файл Visio ("Рабочий.vsdx"), в который предполагается вставить связь с этими таблицами Excel.
С помощью макро рекордера в Visio я записал процесс создания связи с файлом Excel, попытался реализовать код в файле "Связать_с_Visio.xlsm", но, к сожалению, задача не решается.
Буду очень признателен в указании на ошибку/ошибки, допущенные мной, а также в помощи решения задачи. Не могу загрузить в тему файл Visio "Рабочий" по правилам форума, но он совершенно пустой, создан и сохранен для задачи на компьютере. Благодарю заранее всех, кто откликнется!
сложение по 3 критериям
 
Пример отображения бы представили, т.е. что нужно то?
Вам нужны уникальные значения, отбор машин по дате, еще что-то? Из примера не понятно((
Изменено: gena10111 - 24.02.2022 14:16:45 (дополнение)
Ошибка 380 при формировании списка Листбокса
 
Спасибо всем огромное!
Ошибка 380 при формировании списка Листбокса
 
DANIKOLA, Извините, а можно на примере с моим файлом снять указанные ограничения на количество столбцов)!
Ошибка 380 при формировании списка Листбокса
 
Огромное спасибо Вам, vikttur! Советуете на будущее так заполнять Листбоксы? То есть, указанный баг возможен, например, при работе файла на другом ПК?  
Ошибка 380 при формировании списка Листбокса
 
Код
Private Sub UserForm_Activate()
    Me.lstbox_Tab.Clear
    With Me.lstbox_Tab
        .AddItem ""
        .List(0, 0) = "04"
        .List(0, 1) = ":"
        .List(0, 2) = "МВ"
        .List(0, 3) = "21.12.2021"
        .List(0, 4) = "21.12.2021"
        .List(0, 5) = "22"
        .List(0, 6) = ":"
        .List(0, 7) = "МВ"
        .List(0, 8) = "21.12.2021"
        .List(0, 9) = "21.12.2021"
        .List(0, 10) = "22"
        .List(0, 11) = ":"
        .List(0, 12) = "МВ"
        .List(0, 13) = "21.12.2021"
        .List(0, 14) = "21.12.2021"
        .List(0, 15) = "22"
        .List(0, 16) = ":"
        .List(0, 17) = "МВ"
        .List(0, 18) = "21.12.2021"
        .List(0, 19) = "21.12.2021"
        .List(0, 20) = "22"
    End With
End Sub
В прилагаемом файле при загрузке формы хочу загрузить Листбокс указанными данными. На этапе загрузки .List(0, 10) = "22" выскакивает ошибка, и далее листбокс не загружается данными. Прошу помочь в решении, где я туплю? Спасибо всем заранее
Табуляция между элементами activeX на рабочем Листе
 
Огромное спасибо, БМВ! Вы мне очень помогли. С классами не силен вообще, поэтому решение вполне устраивает!
Изменено: gena10111 - 16.03.2021 20:36:13 (Дополнение)
Табуляция между элементами activeX на рабочем Листе
 
Уважаемые профессионалы, прошу ответить на такой вопрос:
В прилагаемом файле, на Листе размещены 4 текстбокса (элементы ActiveX). После ввода Слагаемых 1-3 в соответствующие 3 текстбокса (целые числа), в 4-м появляется их сумма.
Вопрос: возможно ли после ввода значения в любой текстбокс, после нажатия на Enter или Tab, обеспечить аналогию применения табуляции (TabOrder), как это делается в UserForm??? Или же это просто невозможно в моем случае? Спасибо заранее за добрые советы и ответы.
Использование пользовательского формата для отображения действительного числа в требуемом виде, Вывести в листбокс значения
 
Спасибо всем еще раз! Отдельным кодом у меня в основной программе написано, так как в процессе работы к нему часто идет обращение при обновлении данных, а также при загрузке формы. Но главное - это вами предложенное решение: реально я притупился за день работы: в карантине день не нормирован))).
Использование пользовательского формата для отображения действительного числа в требуемом виде, Вывести в листбокс значения
 
БМВ и Ігор Гончаренко написали, я сначала не понял))
Но потом нашел решение проблемы с визуализацией нужного значения 0,05

Перед a-b поставил Round, и получилось Round(a - b, 2) . А я сломал голову))! Спасибо всем, выкладываю свой файл. Тему можно закрывать...
Использование пользовательского формата для отображения действительного числа в требуемом виде, Вывести в листбокс значения
 
Простите, ошибку машинально сделал, конечно 0,05)
Тему прошу поменять на "формат чисел при вычитании" - так лучше будет?
Извините, если что, просто заблудился в 3-х соснах, а понять не могу, сколько ни бьюсь)
Использование пользовательского формата для отображения действительного числа в требуемом виде, Вывести в листбокс значения
 
Уважаемые знатоки VBA!
В моём файле есть Data Table, в которой столбцы 4 и 5 имеют числовой формат с 2-мя десятичными знаками после запятой.
Нажатием на кнопку "Показать свободную площадь" загружается форма UserForm1, в которой Листбокс заполняется именами компаний и разностью значений Общих и Задействованных площадей этих компаний.
Я попал в тупик: ну никак не могу понять, почему при вычитании из 10,00 значения 9,95 я не могу получить в листбоксе заветное 0,5, а получается абракадабра!

объявлял переменные a и b как Double, затем пытался присвоить из разницу при заполнении листбокса, но результат тот же(( Чего-то не так, а понять не могу. Уже и через String делал, и менял запятые на точки, с помощью функции преобразовывал и вычитал: всё равно не получается. Туплю, а где - не пойму...

Помогите решить и подскажите, что с форматированием (или ещё с чем) не так? Заранее благодарен!
Подсчет количества знаков в каждой ячейке выделения и замена содержимого по условию, макрос
 
Код
    Dim i As Long, j As Long
    i = 8
    For j = 8 To 10
        If Len(Sheets(1).Cells(i, 5)) <> 8 Then
            Sheets(1).Cells(i, 17) = CStr("0" & Sheets(1).Cells(i, 5))
            Sheets(1).Cells(i, 5) = Sheets(1).Cells(i, 17)
        Else
            Sheets(1).Cells(i, 17) = CStr(Sheets(1).Cells(i, 5))
        End If
        i = i + 1
    Next j

В 17 столбце всё нормально!
Вам надо чтобы в самой таблице текст артикула менялся?
Тогда вот так
Я бы еще в конце добавил очистку столбца 17

файл удален по просьбе автора темы [МОДЕРАТОР]
Изменено: gena10111 - 20.09.2019 11:18:58 (Добавление комментария)
Подсчет количества знаков в каждой ячейке выделения и замена содержимого по условию, макрос
 
Код
    Dim i As Long, j As Long
    i = 8
    For j = 8 To 10
        If Len(Sheets(1).Cells(i, 5)) <> 8 Then
            Sheets(1).Cells(i, 17) = CStr("0" & Sheets(1).Cells(i, 5))
        Else
            Sheets(1).Cells(i, 17) = CStr(Sheets(1).Cells(i, 5))
        End If
        i = i + 1
    Next j
файл удален по просьбе автора темы [МОДЕРАТОР]
Изменено: gena10111 - 20.09.2019 11:19:09 (Добавление файла)
Добавить список классификаторов в макрос, есть макрос, удалящий строки по условию
 
или в любом месте:
классиф =классиф  & ", " & "03022/0"
Поиск и замена значений в массивах данных
 

Уважаемые специалисты!

Данный файл содержит 25 Листов: из них Лист "Объекты" - видимый;

остальные 24 Листа - xlSheetVeryHidden.

На этих 24 Листах есть таблицы с данными, с разным кол-вом строк; кроме того

Листы 2-13 содержат таблицы из 2-х столбцов (нам нужен столбец 2),

а Листы 14-25 содержат таблицы из 5-ти столбцов (нам нужен столбец 5):

эти нужные столбцы и содержат текст, который надо проверить и (возможно) заменить на другой текст.

На Листе "Объекты", в 1-м столбце таблицы красным шрифтом представлены все встречающиеся в таблицах Листов 2-25, в столбцах 2 и 5, тексты.

Во 2-м столбце черным шрифтом указаны названия, на которые надо поменять значения столбца 1, в случае их присутствия в Листах 2-25.

В книге содержится макрос на основе работы циклов For...Next.

Но когда уникальных названий не 6 (как в данном примере), а 500-800, когда в таблицах Листов строк не 10-30, а 1500 например; да и Листов может быть чуть больше -

то мой макрос будет год решать задачу)))) если вообще не зависнет всё.

С массивами не очень разобрался пока, но знаю, что с их помощью данная задача решается очень быстро.

Поэтому, прошу помочь в решении вопроса поиска и замены по сценарию этой задачи. Спасибо!

На текущий момент макрос протестирован на том же количестве Листов, но в каждом Листе записей от 100 до 250, а проверяемых на совпадение строк с текстом - 1834. Скорость выполнения макроса составила - 18 секунд.

Изменено: gena10111 - 19.09.2019 12:54:01 (Добавление комментария о проверке существующего в файле макроса)
Выбор минимальных и максимальных значений из массивов
 
Sanja, спасибо! Не думал, что таким коротким макросом можно решить вот такую задачу!!!
Правда, сложновато для меня, но попытаюсь разобраться))
Выбор минимальных и максимальных значений из массивов
 
Код
Function mnmx(i As Double, v As Double, t As Double, s As Double, d As Double, f As Double, mn As Double, mx As Double)
' фукнкция поиска минимальных и максимальных значений из массива, _
состоящего из 6-ти элементов

Dim a(), b()
Dim u As Integer, raz As Integer

a = Array(i, v, t, s, d, f)
ReDim b(UBound(a))
For u = 0 To UBound(a)
    If (a(u) <> 0) Then
        b(raz) = a(u)
        raz = raz + 1
    End If
Next
ReDim Preserve b(raz)
mx = Application.Max(b)
mn = Application.Min(b)
End Function
Вот такую функцию я использовал при поиске мин и макс значений из переданных от макроса 6-ти переменных, а с массивами что -то никак не получается.

Андрей VG, спасибо! Я в Power Query вообще ничего не смыслю))
Однако, просьба в макросе и функции не просто так обращена: я использую выборку данных из другого файла, где необходимо из большой (не сводной) таблицы выдернуть значения. Просто мой пример имеет примитивный вид для решения конкретной задачи.
Изменено: gena10111 - 01.08.2019 22:30:44 (Добавление комментария)
Страницы: 1 2 3 4 5 След.
Наверх