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

Страницы: 1 2 След.
Не работает УФ заданное макросом
 
Всем привет.

Ситуация такая:

макрорекрдером записал форматирование:

Код
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=ДЛСТР(СЖПРОБЕЛЫ(H6))=0"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .Pattern = xlNone
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False


Правило применяется, формула вписана, но... не работает :) Однако, если делать в той же ячейке УФ вручную, то тогда отображается уже не формула, а "Ячейка содержит пустое значение", - работает.

На английском формулу тоже писал - не работает.

Может есть у кого идеи, куда копать?
Применение условного форматирования к диапазонам на разных листах
 
Приветствую всех.

Ситуация: на одном листе сделал условное форматирование по своим значениям, хочу указать в применении к ячейкам ещё диапазон другого листа этой же книги, но Эксель просто сбрасывает такой диапазон.

Эксель на русском, диапазоны разделяю точкой с запятой.

Подскажите, пожалуйста, можно ли вообще привязать диапазон с другого листа? То есть чтобы правило применялось, допустим, к диапазону А1:А100, и диапазону А1:А100 листа 1? То есть хочу что-то типа А1:А100;1!А1:А100
Появление нового источника данных при выборе данных для сводной таблицы
 
Всем привет.

Создал сводную таблицу, которая тянет данные из SharePoint. Однако, при её обновлении вручную и по "обновить всё" данные не обновляются (то есть пишет, что процесс идёт, а данные не меняются). Таблица обновляется только если заново выбирать источник данных.

Но в источниках данных при каждом запросе появляется дубликат. То есть я тащу данные со Stock(3), но при каждом обновлении сводной - читай "изменении источника данных" появляются дубли как на скрине.

1. Как сделать один источник данных?
2. Как заставить сводную обновляться с этого одного источника данных?
Изменено: Breathe of fate - 21.02.2022 21:24:35
Узнать имя книги откуда была запущена процедура
 
Всем привет.

Столкнулся с необходимостью узнать источник запуска макроса. Понимаю, что нужно делать через Application.Caller, но что-то у меня ошибка вылезает.
Код
Sub NextIfNoAction()

Dim Wbn As String
Wbn = Application.Caller.Worksheet.Parent.Name
If Wbn = "Update" Then
Call UserForm2.CommandButton1_Click
Else
End If

End Sub
Можете подсказать, где собака зарыта?
Экспорт таблицы в презентацию и её сохранение в папку
 
Добрый день.

Суть: у меня есть код в книге Эксель - он создаёт новый файлик презентации и копирует туда таблицу.

Цель: сделать выгрузку в презентацию незаметной для пользователя и складывать презентации в указанную папку. То есть должен открыться новый файл презентации, в него скопировались данные, презентация сохранилась в папку, PowerPoint закрылся. Будет идеально, если открываться, сохраняться и закрываться будет без участия юзера.

Сам код:

Код
Sub CopyRangeToPresentation()

'Шаг 1: Объявляем переменные
Dim PP As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim SlideTitle As String

'Шаг 2: Откройте PowerPoint и создайте новую презентацию
Set PP = New PowerPoint.Application
Set PPPres = PP.Presentations.Add
PP.Visible = True

'Шаг 3: Добавьте новый слайд как слайд 1 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(1, ppLayoutTitleOnly)
PPSlide.Select

'Шаг 4: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D515:AR568").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture

'Шаг 5: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

'Шаг 6: Добавьте новый слайд как слайд 2 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(2, ppLayoutTitleOnly)
PPSlide.Select

'Шаг 7: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D576:AR629").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture

'Шаг 8: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

'Шаг 9: Добавьте новый слайд как слайд 3 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(3, ppLayoutTitleOnly)
PPSlide.Select

'Шаг 10: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D637:AR690").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture

'Шаг 11: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

'Шаг 12: Добавьте новый слайд как слайд 4 и установите на него фокус
Set PPSlide = PPPres.Slides.Add(4, ppLayoutTitleOnly)
PPSlide.Select

'Шаг 13: Скопируйте диапазон, как изображение
Sheets("Statistics").Range("D698:AR751").CopyPicture _
Appearance:=xlScreen, Format:=xlPicture

'Шаг 14: Вставьте картинку и отрегулируйте ее положение
PPSlide.Shapes.Paste.Select
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

'Шаг 15: Очистка памяти

Presentation.SaveAs ThisWorkbook.Path & "\Programm Data\LSS\" & ThisWorkbook.Name & ".pptx"

End Sub


Последняя строка - мои попытки сохранить презентацию с именем в папку :)
Поиск всех значений (не только первое совпадение) в цикле
 
Всем привет! :)
Прошу помощи.

Есть вот такой код:
Код
Sub trytryrty()  
  
For i = 1 To ThisWorkbook.Sheets("Constructor").Cells(Rows.Count, 3).End(xlUp).Row  
    For j = 1 To ThisWorkbook.Sheets.Count  
        If ThisWorkbook.Sheets("Constructor").Cells(i, 3).Value = Sheets(j).Name Then  
            ThisWorkbook.Sheets("Constructor").Range(Cells(i, 3).Offset(1, 20), Cells(i, 3).Offset(1, 36)).Copy  
            Set aaa = ThisWorkbook.Sheets("Constructor").Cells(i, 3).Offset(0, -1)  
            Set bbb = ThisWorkbook.Sheets(j).Range("AH1:AI1000").Find(aaa, , xlValues, xlWhole).Offset(0, -30)  
            Set ccc = ThisWorkbook.Sheets(j).Columns(bbb.Column).Find("18", , xlValues, xlWhole).Offset(0, 2)  
        End If  
    Next  
Next  
  
End Sub  

Подскажите, пожалуйста, как мне сделать поиск ВСЕХ значений, указанных здесь:
Код
Set ccc = ThisWorkbook.Sheets(j).Columns(bbb.Column).Find("18", , xlValues, xlWhole).Offset(0, 2)

Find ищет только первое вхождение, а мне нужно, чтобы нашёл каждое. По идее .FindNext должен работать, но у меня не получается.

Может быть есть у кого светлые идеи? :)
Изменено: vikttur - 21.12.2021 12:36:04
Заливка диапазона ячеек по условию
 
Всем привет.

Не могу допетрить. Ячейки выделяются условным форматированием двумя отдельными правилами, например, если в ячейке "4" и "OK".
Как совместить вместе? =ИЛИ(4;"OK") не срабатывает. Форматирование применяется для диапазона.
Изменено: vikttur - 01.12.2021 11:43:05
Поиск числового значения в определённой строке в найденных по условию листах
 
Всем привет.

Есть вот такой простенький макрос:
Код
Sub tost7()
For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row
    For j = 1 To ThisWorkbook.Sheets.Count
        If Cells(i, 2).Value = Sheets(j).Name And Sheets(j).Name <> ActiveSheet.Name Then
                Sheets(j).Cells(1, 1).Value = "!"
        End If
    Next
Next
End Sub

Как мне в него добавить после
Код
Sheets(j).Cells(1, 1).Value = "!"

Поиск и выделение значения в 3 строке? Знаю, что надо использовать .find, но не выходит.
Поиск в именах листа по значению из ячейки
 
Всем привет.

Есть колонка со значениями. Есть листы, имена которых соответствуют значениям в колонках. Как можно найти и выделить такие листы макросом?
Макрос копирования ячеек с формулами через строку и вставкой значений из этих формул через строку
 
Всем привет.

Прошу помощи, т.к. уже совсем поплыл :)
Нужно, чтобы макрос скопировал из диапазона I5:I63 ячейки, содержащие формулы (а они находятся через строку и вставил) и вставил в столбец K значения из этих формул (тоже через строку).

Фактически мне нужно вот такое действие:
Код
[k5].Formula = [i5].Value
[K7].Formula = [I7].Value
[k9].Formula = [I9].Value
Только на все 63 ячейки :)

Прошу помощи.
Изменено: Breathe of fate - 18.11.2021 12:46:48
Превратить текст из нескольких ячеек в рабочую ссылку
 
Всем привет!

У меня есть несколько ячеек, содержащих текст. Как мне можно склеить содержимое в ссылку, по которой Эксель сможет считать значение из этой ссылки? Ссылка ведёт в другую книгу.

То есть, мне нужно, чтобы в файле H79N.xlsx в яейке А1 появилось значение D, которое содержится в файле 43.xlsx в папке W43.

Буду рад любой помощи.
Замена значений на всех листах с одного UserForm
 
Всем привет :)

Есть вот такой файлик с простенькими макросами (жать на треугольник :) ).

Что он делает: спрашивает, какой текущий номер недели, ищет номер текущей недели в строке с номерами недель, отнимает одну неделю, копирует значения с нужного диапазона, затем вставляет под номером текущей недели и заменяет значения.
Делает он это только на одной странице.

Что нужно сделать:
На каждом листе свои данные, но диапазон копирования и вставки один и тот же. То есть:
на Листе1 копируется B4:C9, вставляется под номер текущей (-1) недели на Листе1
на Листе2 копируется B4:C9, вставляется под номер текущей (-1) недели на Листе2
на Листе3 копируется B4:C9, вставляется под номер текущей (-1) недели на Листе3

Как можно сделать, чтобы запрос на ввод текущей недели выскакивал один раз, а замена была на всех листах? :)
Буду рад любой помощи.
Поиск по значению из TextBox
 
Всем привет.

Прощу помощи.
Есть макрос запуска UserForm и макрос поиска по строке. Идея - вбить в форму необходимое число, по которому потом будет поиск. Я попытался, но у меня просто не ищет значение :(

Файл прилагаю
Макрос копирования и вставки при объёдинённой ячейке
 
Всем привет :)

Есть простенький макрос:
Код
Sub Try()

    Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(6, 0)).Select
    Selection.Copy
    ActiveCell.Offset(0, 1).Select
    ActiveSheet.Paste
    ActiveSheet.Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(6, 0)).ClearOutline
    ActiveCell.Offset(-1, 0).Select
    Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(6, 0)).Select
    Selection.Replace What:="[" & ActiveCell.Offset(-1, -1), Replacement:="[" & ActiveCell.Offset(-1, 0), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
 
End Sub

Макрос копирует значения из указанного диапазона, вставляет в соседний столбец. Проблема в том, что если ячейка объединённая, то значения копируются неправильно:
42 43
1 1
2 2
3 3
[42 [4342
5 5
6 6
Где [4342 - должно быть [43. Где что подправить?
Проверить наличие файла и значение ячейки в нём
 
Предыистория.

У меня есть куча файликов с разными именами - меняется в имени в основном номер недели. И один файлик, который аккумулирует в себя определённые ячейки из этих файлов. И каждую неделю я руками копирую.
Цель - макрос, который проверяет есть ли файлик в папке, и если есть, то выдавать значение из определённого листа определённой ячейки.

Буду рад любой помощи.
Изменено: Breathe of fate - 12.08.2021 12:55:26
Не открывать диалог выбора файла при ошибке ссылки
 
Всем привет :)

Итак, есть файлик, который тянет из другого файлика значения, то есть есть ссылки.
У меня есть макрос, который считывает наличие определённого файлика по имени, и если таковое есть, то включается формула с выводом из ячейки.
Проблема в том, что когда файлика нет, то Эксель открывает диалоговое окно выбора файлика. И это доставляет неудобства :) Можно как-то это окно выбора отключить?
В фильтре появились пустые строки
 
Всем добрый день.

У меня в умном фильтре появились пустые строки. То есть раньше список сортировал, опуская пустые строки вниз, а теперь они прям посередине списка. Есть у кого-нибудь идеи?
Изменено: Breathe of fate - 08.06.2021 11:54:42
Вставка значений справа/слева от выделенных ячеек
 
Всем привет.

Есть вот такой простенький макрос:
Код
Sub Shift_paste()
Selection = [E2]
ActiveCell.Offset(0, 1) = [G2]
ActiveCell.Offset(0, 2) = Application.UserName
End Sub

Написал для автоматической вставки значений справа от выденной ячейки. Теперь надо, чтобы макрос смог вставить значения справа от выделенных (нескольких!) ячеек. То есть выделяю по колонке, нажимаю кнопку - значения появились справа от каждой ячейки в выделенном диапазоне.

Буду рад любой помощи.
Отправка письма из Excel с выбором вложения
 
Добрый день :)

Есть вот такой код:

Код
Sub Send_Report()
    Dim oOutlApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sTblBody As String, sAttachment As String, sCC As String
    Dim rDataR As Range
    Dim IsOultOpen As Boolean
 
    Application.ScreenUpdating = False
    'Пробуем подключиться к Outlook
    On Error Resume Next
    Set oOutlApp = GetObject(, "Outlook.Application")
    If Err = 0 Then
        IsOultOpen = True
    Else
        Err.Clear
        Set oOutlApp = CreateObject("Outlook.Application")
    End If
    oOutlApp.Session.Logon
    Set objMail = oOutlApp.CreateItem(0)   'создаем новое сообщение
    'если не получилось создать приложение или экземпляр сообщения - выходим
    If Err.Number <> 0 Then Set oOutlApp = Nothing: Set objMail = Nothing: Exit Sub
    
    With ActiveWorkbook.Sheets("Send_Report_Form")
        sTo = .Range("C2").Value
        sCC = .Range("C3").Value
        sSubject = .Range("C4").Value
        sBody = .Range("C5").Value
        'Переносы строк и шрифт
        sBody = Replace(sBody, Chr(10), "<br />")
        sBody = Replace(sBody, vbNewLine, "<br />")
        sBody = "<span style=""font-size: 14.5px; font-family: Arial"">" & sBody & "</span>"
        'Таблица
        'важно добавлять таблицу после оформления переносов строк и шрифта
        'в противном случае форматирование таблицы может "поплыть"
        Set rDataR = Sheets("Status").Range("D4:K10") 'Selection - если надо отправить только выделенные диапазона
        sTblBody = ConvertRngToHTM(rDataR)
        'подменяем метку {TABLE} в тексте письма реальной таблицей(сформированной выше)
        sBody = Replace(sBody, "{TABLE}", sTblBody)
    End With
    
    
    'создаем сообщение
    With objMail
        .To = sTo 'адрес получателя
        .CC = sCC 'адрес для копии
'       .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .BodyFormat = 2  'olFormatHTML - формат HTML
'        .Body = RangeToTextTable(Selection) 'вставляем таблицу без форматирования
        .HTMLBody = sBody
        If sAttachment <> "" Then
            .Attachments.Add sAttachment
        End If
        .display 'если необходимо просмотреть сообщение, а не отправлять без просмотра
        '.Send 'если необходимо отправить сообщение без просмотра
    End With
    
    If IsOultOpen = False Then oOutlApp.Quit
    Set oOutlApp = Nothing: Set objMail = Nothing
    DoEvents
End Sub
 
Function ConvertRngToHTM(rng As Range)
    Dim fso As Object, ts As Object
    Dim sF As String, resHTM As String
    Dim wbTmp As Workbook
 
    sF = Environ("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    'переносим указанный диапазон в новую книгу
    rng.Copy
    Set wbTmp = Workbooks.Add(1)
    With wbTmp.Sheets(1)
        'вставляем только ширину столбцов, значения и форматы
        .Cells(1).PasteSpecial xlPasteColumnWidths
        .Cells(1).PasteSpecial xlPasteValues
        .Cells(1).PasteSpecial xlPasteFormats
        .Cells(1).Select
        Application.CutCopyMode = False
        'удаляем все объекты(фигуры, рисунки и пр.)
        '------------------------------------------
        'если рисунки и объекты нужны - удалить этот блок
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
        '------------------------------------------
    End With
    'сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код)
    With wbTmp.PublishObjects.Add( _
         SourceType:=xlSourceRange, Filename:=sF, _
         Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
    'открываем созданный файл как текстовый и считываем содержимое
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sF).OpenAsTextStream(1, -2)
    resHTM = ts.ReadAll
    ts.Close
    'выравниваем таблицу по левому краю(если надо оставить по центру - удалить эту строку)
    ConvertRngToHTM = Replace(resHTM, "align=center x:publishsource=", "align=left x:publishsource=")
    'закрываем временную книгу и удаляем
    wbTmp.Close False
    Kill sF
    'очищаем объектные переменные
    Set ts = Nothing: Set fso = Nothing
    Set wbTmp = Nothing
End Function
 
'---------------------------------------------------------------------------------------
' Author : The_Prist(Щербаков Дмитрий)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          http://www.excel-vba.ru
'          WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
' Purpose: функция объединяет значения указанного диапазона ячеек в строку
'          разрывы между столбцами заменяются табуляцией
'          разрывы между строками заменяются переносами на строки
'---------------------------------------------------------------------------------------
Function RangeToTextTable(rng As Range)
    Dim lr As Long, lc As Long, arr
    Dim res As String, rh()
    Dim lSpaces As Long, s As String
     
    arr = rng.Value
    If Not IsArray(arr) Then
        ReDim arr(1 To 1, 1 To 1)
        arr(1, 1) = rng.Value
    End If
    ReDim rh(1 To UBound(arr, 2))
    For lr = 1 To UBound(arr, 1)
        For lc = 1 To UBound(arr, 2)
            If Len(arr(lr, lc)) > rh(lc) Then
                rh(lc) = Len(arr(lr, lc))
            End If
        Next
    Next
    For lr = 1 To UBound(arr, 1)
        For lc = 1 To UBound(arr, 2)
            s = arr(lr, lc)
            lSpaces = rh(lc) - Len(s)
            If lSpaces > 0 Then
                s = s & Space(lSpaces)
            End If
            If lc = 1 Then
                res = res & s
            Else
                res = res & vbTab & s
            End If
        Next
        res = res & vbNewLine
    Next
    RangeToTextTable = res
End Function

Хотелось бы, чтобы выбор файла для вложения в письмо осуществлялся через диалоговое меню, вот такое:
Код
Sub Choose_Report()  ' пример использования
    Filename$ = GetFilePath()
    If Filename$ = "" Then Exit Sub
    MsgBox "Выбран файл: " & Filename$
End Sub
 
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath As String = "c:\", _
                     Optional ByVal FilterDescription As String = "Файлы счетов", _
                     Optional ByVal FilterExtention As String = "*.*") As String
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title:
        .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1)
        folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
        SaveSetting Application.Name, "GetFilePath", "folder", folder$
    End With
End Function

В 51 строке кода в первом макросе попробовал заменить на
Код
.Attachments.Add GetFilePath()
но вложение не вкладывается - то есть окно выбора есть, можно выбрать, но во вложении не появляется.

Подскажите, пожалуйста, как их подружить?
Макрос копирования таблицы и вставки в письмо как картинки
 
Всем доброго дня.

Есть табличка в Экселе, у меня есть макрос, который переносит эту табличку в письмо.
Подскажите, как его отредактировать, чтобы переносилась картинка? То есть копипаст, но в письмо должно вставляться картинкой.

Заранее спасибо :)
Код
Sub Send_Mail()
    Dim oOutlApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sTblBody As String, sAttachment As String
    Dim rDataR As Range
    Dim IsOultOpen As Boolean
 
    Application.ScreenUpdating = False
    'Пробуем подключиться к Outlook
    On Error Resume Next
    Set oOutlApp = GetObject(, "Outlook.Application")
    If Err = 0 Then
        IsOultOpen = True
    Else
        Err.Clear
        Set oOutlApp = CreateObject("Outlook.Application")
    End If
    oOutlApp.Session.Logon
    Set objMail = oOutlApp.CreateItem(0)   'создаем новое сообщение
    'если не получилось создать приложение или экземпляр сообщения - выходим
    If Err.Number <> 0 Then Set oOutlApp = Nothing: Set objMail = Nothing: Exit Sub
    
    With ActiveWorkbook.Sheets("Status")
        sTo = .Range("P2").Value
        sSubject = .Range("P3").Value
        sBody = .Range("P4").Value
        'Переносы строк и шрифт
        sBody = Replace(sBody, Chr(10), "<br />")
        sBody = Replace(sBody, vbNewLine, "<br />")
        sBody = "<span style=""font-size: 14.5px; font-family: Arial"">" & sBody & "</span>"
        'Таблица
        'важно добавлять таблицу после оформления переносов строк и шрифта
        'в противном случае форматирование таблицы может "поплыть"
        Set rDataR = .Range("A1:N14") 'Selection - если надо отправить только выделенные диапазона
        sTblBody = ConvertRngToHTM(rDataR)
        'подменяем метку {TABLE} в тексте письма реальной таблицей(сформированной выше)
        sBody = Replace(sBody, "{TABLE}", sTblBody)
    End With
    
    
    'создаем сообщение
    With objMail
        .To = sTo 'адрес получателя
        .CC = [P5] 'адрес для копии
'       .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .BodyFormat = 2  'olFormatHTML - формат HTML
'        .Body = RangeToTextTable(Selection) 'вставляем таблицу без форматирования
        .HTMLBody = sBody
        If sAttachment <> "" Then
            .Attachments.Add sAttachment
        End If
        .display 'если необходимо просмотреть сообщение, а не отправлять без просмотра
        '.Send 'если необходимо отправить сообщение без просмотра
    End With
    
    If IsOultOpen = False Then oOutlApp.Quit
    Set oOutlApp = Nothing: Set objMail = Nothing
    DoEvents
End Sub

Function ConvertRngToHTM(rng As Range)
    Dim fso As Object, ts As Object
    Dim sF As String, resHTM As String
    Dim wbTmp As Workbook
 
    sF = Environ("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    'переносим указанный диапазон в новую книгу
    rng.Copy
    Set wbTmp = Workbooks.Add(1)
    With wbTmp.Sheets(1)
        'вставляем только ширину столбцов, значения и форматы
        .Cells(1).PasteSpecial xlPasteColumnWidths
        .Cells(1).PasteSpecial xlPasteValues
        .Cells(1).PasteSpecial xlPasteFormats
        .Cells(1).Select
        Application.CutCopyMode = False
        'удаляем все объекты(фигуры, рисунки и пр.)
        '------------------------------------------
        'если рисунки и объекты нужны - удалить этот блок
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
        '------------------------------------------
    End With
    'сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код)
    With wbTmp.PublishObjects.Add( _
         SourceType:=xlSourceRange, Filename:=sF, _
         Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
    'открываем созданный файл как текстовый и считываем содержимое
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sF).OpenAsTextStream(1, -2)
    resHTM = ts.ReadAll
    ts.Close
    'выравниваем таблицу по левому краю(если надо оставить по центру - удалить эту строку)
    ConvertRngToHTM = Replace(resHTM, "align=center x:publishsource=", "align=left x:publishsource=")
    'закрываем временную книгу и удаляем
    wbTmp.Close False
    Kill sF
    'очищаем объектные переменные
    Set ts = Nothing: Set fso = Nothing
    Set wbTmp = Nothing
End Function

'---------------------------------------------------------------------------------------
' Author : The_Prist(Щербаков Дмитрий)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          http://www.excel-vba.ru
'          WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
' Purpose: функция объединяет значения указанного диапазона ячеек в строку
'          разрывы между столбцами заменяются табуляцией
'          разрывы между строками заменяются переносами на строки
'---------------------------------------------------------------------------------------
Function RangeToTextTable(rng As Range)
    Dim lr As Long, lc As Long, arr
    Dim res As String, rh()
    Dim lSpaces As Long, s As String
     
    arr = rng.Value
    If Not IsArray(arr) Then
        ReDim arr(1 To 1, 1 To 1)
        arr(1, 1) = rng.Value
    End If
    ReDim rh(1 To UBound(arr, 2))
    For lr = 1 To UBound(arr, 1)
        For lc = 1 To UBound(arr, 2)
            If Len(arr(lr, lc)) > rh(lc) Then
                rh(lc) = Len(arr(lr, lc))
            End If
        Next
    Next
    For lr = 1 To UBound(arr, 1)
        For lc = 1 To UBound(arr, 2)
            s = arr(lr, lc)
            lSpaces = rh(lc) - Len(s)
            If lSpaces > 0 Then
                s = s & Space(lSpaces)
            End If
            If lc = 1 Then
                res = res & s
            Else
                res = res & vbTab & s
            End If
        Next
        res = res & vbNewLine
    Next
    RangeToTextTable = res
End Function
Поиск в столбце, поиск последнего заполненного столбца и выдача результата по номеру строки
 
Доброго дня!

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

То есть, мне нужно найти среднее потребление по всем неделям вещества, указанного в столбце А. Например, я ищу 284L52-8756 в столбце А, и если есть совпадение (а оно есть), мне нужно вывести значение ячейки из столбца U (он всегда будет под заголовком Grand Total). То есть ячейка должна показывать значение 1.43.

Я могу это сделать через кучу IF, но мне кажется, что есть более элегантное решение. Может кто-нибудь подсказать?
Перевод минут в месяцы и дни
 
Всем добрый день.

Подскажите, пожалуйста, как перести большущую цифру в месяцы и дни?

У меня есть значение 74667, это минуты. Путём нехитрых манипуляций я вывел в ячейке 1.73, это в месяцах. Есть возможность это показать как "1 м х дней"?

Поиск ничего не дал, либо я слепой.
Изменено: Breathe of fate - 21.04.2020 10:42:31
Сохранение книги и в pdf, и в xlms
 
Всем добрый день.

Есть вот такой прекрасно работающий код:
Код
Sub PDFActiveSheet()
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
Dim strWd As String
On Error GoTo errHandler
Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "dd.mm.yyyy\_hh-mm")
wbA.Save
'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
  strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"
'replace spaces and periods in sheet name
strName = "W" & Format(DatePart("WW", Now, vbMonday), "00")
strWd = Weekday(Date, vbMonday)
strName = strName & "-" & strWd
'create default name for savng file
strFile = strName & ".pdf"
strPathFile = strPath & strFile
'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
    (InitialFileName:=strPathFile, _
        FileFilter:="PDF-????? (*.pdf), *.pdf", _
        Title:="????? ????? ? ????? ?????")
'export to PDF if a folder was selected
If myFile <> "False" Then
    wbA.PrintOut ActivePrinter:="Microsoft Print to PDF", PrintToFile:=True, PrToFileName:=strFile
    'confirmation message with file info
    MsgBox "PDF-????? ??????: " _
      & vbCrLf _
      & myFile
End If
exitHandler:
    Exit Sub
errHandler:
    MsgBox "?? ??????? ??????? PDF-?????"
    Resume exitHandler
End Sub

??? - символы кириллицы, их скопировать не получается даже при ру-разметке.

Вопрос в следующем: код сейчас сохраняет под нужным именем в pdf через нужный принтер. Можно ли добавить сюда такое же сохранение, но ещё и в xlsm? То есть чтобы на выходе получалось два файла - pdf и xlsm?

Сам пробовал, но не получается.

Заранее всем спасибо)
Определение номера недели и дня и запись в имя файла
 
Всем привет.

И снова прошу прошу помощи :)
Код
Sub PDFActiveSheet()
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler
Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "dd.mm.yyyy\_hh.mm")
wbA.Save
'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
  strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"
'replace spaces and periods in sheet name
strName = DatePart("WW", Now, vbMonday)
'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile
'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
    (InitialFileName:=strPathFile, _
        FileFilter:="PDF-????? (*.pdf), *.pdf", _
        Title:="????? ????? ? ????? ?????")
'export to PDF if a folder was selected
If myFile <> "False" Then
    wbA.PrintOut ActivePrinter:="Microsoft Print to PDF", PrintToFile:=True, PrToFileName:=strFile
    'confirmation message with file info
    MsgBox "PDF-????? ??????: " _
      & vbCrLf _
      & myFile
End If
exitHandler:
    Exit Sub
errHandler:
    MsgBox "?? ??????? ??????? PDF-?????"
    Resume exitHandler
End Sub

Хочу научить сохранять файл с именем в формате неделя - день недели, получилось только научить сохранять номер недели.
То есть необходимо, чтобы было в следующем виде: W08-2, W14-3 и т.п. 1 - пн, 2 - вт, 3 - чт. и так далее. Подскажите, пожалуйста, это возможно?
Макрос отправки на Microsoft print to PDF
 
Всем доброго времени суток.

У меня есть код, который сохраняет открытую книгу в pdf-файл. В самом файле есть картинки с прозрачностью, и если экспортировать в pdf, то прозрачность в этих картинках теряется, что является критичным.
Если же отправлять в "Microsoft Print to PDF", то всё сохраняется как надо. Помогите, пожалуйста допилить вот этот код для отправки "Microsoft Print to PDF":
Код
Sub PDFActiveSheet()
 
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler
 
Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "ddmmyyyy\_hhmm")
 
'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
  strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"
 
'replace spaces and periods in sheet name
strName = Replace(wsA.Name, " ", "")
strName = Replace(strName, ".", "_")
 
'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile
 
'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
    (InitialFileName:=strPathFile, _
        FileFilter:="PDF-файлы (*.pdf), *.pdf", _
        Title:="Выбор папки и имени файла")
 
'export to PDF if a folder was selected
If myFile <> "False" Then
    wsA.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    'confirmation message with file info
   MsgBox "PDF-файл создан: " _
      & vbCrLf _
      & myFile
End If
Если я не туда копаю - подскажите, пожалуйста :)
Макрос замены значения с выводом дилогового окна или подстановкой следующего файла
 
Всем привет!

Задача следующая: есть файл-эксель (Пример.xlsx), который берёт данные из другого файла, например 1.xlsx.
Файл 1.xlsx выгружается с прибора, прибор мерит каждый день, и нумерация имён файлов там сквозная, то есть 1 - день 1, 2 - день два, 3 - день 3 и т.д.

То есть чтобы мне получить в файле Пример.xlsx данные другого дня надо просто по поиску и замене сделать 1.xlsx на 2.xlsx и т.д. Каждый раз открывать поиск, замену и вбивание ручками новой цифры довольно затратно.

Что необходимо сделать:
1) либо вывод диалогового окна с вопросом что на что меняем (в опредённом диапазоне, например, A1:C10 в Примере.xlsx)
2) либо сделать так, чтобы Пример.xlsx считывал данные последнего файла.

Подскажите, пожалуйста, как это сделать. Поиск ничего не нашёл.
Файлики могу, конечно приложить, но вроде написано всё очень просто...
Чтение таблиц по столбцу и строке и вывод значения
 
Всем привет!

Есть таблица на 1ой вкладке, по столбцу В и строке 2 (а можно и по 1 - как будет удобно) идут названия/коды химии. И бывает так, что в одну химию надо добавить другую, тогда в соответствующую ячейку ставится процент добавляемого. Например, в химию, имя которой в С2 добавляется химия имя которой в B3, B5, B7. На этом пересечении стоит процент, необходимый для добавлени в C2. В общем, примерно так же строятся турнирные таблицы.

Задача в следующем: на второй вкладке есть таблица, в которой я показал, как мне необходимо выводить данные с первой вкладки. То есть в химию С2 добавляется 3 химии, и их мне надо выводить вот как указано + стобец H выводить циферки, указанные в таблице на первой вкладке.

Есть какие-нибудь варианты? Буду рад любой помощи.

P.S.: столбец А не нужен - я там пытался экспериментировать через ВПР, а его заставлял смотреть по x, но, конечно же, не получилось.
Перенос ссылок с горизонатали в вертикаль или автоматическое транспонирование
 
Всем привет!

Задача такая: у меня есть файлик, в котором мне присылают данные. Таких файликов у меня куча, и тут появилась необходимость свести все эти файлики воедино, да ещё и сделать так, чтобы будущие файлики сводились так же.

Я уже делал похожее, всё работало. Но тут я столкнулся с тем, что конечный файлик мне неизвестен, то есть я не знаю количества ячеек, которые выделять под файлики.
На примере: во вложении на первой странице можно увидеть строку с датами и данными ниже. Я ставлю ссылку на необходимую ячейку и тяну вправо, чтобы ссылка ссылалась на соседнюю, потом на соседнюю и на соседнюю и т.д. ячейку, естественно в файлике, откуда беру, так же и стоят данные - по горизонтали.

Но мне хочется, чтобы данные были по вертикали :) Я тяну ячейку со ссылкой вниз и адрес в ячейке ниже не меняется, то есть формула не тянется.
На примере: вкладка 2 - я транспонировал данные с вкладки 1, но формула дальше не тянется, то есть если протянуть из С39 на С40, ссылка и там, и там будет одинаковой. Хорошо, подумал я - тогда сделаю так, чтобы на первой вкладке формулы тянулись как надо, скрою её, а во второй вкладке буду автоматически транспонировать. Но не тут-то было :) Что-то у меня не работает (см. вкладку 3).

В общем, задача такая: нужно, чтобы ссылки тянулись по вертикали, хотя в изначальном файле они по горизонтали. Если это невозможно, тогда сделать автоматическое транспонирование вкладки 1 на вкладку 3.

Буду рад любой помощи.
Макрос отправки на печать определённой области
 
Всем привет!

Друзья, может кто поделиться кодом для макроса, который будет выводить на печать определённую область? Например, мне нужно выводить на печать исключительно диапазон ячеек A1:H10.
Макрос вставки таблицы в тело письма
 
И снова доброго времени суток, гуру макросов :)

У меня есть таблица (вкладка "Request"), С10:H20, есть макрос по отправке письма. Собственно, не могу допетрить, как вставить в тело письма всю таблицу, по остальному вопросов нет :)

Буду рад любой помощи.
Страницы: 1 2 След.
Наверх