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

Страницы: 1 2 След.
Копирование в ячейку, установленную функцией АДРЕС, Разработка макроса
 
Код
Sub test()
    Dim Adr$
    Adr = [d2]
    Range(Adr).Value = Range("E2").Value
End Sub
Макрос "почистить глобально ZVI" (почему увеличился размер файла многократно)
 
ZVI, Заметил такой недостаток.
Если диаграмма находится правее (ниже) последнего столбца с данными (строки), то макрос удаляет такую диаграмму.
Поправил немного код, заменил
Код
        If LastCol < .Columns.Count Then
          With .Range(.Columns(LastCol + 1), .Columns(.Columns.Count))
            .EntireColumn.Delete ' rev4.
            If LastCol >= ShpLastCol Then
              ' Set StandardWidth to columns which are beyond the last col
              .EntireColumn.ColumnWidth = IIf(Ws.StandardWidth, Ws.StandardWidth, 8.43)  'Ws.StandardWidth
            End If
          End With
          If ShpLastCol < .Columns.Count Then
            ' Set StandardWidth to columns which are beyond the Shapes
            With .Range(.Columns(ShpLastCol + 1), .Columns(.Columns.Count))
              .EntireColumn.ColumnWidth = IIf(.StandardWidth, .StandardWidth, 8.43)  'Ws.StandardWidth
            End With
          End If
        End If
        ' Clear cells beyond the last row
        If LastRow < .Rows.Count Then
          With .Range(.Rows(LastRow + 1), .Rows(.Rows.Count))
            .EntireRow.Delete ' rev.4
            If LastRow >= ShpLastRow Then
              ' Set StandardWidth to rows which are beyond the last row
              .EntireRow.RowHeight = IIf(Ws.StandardHeight, Ws.StandardHeight, 12.75)
            End If
          End With
          If ShpLastRow < .Rows.Count Then
            ' Set StandardHeight to rows which are beyond the Shapes
            With .Range(.Rows(ShpLastRow + 1), .Rows(.Rows.Count))
              .EntireRow.RowHeight = IIf(.StandardHeight, .StandardHeight, 12.75)
            End With
          End If
       End If
на
Код
        If ShpLastCol < .Columns.Count Then
          With .Range(.Columns(ShpLastCol + 1), .Columns(.Columns.Count))
            .EntireColumn.Delete ' rev4.
            If LastCol >= ShpLastCol Then
              ' Set StandardWidth to columns which are beyond the last col
              .EntireColumn.ColumnWidth = IIf(Ws.StandardWidth, Ws.StandardWidth, 8.43)  'Ws.StandardWidth
            End If
          End With
          If ShpLastCol < .Columns.Count Then
            ' Set StandardWidth to columns which are beyond the Shapes
            With .Range(.Columns(ShpLastCol + 1), .Columns(.Columns.Count))
              .EntireColumn.ColumnWidth = IIf(.StandardWidth, .StandardWidth, 8.43)  'Ws.StandardWidth
            End With
          End If
        End If
        ' Clear cells beyond the last row
        If ShpLastRow < .Rows.Count Then
          With .Range(.Rows(ShpLastRow + 1), .Rows(.Rows.Count))
            .EntireRow.Delete ' rev.4
            If LastRow >= ShpLastRow Then
              ' Set StandardWidth to rows which are beyond the last row
              .EntireRow.RowHeight = IIf(Ws.StandardHeight, Ws.StandardHeight, 12.75)
            End If
          End With
          If ShpLastRow < .Rows.Count Then
            ' Set StandardHeight to rows which are beyond the Shapes
            With .Range(.Rows(ShpLastRow + 1), .Rows(.Rows.Count))
              .EntireRow.RowHeight = IIf(.StandardHeight, .StandardHeight, 12.75)
            End With
          End If
        End If
Теперь такие диаграммы не удаляются
Организация файлового хранилища с общим доступом по wifi для небольшого офиса
 
Работать то будет, но очень медленно, wifi 2,4, USB 2.0  - это печально
Как подсчитать количество страниц на отдельном листе Excel, подсчет количества страниц с помощью функции
 
Цитата
написал:
активной страницы. ...текущего листа
Чем отличается активная страница от текущего листа?
Выполнение макроса с определенной ячейки D22
 
вместо
lastRowTarget = targetBook.Sheets(1).Cells(targetBook.Sheets(1).Rows.Count, "R").End(xlUp).Row
вставить
lastRowTarget=22
Программа для редактирования Ribbon - RibbonXMLEditor
 
size="large"
Построение диаграммы из диапазона активного листа
 
Добавить в код массив названиями листов, на которых не надо строить график:
Код
Sub Grafik_excel()
    Dim ws          As Worksheet
    Dim xRg         As Range
    Dim xChart      As ChartObject
    ListIkl = Array("Лист3", "Лист4")    'листы, которые нужно исключить
    For Each ws In Worksheets    'для каждого листа
        If Not IsNumeric(Application.Match(ws.Name, ListIkl, 0)) Then
            ws.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
            Set xRg = Range("B5:M20")
            Set xChart = ws.ChartObjects(1)
            With xChart
                .Top = xRg(1).Top
                .Left = xRg(1).Left
                .Width = xRg.Width
                .Height = xRg.Height
            End With
            With xChart.Chart
                'данные для построения графиков
                .SeriesCollection.NewSeries
                .FullSeriesCollection(1).XValues = "='" & ws.Name & "'!$N$2:$X$2"
                .FullSeriesCollection(1).Values = "='" & ws.Name & "'!$N$3:$X$3"
                .SeriesCollection.NewSeries
                .FullSeriesCollection(2).XValues = "='" & ws.Name & "'!$N$4:$X$4"
                .FullSeriesCollection(2).Values = "='" & ws.Name & "'!$N$5:$X$5"
                .SeriesCollection.NewSeries
                .FullSeriesCollection(3).XValues = "='" & ws.Name & "'!$N$6:$X$6"
                .FullSeriesCollection(3).Values = "='" & ws.Name & "'!$N$7:$X$7"
            End With
        End If
    Next
End Sub
Построение диаграммы из диапазона активного листа
 
Код
Sub Grafik_excel()
    Dim ws          As Worksheet
    Dim xRg         As Range
    Dim xChart      As ChartObject
    For Each ws In Worksheets    'для каждого листа
        ws.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select
        Set xRg = Range("B5:M20")
        Set xChart = ws.ChartObjects(1)
        With xChart
            .Top = xRg(1).Top
            .Left = xRg(1).Left
            .Width = xRg.Width
            .Height = xRg.Height
        End With
        With xChart.Chart
            'данные для построения графиков
            .SeriesCollection.NewSeries
            .FullSeriesCollection(1).XValues = "='" & ws.Name & "'!$N$2:$X$2"
            .FullSeriesCollection(1).Values = "='" & ws.Name & "'!$N$3:$X$3"
            .SeriesCollection.NewSeries
            .FullSeriesCollection(2).XValues = "='" & ws.Name & "'!$N$4:$X$4"
            .FullSeriesCollection(2).Values = "='" & ws.Name & "'!$N$5:$X$5"
            .SeriesCollection.NewSeries
            .FullSeriesCollection(3).XValues = "='" & ws.Name & "'!$N$6:$X$6"
            .FullSeriesCollection(3).Values = "='" & ws.Name & "'!$N$7:$X$7"
        End With
    Next
End Sub
Построение диаграммы из диапазона активного листа
 
Без файл примера, навскидку
Код
ActiveChart.FullSeriesCollection(1).XValues= "='" & ActiveSheet.Name & "'!A1:A10"
ActiveChart.FullSeriesCollection(1).Values= "='" & ActiveSheet.Name & "'!B1:B10"
Диапазоны свои вставите, с другими рядами по аналогии
Конфигурация ноутбука для работы с Power Query
 
Цитата
написал:
16.0.5188.100
и
Цитата
написал:
16.0.4417.1000
Может из-за этого, для старого ноута были установлены обновления Excel, а для нового нет.
Для Excel 2016 было большое обновление excel2016-kb4484437-fullfile-x64-glb.exe, в котором что-то значительно меняли для PowerQuery. Попробуйте его установить на новом ноуте.
Набор палитры для заливки ячеек
 
cityfox,
Попробуйте меню ленты "Разметка страницы" - группа "Темы" - цвета - и там выбрать цвет Желтый
Сохранение листа в новой книге
 
Хотя бы указали ошибку...
раз работаете с разными  книгами, то нужно указывать точно с какими
Sheets("Калькуляция").Name - в какой книге, существующей или вновь созданной?
Range("A1").Value - в каком листе и в какой книге она находится?

Предполагаю, что нужно написать так:
Код
wb.Sheets("Калькуляция").Name = ThisWorkbook.Sheets("Калькуляция").Range("A1").Value
как автоматически проставить табуляцию или отступы в vba коде?, онлайн или офлайн
 
можно скачать надстройку MacroTools с сайта http://vbatools.ru/ в ней есть подобный функционал
Как открыть файл xlsb только для чтения, чтобы он при закрытии не спрашивал - сохранять его или нет, чтобы не запускал никаких макросов в нем
 
Serg.Vrn,  
Открыть Метод Workbooks.Open (Excel) | Microsoft Learn
Запретить макросы Свойство Application.AutomationSecurity (Excel) | Microsoft Learn
Можно ли объединенные ячейки выровнять по высоте текста (макросом)?
 
Код оттуда, работает для выделенных ячеек
Код
Sub Sel_UserAutoFit()
    UserAutoFit Selection
End Sub

Public Function UserAutoFit(ByRef objRange As Object) As Boolean
    Dim j&, q&, f&, l&, p&(3), cWh!, rHh!, I() As Box, cl() As Single, X As Object
    On Error GoTo L2
    With Application
        .ScreenUpdating = False
        'v = .ActiveWindow.View: .ActiveWindow.View = xlNormalView
        If TypeName(objRange) = "Range" Then
            With .Sheets(objRange.Parent.Name)    '.ActiveSheet
                ' .DisplayPageBreaks = False
                For Each X In objRange.Areas
                    Set X = IIf(X.Address = .Rows.Address Or X.Address = .Columns(X.Column).Address, .UsedRange, X): p(0) = X.Column
                    p(1) = p(0) + X.Columns.count - 1: p(2) = X.Row: p(3) = p(2) + X.Rows.count - 1: ReDim cl(p(0) To p(1)): ReDim I(p(2) To p(3))
                    For j = p(0) To p(1): cl(j) = .Columns(j).ColumnWidth: Next
                    For j = p(3) To p(2) Step -1
                        Set X = .Rows(j): I(j).Hdn = X.Hidden: X.AutoFit: I(j).Hght = X.RowHeight
                        For l = p(0) To p(1)
                            If .Cells(j, l).MergeCells Then
                                With .Cells(j, l).MergeArea
                                    If .Parent.Cells(j, l).Address = .item(1).Address Then
                                        For q = l To l + .Columns.count - 1: cWh = cWh + cl(q) + 0.647: Next
                                        If cWh > 255 Then cWh = 0: GoTo L1
                                        For q = j To j + .Rows.count - 1
                                            If Not I(q).Hdn Then rHh = rHh + I(q).Hght: If f = 0 Then f = q
                                        Next
                                        .UnMerge: .item(1).ColumnWidth = cWh: X.AutoFit: rHh = X.RowHeight - (rHh - I(f).Hght)
                                        If f <> j Then If I(f).Hght < rHh Then .Rows(f - j + 1).RowHeight = rHh
                                        .Merge: .item(1).ColumnWidth = cl(l): l = l + .Columns.count - 1
                                        If I(f).Hght < rHh Then I(f).Hght = rHh
                                        cWh = 0: rHh = 0: f = 0
                                    End If
                                End With
                            End If
L1:                             Next
                        If I(j).Hght > 0 Then X.RowHeight = I(j).Hght
                        If I(j).Hdn Then X.Hidden = True
                    Next
                Next
            End With
        End If
        ' .ActiveWindow.View = v
    End With
L2:     End Function
Можно ли объединенные ячейки выровнять по высоте текста (макросом)?
 
попробуйте Автоподбор высоты в Excel | Программы и макросы для Excel (excelvba.ru)
На моём компьютере всё работает, на других - нет. Excel что-то делает с формулами массивов?
 
Цитата
написал:
как это исправить, чтобы макрос EASA работал на других машинах так же как на моей?
на других машинах обновить Excel до 2021
Фиксация ячейки в формуле
 
час($G$5)
Изменено: irabel - 29.09.2023 11:02:01 (5)
Создание события change для CheckBox-ов создаваемых макросом
 
Цитата
написал:
Я не знаю как написать событие change (или выкрутиться по-другому) для этих не существующих checkbox-ов
Используйте классы: Работа с модулями классов (excel-vba.ru)
Разный объем файлов при сохранении в .XLSB, Разный объем файлов при сохранении в .XLSB
 
Цитата
написал:
XLSX между собой (80 и 70)
Распакуйте эти файлы в разные папки и сравните исходный размер. Зайдите в подпапки xl, сравните размеры и структуру подпапок, может найдете различия
Не удается открыть файл, так как формат или расширение этого файла являются недопустимыми, Не могу открыть файл Эксель
 
Vladimir Vorobev,
нажмите Win+R, введите путь %appdata%\Microsoft\excel и ОК
Откроется папка, где Excel хранит временные файлы, посмотрите, может там есть нужный файл
Макрос на печать файлов pdf.
 
Так установите приложение по умолчанию для файлов PDF  
Макрос на печать файлов pdf.
 
Код
Sub tt()
    Dim PDFrng As Range, PDF As Range
    Dim AdobeReader As String, pdfLINK As String
    Set PDFrng = ActiveSheet.Range("A100:A109")
    Dim objShell
    Set objShell = CreateObject("Shell.Application")
    For Each PDF In PDFrng
        If PDF.Hyperlinks.Count > 0 Then pdfLINK = PDF.Hyperlinks(1).Address
        objShell.ShellExecute pdfLINK, "", "", "print", 0
        Application.Wait Now + TimeValue("00:00:01")
    Next PDF
End Sub
Откроется в программе по умолчанию для PDF файлов и распечатается
Как запомнить состояние фильтров на листе, Нужен способ определения существования Criteria1 и Criteria2
 
New, спасибо, исправил.
Как запомнить состояние фильтров на листе, Нужен способ определения существования Criteria1 и Criteria2
 
Мартын,
Код
Dim filterArray(), FiltrRange

Sub SaveFl()
' сохранение значений автофильтра
    Set wsh = ActiveSheet
    With wsh.AutoFilter
        FiltrRange = .Range.Address
        With .Filters
            ReDim filterArray(1 To .Count, 1 To 3)
            For f = 1 To .Count
                With .Item(f)
                    If .On Then
                        filterArray(f, 1) = .Criteria1
                        If .Operator Then
                            filterArray(f, 2) = .Operator
                            filterArray(f, 3) = .Criteria2
                        End If
                    End If
                End With
            Next f
        End With
    End With
End Sub


Public Sub LoadFL() ' загрузка значений автофильтра
    Set wsh = ActiveSheet
    For col = 1 To UBound(filterArray(), 1)
        If Not IsEmpty(filterArray(col, 1)) Then
            If filterArray(col, 2) Then
                wsh.Range(FiltrRange).AutoFilter field:=col, _
                        Criteria1:=filterArray(col, 1), _
                        Operator:=filterArray(col, 2), _
                        Criteria2:=filterArray(col, 3)
            Else
                wsh.Range(FiltrRange).AutoFilter field:=col, _
                        Criteria1:=filterArray(col, 1)
            End If
        End If
    Next col
End Sub
Изменено: irabel - 27.06.2023 06:56:32 (исправил ошибки в коде)
выпадающий список в виде цветной кнопки (зависимость цвета от значения)
 
ivan_kom, Как вариант:
Меню вставка - фигуры - блок-схемы, там есть очень похожая фигура.
В ней вставить нужный текст, стрелки можно вставить через меню вставка - символ
На эту фигуру можно спокойно назначить любой макрос, в том числе который бы закрашивал эту самую фигуру в зависимости от условия и менял бы текст в ней
вывод информации в надстройке при помощи Ribbon
 
кросс

Для надстройки и обычного поля:
код XML
Код
<customUI xmlns = "http://schemas.microsoft.com/office/2009/07/customui" onLoad = "RibbonOnLoad">
   <ribbon startFromScratch = "false">
      <tabs>
         <tab id = "Вкладка1" label = "Моя вкладка">
            <group id = "Группа1" label = "Моя группа">
               <labelControl id = "Lbl1" getLabel = "GetText"/>
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>

Код модуля в надстройке
Код
Option Explicit

Public ribbon As IRibbonUI
Public sText As String
Public ev As New Class1
Sub Auto_open()
    Set ev.ap = Excel.Application
End Sub

Sub RibbonOnLoad(IRibbon As IRibbonUI)
    Set ribbon = IRibbon
End Sub

Public Sub GetText(control As IRibbonControl, ByRef label)
    label = sText
End Sub
Также вставить модуль класса Class1, в нем прописать следующий код:
Код
Option Explicit

Public WithEvents ap As Excel.Application
Private Sub ap_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    sText = "кол-во: " & WorksheetFunction.CountA(ActiveSheet.Columns(1))
    ribbon.InvalidateControl "Lbl1"
End Sub

Private Sub ap_SheetActivate(ByVal Sh As Object)
    sText = "кол-во: " & WorksheetFunction.CountA(ActiveSheet.Columns(1))
    ribbon.InvalidateControl "Lbl1"
End Sub
Сохранить и закрыть. После открытия на вкладке будет отображаться число заполненных ячеек в столбце А
вывод информации в надстройке при помощи Ribbon
 
Если я правильно понял ТС, то вот код для кнопки, при нажатии текст кнопки будет меняться на количество заполненных ячеек в столбце А
код XML
Код
<customUI xmlns = "http://schemas.microsoft.com/office/2009/07/customui" onLoad = "RibbonOnLoad">
   <ribbon startFromScratch = "false">
      <tabs>
         <tab id = "Вкладка1" label = "Моя вкладка">
            <group id = "Группа1" label = "Моя группа">
               <button id = "Кнопка1" imageMso = "AppointmentColor0" onAction = "SetText" getLabel = "GetText"/>
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>

код Vba
Код
Option Explicit

Public ribbon As IRibbonUI
Public sText As String

Sub RibbonOnLoad(IRibbon As IRibbonUI)
    Set ribbon = IRibbon
End Sub

Public Sub GetText(control As IRibbonControl, ByRef label)
    label = sText
End Sub

Public Sub SetText(ctrl As IRibbonControl)
    sText = WorksheetFunction.CountA(Columns(1))
    ribbon.InvalidateControl "Кнопка1"
End Sub


Сам файл загрузить не могу, на работе стоит запрет(
Возможность оптимизации кода интерактивной таблицы с чекбоксами, Поиск более оптимального решения по внедрению множества чекбоксов в документ Excel для создания интерактивной таблицы.
 
Изучите возможности классов
Склеивание нескольких диапазонов в одну переменную [VBA]
 
Если ячейки закрашиваются через условное форматирование, то надо сравнивать .FormatConditions(1).Interior.Color = 65535, где (1) - первое условное форматирование (их же может быть несколько)

Лучше проверять не через цвет ячеек, а через тоже условие, что и в условном форматировании
Страницы: 1 2 След.
Наверх