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

Страницы: 1
Application.Onkey с использованием ALT
 
При попытке повесить макрос на ALT + *любая клавиша* (например, Application.OnKey "%a", "Macro1") активируется лента Excel (всплывающие подсказки). На другом ПК сочетания клавиш с alt работали  корректно. Подскажите, как можно решить данную проблему?
Ошибка Applicaton.Onkey при выборе русской раскладки
 
Были перенесены макросы на новый ПК под управлением Windows 10 и с Office 2016. При открытии каждой новой книги используется метод Apllication.Onkey. Каждый раз когда раскладка не соответствует английской Excel выдает ошибку "Method 'OnKey' of Object '_Application' failed". Как можно это можно обойти?

Пример: Application.OnKey "^`", "test"
Размножить таблицу на строки другой таблицы
 
Добрый день!

Имеются две таблицы: первая со списком поставщиков, вторая со списком товаров. Каждый поставщик из первой таблицы осуществляет поставки товаров из второй таблицы. Необходимо свести таблицы так, чтобы итоговая таблица содержала распределение поставляемых товаров по поставщикам. Т.е. необходимо произвести копирование списка товаров вниз по строкам столько раз сколько содрежиться поставщиков в списке первой таблицы и напротив каждой вновь скопированной таблицы проставить поставщика.

Буду благодарен за готовый макрос.
Изменено: neqkeet - 11.11.2019 13:50:44
Окно FileDialog на передний план
 
Есть следующий код, открывающий диалоговое окно выбора файлов.
Проблема в том, что при открытии диалоговое окно не выводится на передний план, а открывается "под окнами Outlook". Приходится каждый раз использовать Alt-tab для выбора файлов.
Каким образом можно вывести окно выбора на передний план?


Код
Sub AttachTenderFiles()
    Dim objOutApp As Object, objMail As Object
    Dim myItem As Outlook.MailItem
    Dim myAttachments As Outlook.Attachments
    
    Set myItem = Application.ActiveInspector.CurrentItem
    Set myAttachments = myItem.Attachments
    With Excel.Application

        Dim oFD As FileDialog
        Dim x, lf As Long
        Set App = Excel.Application
        Set oFD = App.FileDialog(msoFileDialogFilePicker)
        With oFD 
            .AllowMultiSelect = True
            .Title = "Test" 
            .Filters.Clear 
            '.FilterIndex = 2
            .InitialFileName = "%APPDATA%\Microsoft\Windows\Recent\" 
            .InitialView = msoFileDialogViewList
            .oFD.Show
        End With
    End With
     
    Dim sInputFile As Variant
    For Each sInputFile In oFD.SelectedItems
    myAttachments.Add sInputFile, 1
    Next sInputFile
    myAttachments.Add ("P:\Test.xlsx")

End Sub

Переход к письму outlook по гиперссылке в Excel
 
Прошу помочь с кодом.

Необходимо чтобы по клику на гиперссылку происходил переход (его выбор в папке) к письму в Outlook, либо открытие этого письма
В гиперссылке будет зашит EntryId. Сами письма будут находится в архивной папке:
Folders("Архивы").Folders("Inbox").Folders("Ребрендинг")

Код
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

*Код, выбирающий письмо в папке*

End Sub

Пример файла приложил.Temp.xlsx (8.76 КБ)  
Изменено: neqkeet - 29.11.2018 18:22:51
Транспонирование и группировка таблицы
 
Имеется 2 столбца с данными. Первый столбец содержит повторяющиеся значения, второй уникальные. Необходимо преобразовать данные в таблицу, шапка которой будет состоять из значений первого стобца (без дубликатов), а значениями под этими столбцами будут данные из второго столбца. Пример во вложении.
Пустая строка в таблице при использовании функции RangeToHtml
 
При массовой рассылке писем КА использую функцию RangeToHtml by Ron de Bruin.
Проблема в том, что при копировании таблицы в тело письма код добавляет пустую строчку без видимых границ в конец таблицы.
При прорисовке сетки выглядит это примерно так: Скрин

При просмотре HTML кода нашел следующие строчки:
Код
<![if supportMisalignedColumns]>
 <tr height=0 style='display:none'>
  <td width=76 style='width:57pt'></td>
  <td width=216 style='width:162pt'></td>
  <td width=113 style='width:85pt'></td>
  <td width=120 style='width:90pt'></td>
  <td width=56 style='width:42pt'></td>
 </tr>
 <![endif]>
Пытался удалить через Replace, эффекта нет.
Код
RangetoHTML = Replace(RangetoHTML, "<![if supportMisalignedColumns]>*<![endif]>", _
                          "")

Возможно ли каким-либо образом удалить лишнюю строчку?

Стандартный код функции RangeToHtml :
Скрытый текст
Прикрепить несколько вложений через пользовательскую форму
 
Прошу помочь с кодом. Пытаюсь через пользовательскую форму добавить несколько файлов и прикрепить их к новому письму.
Пока получилось сделать рабочий код только с одним файлом.

Вызов формы
Код
Sub Main_macro()
UserForm3.Show
End Sub

Кнопка выбора файлов
Код
Private Sub CommandButton1_Click()
Dim myfilepath As String
myfilepath = Application.GetOpenFilename
TextBox1.Text = myfilepath
End Sub

Кнопка создания письма с выбранным файлом
Код
Private Sub CommandButton2_Click()
mypath = TextBox1.Text
Call send_Test(mypath)
End Sub

Создание письма на основе выбранных файлов
Код
Sub send_Test(ByVal mypath)
Dim objOutApp As Object, objMail As Object, wb As Workbook, mass()
Set objOutApp = CreateObject("Outlook.Application")
Set objMail = objOutApp.CreateItem(0)


    With objMail
    .display
   .attachments.Add (mypath)

  Set objMail = Nothing
End With
Set objOutApp = Nothing
End Sub


Изменено: neqkeet - 03.07.2018 10:54:06
Изменение формата текста в пользовательских формах
 

Пытаюсь сделать дружелюбный в использовании макрос для массовой рассылки писем из excel. Для этих целей была создана пользовательская форма, наподобие такой:

http://pichost.org/images/2018/07/01/ScreenShot2018-07-01at17.32.18.png

Проблема с полем message(тело сообщения), куда можно вставлять только текст без форматирования. Хотелось бы иметь возможность редактировать формат текста (цвет, заливка, размер и т.д.) прямо в форме, используя панель инструментов как в Word. Может кто стакливался с подобным?

Изменено: neqkeet - 01.07.2018 20:18:41
Исключить из фильтра выделенные значения
 
Есть следующая конструкция:
Код
Sub AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA()
    Dim cl As Range, rng As Range, filterValues() As Variant
    Set rng = Selection.SpecialCells(xlCellTypeVisible)
    ReDim filterValues(1 To rng.Count)
    i = 0
    For Each cl In rng
        i = i + 1
        filterValues(i) = cl.Text
    Next cl
    Range("A1").AutoFilter Field:=3, Criteria1:=filterValues, Operator:=xlFilterValues
End Sub

В текущем варианте макрос фильтруетcя по выделенным значениям. А необходимо чтобы он эти значения исключал. Прошу помочь.
Суммирование итогов в динамичной таблице
 
Прошу помочь с макросом.

Есть выгрузка таблицы с продажами товаров по филиалам. По каждому филиалу необходимо посчитать сумму продаж по всем товарам. Так же необходимо найти общум сумму по всем филиалам.
  • Количество товаров в каждом филиале всегда выгружается разное.
  • Количество филиалов тоже динамичное, однако не может быть больше 9
Как вижу логику решения задачи
Результат = Сумма([Предыдущий]Результат.Offset(1,0) : Результат.Offset(-1,0))
Код получился такой:

Код
Set range1 = Range("D3", Range("D65000").End(xlUp).Offset(-1)).SpecialCells(xlCellTypeVisible)
  For Each cell In range1
       cell.Formula = "=SUM(" & [Previous].cell.offset(1,0).Address(False, False) & ":" & cell.Offset(-1, 0).Address(False, False) & ")" 
  Next cell

Непонятно
  • как описать offset(1,0) предыдущей ячейки в цикле. В коде обозначил как "[Previous].cell.offset(1,0).Address(False, False)" для наглядности
  • как с первой ячейкой в цикле
  • Каким образом суммировать общий результат, если количество филиалов всегда разное.
Изменено: neqkeet - 15.12.2017 15:14:46
Объединение двух таблиц в одну
 
Здравствуйте!

Необходимо объединить две таблицы таким образом чтобы каждая строка таблицы1 была продолжением строк таблицы2. Есть ли в Excel встроенный функционал, объединяющий таблицы так, как указанно в примере?  Может быть есть у кого-нибудь готовый макрос?
Изменено: neqkeet - 13.12.2017 16:03:58
Получить дату дня недели по номеру недели
 
Добрый день!

Прошу помочь с кодом. Необходимо получить дату понедельника указанной недели.
Получить номер недели по дате можно:
Код
Format(Date, "ww")
Как сделать обратный процесс?

Например, если это:
  • 41 неделя, то дата будет 09/10/2017
  • 45 неделя, то дата будет 06/11/2017
Номер недели будет вводиться в inputbox.
Изменено: neqkeet - 13.10.2017 14:14:04
Could not load some objects because they are not available on this machine, Plex 2017.2
 
Добрый день!

Excel 2013. При подключении надстройки наблюдаются несколько сообщений об ошибке "Could not load some objects because they are not available on this machine."
Проблема стала возникать при удалении предыдущей версии Office 2010.
Как починить?
Изменено: neqkeet - 22.08.2017 18:03:39
Заполнение и сохранение текущей даты при заполнении строк таблицы
 
Добрый день!

Прошу помочь. Пытаюсь переделать следующий код из поста под себя:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If Intersect(.Cells, Columns(2)) Is Nothing Then Exit Sub
        If Not IsDate(Cells(.Row, 1)) Then Cells(.Row, 1).Value = Date
        If IsEmpty(.Cells) Then Cells(.Row, 1).ClearContents
    End With
End Sub
Файл с примером можно взять по ссылке Пример

Необходимо при внесении данных в столбцы B,C,D и далее... заполнять в столбце A текущую дату, которая бы оставалась фиксированной.
Заполнение даты необходимо так же при заполнении сразу нескольких строк, т.е. в случае вставки данных извне.При использовании кода выше такой возможности нет. Дата проставляется только при построчном заполнении.
В случае изменения\удаления данных из одной, двух и более ячеек строки дата в строке не должна меняться.


Получилось что-то вроде:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If Intersect(.Cells, Range("B:P")) Is Nothing Then Exit Sub
        If Not IsDate(Cells(.Row, 1)) Then Cells(.Row, 1).Value = Date
    End With
End Sub
Однако даты проставляются только при построчном заполнении.

Заранее спасибо.
Последовательная фильтрация по всем элементам фильтра
 
Добрый день!

Прошу помочь с созданием макроса на последовательную фильтрацию по списку критериев фильтра.

Допустим есть следующая таблица:
       A               B            C  
Фрукты Количество Цена
Яблоко 5 10
Апельсин 10 20
Банан 7 15
Апельсин 12 20
Апельсин 620
Банан 8 15
Яблоко 14 10
Банан 7 15
Необходим код, который бы при каждом выполнении выбирал следующий критерий фильтра по столбцу A. (Если возможно, в алфавитном порядке как в выпадающем списке. Т.е. Апельсин -> Банан -> Яблоко.)
В случае если фильтр по столбцу A на момент выполнения кода отсутствует, необходимо выбрать первый критерий из списка.
В случае если на момент запуска кода выбран последний критерий, необходимо выбрать первый критерий. (по кругу)
При выполнении кода таблица может быть отфильтрована по другим столбцам.

Заранее благодарю за помощь. :)  
Назначить макрос на кнопку мыши
 
Приветствую!

Возможно ли привязать макрос к дополнительным кнопкам мыши, например, "mouse5"?
Фильтр по динамическому столбцу через InputBox
 
Код
Sub Filter()
    Dim filterRange As Range, ColNumber
    Set filterRange = Range("A1").CurrentRegion
    ColNumber = InputBox("COLUMN Number", , Selection.Column)
    If Len(ColNumber) Then filterRange.AutoFilter ColNumber, "Test", xlFilterValues
End Sub

Есть следущая конструкция. Макрос фильтрует выбранный через InputBox номер столбца. Возможно ли вместо порядкового номера вводить название столбца? (A, B, AB и тд.)
Изменено: neqkeet - 06.07.2017 23:08:45
Обработка ошибок при фильтрации макросом
 
Приветствую!

Прошу помочь обыграть ошибки в макросе. Всю голову сломал.
Код
Sub FilterMultipleCriteria()
    Dim filterRange As Range,
    Set filterRange = Range("A1")
    Dim ColNumber As Integer
    ColNumber = Val(InputBox("COLUMN Number"))
    On Error GoTo CurrentColumn
    filterRange.AutoFilter Field:=ColNumber, Criteria1:="Test", Operator:=xlFilterValues
       Exit Sub
CurrentColumn:
        filterRange.AutoFilter Field:=Selection.Column, Criteria1:=Test, Operator:=xlFilterValues
End Sub

Макрос фильтруется по значению "Test" по номеру колонки, указанной в InputBox
Код
 ColNumber = Val(InputBox("COLUMN Number"))
    filterRange.AutoFilter Field:=ColNumber, Criteria1:=Test, Operator:=xlFilterValues
В случае отсутствия вводной и нажатию ОК в Inputbox,  макрос фильтруется по столбцу, в котором выделено значение (активная ячейка)
Код
filterRange.AutoFilter Field:=Selection.Column, Criteria1:=Test, Operator:=xlFilterValues
Обходить ошибки при отсутствии вводной и при выходе из макроса помогают следующие строки
Код
 On Error GoTo CurrentColumn <---------
    filterRange.AutoFilter Field:=ColNumber, Criteria1:=Test, Operator:=xlFilterValues
       Exit Sub <---------
CurrentColumn: <---------
        filterRange.AutoFilter Field:=Selection.Column, Criteria1:=Test, Operator:=xlFilterValues
End Sub
Из-за указанных строк ошибок не возникает, но макрос работает не так как надо. При выходе из Inputbox макрос продолжает выполнять строку к которой отправляет On Error
Код
CurrentColumn: 
        filterRange.AutoFilter Field:=Selection.Column, Criteria1:=Test, Operator:=xlFilterValues

Желаемый результат работы макроса
  • При вводе значения в Inputbox - фильтрация таблицы по указанному столбцу
  • При отсутствии ввода значения в Inputbox - фильтрация по столбцу активной ячейки.
  • При выходе из макроса - прекращение работы макроса без манипуляций с таблицей
Изменено: neqkeet - 05.07.2017 20:53:15
Остановить макрос по условию
 
Здравствуйте!

Есть 2 макроса. При запуске макрос1 в определенный момент обращается к макросу2. Часть функционала макроса: фильтрация по критериям в уже отфильтрованной таблице. (см. пример ниже).
Макрос 2 изначально фильтруется по критерию  столбца 3 (наличие >= 1) и после, фильтруется по оставшимся позициям в колонке код.
Проблема в том, что если при первой фильтрации (наличие >= 1) в таблице не остается значений, то макрос выдает ошибку.

Вопрос: Каким образом, в случае ошибки и отсутствия значений в, останавливать макрос2 и продолжать работу макроса 1?

Макрос для фильтрации использую примерно следующий.
Код
 Dim filterValues() As Variant, cl As Range, i As Integer, rng As Range
    Set rng = Range("E2", Cells(Rows.Count, "E").End(xlUp)).SpecialCells(xlCellTypeVisible) ' - Âèäèìûå çàïîëíåííûå ÿ÷åéêè ñòîëáöà E2 äëÿ ôèëüòðàöèè
    ReDim filterValues(1 To rng.Count)
    i = 0
    For Each cl In rng
        i = i + 1
        filterValues(i) = cl.Text
    Next cl
 Range("A1").AutoFilter Field:=5, Criteria1:=filterValues, Operator:=xlFilterValues
ЯблокиКодНаличие
Зеленые12120
Красные45450
Желтые23230
Изменено: neqkeet - 06.02.2017 20:04:42
Автофильтр по выделенному на другом листе диапазону ячеек
 
Добрый день!

Довольно часто сталкиваюсь с необходимостью фильтра столбца таблицы по нескольким критериям. В сети нашел макрос, который преобразует выделенный диапазон ячеек в критерии для фильтра.
Код
Sub FilterMultipleCriteria()
Dim filterRange As Range, filterValues() As Variant, cl As Range, i As Integer
    Set filterRange = Range("A1")
        If Selection.Count > 1 Then
    ReDim filterValues(Selection.SpecialCells(xlCellTypeVisible).Count - 1)
        Else
    ReDim filterValues(Selection.Cells.Count - 1)
    i = 0
    End If
    For Each cl In Selection
    ReDim Preserve filterValues(i)
        filterValues(i) = cl.Text
        i = i + 1
    Next cl

Dim RowNumber As Integer
RowNumber = Val(InputBox("Row Number"))
    filterRange.AutoFilter Field:=RowNumber, Criteria1:=filterValues, Operator:=xlFilterValues
End Sub
Макрос работает не совсем корректно, а именно, неправильно фильтрует по выбранным ячейка если они уже отфильтрованы. Пример прилагаю.
Изменено: neqkeet - 21.11.2016 21:32:29
Макрос для замены формул значениями в выделенном отфильрованном диапазоне
 
Добрый день.

Пытаюсь заменить выделенные отфильрованные ячейки с формулами их значениями посредством макроса.
Нашел пару готовых вариантов, но ни 1 не работает корректно. При их использовании каждая ячейка меняется на значение первой выделенной ячейки.
Код
Sub Replace_by_VAL()   '  в выбранном диапазоне в не скрытых ячейках заменить формулы на значения
    On Error Resume Next
    With ActiveWindow.RangeSelection
    If .Count = 1 Then
        .Cells(1).Select
    Else
        .Cells.SpecialCells(xlCellTypeFormulas).SpecialCells(xlCellTypeVisible).Select
    End If
    End With
    Selection.Value = Selection.Value
End Sub

Так же нашел в статьях данного ресурса следующий макрос.
Код
Sub Formulas_To_Values_Selection()
'преобразование формул в значения в выделенном диапазоне(ах)
    Dim smallrng As Range
    For Each smallrng In Selection.Areas
        smallrng.Value = smallrng.Value
    Next smallrng
End Sub

Однако данный вариант не совсем подходит, т.к. для замены значений нужно выделять каждую ячейку через Ctrl, а их иногда бывает чересчур много.
Прошу помочь с написанием макроса.
Запуск макроса если имя открываемого файла равно
 
Добрый день!

*[Изменено]*
Прошу помочь в написание макроса для auto_open, который бы при каждом открытии новой книги проверял имя файла на содержание в нем определенных слов и запускал бы макрос.

Логика работы следующая:
Если имя открываемого файла содежит = "Экспорт заказов", то выполнить макрос "ABC"
В противном случае ничего не делать.

Из того что нашел в сети ничего не сработало.
Последний найденный вариант:

Код
wbNameOld = ThisWorkbook.Name
wbNameNew = Replace(wbNameOld, "Экспорт заказов, "_")
If wbNameOld <> wbNameNew Then
     Application.Run "GateInfoGroupup"
Else
    'Do Nothing
End If
Изменено: neqkeet - 29.08.2016 12:40:13
Назначение сочетания клавиш "ctrl+\" макросу
 
Добрый день!

Подскажите, как назначить сочетание клавиш "CTRL+\" с клавишей "\", находящейся между левым SHIFT и z?
При использовании
Код
Application.OnKey "^\", "MacroNAME"

получается заставить работать только аналогичную клавишу рядом с Enter (см картинку)
Клавиатура
Изменено: neqkeet - 14.06.2016 16:25:15
Сводные таблицы/построение прогноза
 
Описание заданий в файле.
Нужны пункты 4-7 из блока 1 и блок3.
За дом информацией писать в личку.

https://dropmefiles.com/oR7Rd
Страницы: 1
Наверх