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

Страницы: 1 2 3 След.
Как сделать группу в ленте видимой/невидимой?
 
VBA. В ленте (ribbon) есть элемент <group id="group1" label="MSO" GetVisible="GetGroupVisible">. Как сделать, если в книге открыта вкладка "MSO", то элемент group1 видим, если другая вкладка, то невидим?

Подскажите, пожалуйста. Очень надо.
Открыть Книга2 из Книга1, дождаться закрытия Книга2, продолжить выполнение кода
 
Подскажите, пожалуйста, как открыть Книга2 из Книга1, дождаться закрытия Книга2 (после внесения изменений вручную), далее продолжить выполнение кода?
Как включить опцию "Показывать все объекты"?
 
Если в Microsoft Office 64 bit запустить макрос, который работает с комментариями к ячейкам, то может вылезти сообщение:


Чтобы этого не происходило, надо включать эту настройку:


Как проверить и включить эту настройку?
Изменено: tchack - 20.02.2024 17:03:50
Запуск макроса из текущей книги
 
В текущей книге есть процедура, которая открывает другую книгу (targetWorkbook) и добавляет в нее пункт в контекстное меню:

Код
.....
        With targetWorkbook.Application.CommandBars("cell").Controls.Add(1, , , 1)
            .Parent.Controls(2).BeginGroup = True
            .Caption = "Копировать адрес диапазона"
            .FaceId = 550
            .OnAction = "test123"
        End With
......


При нажатии пункта контекстного меню должна запускаться процедура из текущей книги test123, но процедура ищется не в текущей книге, а в targetWorkbook.
Как это исправить?
Сохранить документ в растровый PDF
 
Скажите, пожалуйста, можно ли с помощью VBA сохранить из Word документ в растровый PDF? (Чтобы текст нельзя было выделить).

На данный момент использую внешние приложения в VBA, но может это можно сделать без них.
Изменено: tchack - 11.02.2024 01:57:02
Присвоить переменной картинку из буфера обмена
 
Подскажите, пожалуйста, как присвоить переменной картинку из буфера обмена, а потом с помощью ActiveSheet.Shapes.AddPicture добавить ее на активный лист?
Интересен именно такой код!
Перейти в нужную ячейку в книге, которую надо открыть в отдельном окне
 
Вот так книга открывается в отдельном окне:
Код
Dim NewExcel As Object        
Set NewExcel = CreateObject("Excel.Application")
NewExcel.Workbooks.Open "C:\123.xlsx"
NewExcel.Visible = True


Вот так работает переход:
Код
Application.Goto Workbooks.Open("C:\123.xlsx").Sheets(ThisWorkbook.Sheets(1).Cells(1, "A").Value).Cells(ThisWorkbook.Sheets(1).Cells(3, "O").Value, 1)


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

Код
    Dim qt As QueryTable    
    Set qt = ActiveWorkbook.Sheets("TEMP").QueryTables.Add(Connection:="URL;" & url, Destination:=Range("A1"))
Google-таблицу в массив
 
Вот образец макроса, который копирует Google-таблицу на лист.

Код
  Sub QueryGoogleSheets()
      Dim qt As QueryTable, url As String, key As String, gid As String
 
      If ActiveSheet.QueryTables.Count > 0 Then ActiveSheet.QueryTables(1).Delete
      ActiveSheet.Cells.Clear
 
      key = "1WopmB1ExWSNul9sw9n7I9FEyquS4AyEugt_fKQrHJSI"
      url = "https://spreadsheets.google.com/tq?tqx=out:html&key=" & key
 
      gid = "2009384141"
      url = url & "&gid=" & gid
 
      Set qt = ActiveSheet.QueryTables.Add(Connection:="URL;" & url, _
      Destination:=Range("$A$1"))
 
      With qt
          .WebSelectionType = xlAllTables
          .WebFormatting = xlWebFormattingNone
          .Refresh
      End With
  End Sub


Можно ли сделать, чтобы данные с Google-таблицы сразу попадали в массив, минуя заполнение массива с листа?
Добавить пункт в контекстное меню
 
Вот пример как добавить кнопку в контекстное меню. Данный код работает в книге с поддержкой макросов:
Добавление кнопки (код размещается в модуле книги):
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Application.CommandBars("cell").Reset
    
End Sub

Private Sub Workbook_Deactivate()

    Application.CommandBars("cell").Reset
    
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

    CreateItemsInCellContextMenu
    
End Sub


Вызываемая процедура (код размещается в стандартном модуле):
Код
Sub CreateItemsInCellContextMenu()

   On Error Resume Next

   Application.CommandBars("cell").Reset
   Application.CommandBars("cell").Controls(1).BeginGroup = True

   With Application.CommandBars("cell").Controls.Add(1, , , 1)
      .OnAction = "Test"
      .Caption = "Тест2"
   End With
   
End Sub

Sub Test()

    MsgBox "Работает"

End Sub


Как добавить пункт в контекстное меню, размещая код в пользовательской надстройке?
Вышеуказанный код не работает.
Изменено: tchack - 13.10.2023 16:15:24
Добавить Item в dropDown из кода
 
Подскажите, пожалуйста, как добавить Item в dropDown из кода?

Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
   <ribbon startFromScratch="false">
      <tabs>   
          <tab id="tab" label="Подборщик кодов ТНВЭД">
             <group id="Группа_1" label="Наименования">
            <dropDown id="MyDropDown" 
                          sizeString="AAAAAAAAAAAAAAAAAAAAA" 
                          onAction="DropDown_OnAction"> 
              <item id="One" label="Наименование 1"/> 
              <item id="Two" label="Наименование 2"/> 
              <item id="Three" label="Наименование 3"/> 
              <button id="button" label="Прочее" onAction="Button_OnAction" /> 
            </dropDown> 
            </group>   
      </tab>
      </tabs>
   </ribbon>
</customUI>


PS: Формируется массив и из него я хочу вставить наименования в dropDown.
Изменено: tchack - 13.10.2023 11:35:48
Выпадающий список из неотсортированного диапазона
 
В таблице Excel есть два столбца:

Яблоко Фрукты
Груша Фрукты
Укроп Зелень
Помидор Овощи
Петрушка Зелень
Огурец Овощи

Как в ячейке F1 сделать выпадающий список только с фруктами?
Такое возможно без сортировки?
Извлечь данные со web-страницы
 
На странице есть код:
Код
<div class="col-25">
  <div class="boxSubstrate boxSubstrate-offset-0">
    <div class="padding-default-2">
      <h2><b class="halfbold">Код ТН ВЭД</b><br>
        <span class="h1 jTnvedCodeFormat">8501510001</span>
      </h2>
      <a class="codeTip-off f-right btn btn-blue btn-icon btn-icon-small" title="Открыть дерево ТН ВЭД" href="/tnved/?tnved=8501510001">
        <i class="fa fa-book"></i>
      </a>
      <p><i>Асинхронные двигатели переменного тока многофазные, номинальной выходной мощностью не более 750 вт</i></p>
                        
    </div>
  </div>
</div>


Как в текстовую переменную получить значение "Асинхронные двигатели переменного тока многофазные, номинальной выходной мощностью не более 750 вт"???
Проблема с ListView
 
На UserForm1 есть ListView1, в котором отображается массив arrList(1 to 100, 1 to 10). В первом столбце массива нумерация, но не в каждой строке. С этим столбцом проблема при отображении в ListView1, а именно все числа сортируются (см. вложение). С другими столбцами проблем нет.

Можно ли это как-то исправить? Может это как-то отключается?

Код для заполнения ListView1:
Код
 With ListView1

        .ListItems.Clear
        .ColumnHeaders.Clear
        
        .FullRowSelect = True
        .Gridlines = True
        
        For i = 1 To UBound(arrList, 2)

            .ColumnHeaders.Add , , arrList(1, i)

            For j = 2 To UBound(arrPackingList)

                If i = 1 Then
                
                    .ListItems.Add , , arrList(j, i)
                    
                Else
                
                    .ListItems(j - 1).SubItems(i - 1) = arrList(j, i)

                End If

            Next j

        Next i

    End With
Изменено: tchack - 13.09.2023 01:24:13
Удалить динамически созданные ComboBox
 
Есть массив arrComboBox(), содержащий динамически созданные ComboBox.

Как их все удалить циклом?
ActiveCell в ThisWorkbook
 
Как сделать, чтобы код работал только в ThisWorkbook.
Код
Public Property Get SelectedCell() As Range
    Set SelectedCell = ActiveCell
End Property

Что-то вроде: If ActiveWorkbook =  ThisWorkbook Then Set SelectedCell = ActiveCell, но тут вылетает ошибка.
Изменено: tchack - 21.07.2023 15:29:03
Создать экземпляр класса
 
Есть макрос, который при нажатии на кнопку создает на форме новый TextBox друг за другом по вертикали:

Пользовательский модуль:
Код
Public cntTextBox&             ' Счетчик
Public TextBox_Top&            ' Счетчик
Public arrUserFormControls()   ' Массив
Public cntRowUserFormControls& ' Счетчик 


Модуль формы:
Код
Private Sub CommandButton1_Click()
    
    Dim NTT As Control
    Set NTT = Me.Controls.Add("Forms.TextBox.1", "TextBox" & (50 + cntTextBox))
    
    ReDim Preserve arrUserFormControls(1 To 1, 1 To cntRowUserFormControls)
    arrUserFormControls(1, cntRowUserFormControls) = 50 + cntTextBox
    
    cntTextBox = cntTextBox + 1
    
    With NTT
    
        .Height = 18
        .Width = 115
        .Left = 12
        .Top = 264 + TextBox_Top

    End With

    TextBox_Top = TextBox_Top + 24
    cntRowUserFormControls = cntRowUserFormControls + 1

End Sub


Возникла необходимость обрабатывать событие Change для каждого созданного TextBox.

Например (модуль класса MeTextBox):
Код
Public WithEvents NTT As MSForms.TextBox

Private Sub NTT_Change()

    MsgBox "Работает"

End Sub



Как создать правильно создать экземпляр класса, чтобы можно было менять свойства из модуля формы и чтобы обрабатывалось событие Change?
Изменено: tchack - 18.07.2023 19:34:54
Уменьшить ширину столбца выпадающего списка ComboBox
 
Можно ли уменьшить ширину столбца выпадающего списка ComboBox? ColumnWidths не помогает.
Формат чисел в TextBox
 
Подскажите, пожалуйста, как заставить TextBox показывать числа в указанном формате?
Перепробовал разные варианты, но ничего не срабатывает. Мне нужно, чтобы число отображалось с двумя знаками после запятой, а если знаком нет, то два ноля + разряды.


Код
Private Sub TextBox2_AfterUpdate()

   If IsNumeric(TextBox2) Then UserForm.TextBox2.Value = Format(UserForm.TextBox2.Value, "#,##0,00")

End Sub

Private Sub TextBox2_Exit(ByVal cancel As MSForms.ReturnBoolean)

   TextBox2 = Format(TextBox2, "#,##0,00")

End Sub

Private Sub TextBox2_Change()

   TextBox2 = Format(TextBox2, "#,##0,00")

End Sub
Обработать событие Change
 
На форме создается неопределенное количество ComboBox (в примере 5 шт). Как для каждого ComBox обработать событие Change?
Или хотя для самого первого??

Код
Private Sub UserForm_Initialize()

    Dim ComboBoxCount As Integer
    Dim ComboBoxArray() As Object
    Dim i As Integer
    
    ComboBoxCount = 5
    
    ReDim ComboBoxArray(1 To ComboBoxCount)
    
    For i = 1 To ComboBoxCount
        Set ComboBoxArray(i) = Me.Controls.Add("Forms.ComboBox.1", "ComboBox" & i, True)
        With ComboBoxArray(i)
            .Left = 10
            .Top = (i - 1) * 30
            .Width = 100
            .Height = 20
        End With
    Next i

End Sub
Изменено: tchack - 17.06.2023 19:07:24
В какой программе открыта книга?
 
При запуске книги запускается макрос, который, например, выводит приветствие.
Как сделать так, чтобы приветствие выводилось только, если книга открывается в программе excel.

Как отследить, что книга открывается в программе excel?

PS: Другая программа, которая забирает данные из этой книги, запускает макрос и в окне мелькает окно приветствия.
Проблема с апострофом в ячейке
 
При вставке значения текстовой переменной в ячейку в ней появляется апостроф перед значением. Пример:
Код
Dim text As String
text = "0108808956276942215Aa:GOD0urSdD 0108808956276942215'Aai+?UGnB%6 0108808956276942215AfG%Ea%m9IDT 0108808956276942215aGstiVpQT4i* 0108808956276942215AkJLjR65)zlT 0108808956276942215ALVMlMFaYueS 0108808956276942215aMaE-RW""*hSB 010"
ThisWorkbook.Sheets(1).Cells(1, 1) = text


Как вставить в ячейку значение текстовой переменной, чтобы не появился апостроф??

Значение текстовой переменной может начинаться с апострофа. Как быть в таком случае?
Удалить правило условного форматирования
 
Есть умная таблица, в которой есть столбец "Тестовый_столбец". Макросом создается правило:
   
Код
   With Sheet1.Range("Таблица1[Тестовый_столбец]") 

      .FormatConditions.Add Type:=xlTextString, String:="Значение1234", TextOperator:=xlContains
      .FormatConditions(.FormatConditions.Count).SetFirstPriority
      .FormatConditions(1).Interior.Color = 65535

   End With


Как отследить наличие этого правила в диспетчере правил условного форматирования и удалить именно его??
Как значения нескольких столбцов умной таблицы перенести в массив?
 
Есть умная таблица "Таблица1", в ней столбцы Тест1, Тест2, Тест3, Тест4, Тест5, Тест6, Тест7, Тест8, Тест9.

Таким способом можно перенести в массив данные из одного столбца умной таблицы:
Arr = Range("Таблица1[Тест1]").Value

А как перенести в массив данные из нескольких столбцов умной таблицы Тест1, Тест5, Тест8, не используя цикл??
Двухуровневая сортировка массива
 
Есть массив, состоящий из трех столбцов arrUniqueValues (1 to 10000, 1 to 3). В первом столбце текстовые значения, во втором столбце текстовые значения, в третьем столбце числовые значения. Необходимо отсортировать массив сначала по первому столбцу, затем по второму столбцу.

Написал макрос. Время обработки 50 секунд. Можно ли как-то ускорить обработку???

Код
 
Dim i As Long, j As Long
Dim temp As Variant

    'Сортируем по первому столбцу
    For i = LBound(arrUniqueValues, 1) To UBound(arrUniqueValues, 1) - 1
        For j = i + 1 To UBound(arrUniqueValues, 1)

            If arrUniqueValues(i, 1) > arrUniqueValues(j, 1) Then

                temp = arrUniqueValues(i, 1)
                arrUniqueValues(i, 1) = arrUniqueValues(j, 1)
                arrUniqueValues(j, 1) = temp

                temp = arrUniqueValues(i, 2)
                arrUniqueValues(i, 2) = arrUniqueValues(j, 2)
                arrUniqueValues(j, 2) = temp

                temp = arrUniqueValues(i, 3)
                arrUniqueValues(i, 3) = arrUniqueValues(j, 3)
                arrUniqueValues(j, 3) = temp
            End If

        Next j
    Next i

    'Сортируем по второму столбцу
    For i = LBound(arrUniqueValues, 1) To UBound(arrUniqueValues, 1) - 1
        For j = i + 1 To UBound(arrUniqueValues, 1)

            If arrUniqueValues(i, 1) = arrUniqueValues(j, 1) And _
               arrUniqueValues(i, 2) > arrUniqueValues(j, 2) Then
                
                temp = arrUniqueValues(i, 2)
                arrUniqueValues(i, 2) = arrUniqueValues(j, 2)
                arrUniqueValues(j, 2) = temp

                temp = arrUniqueValues(i, 3)
                arrUniqueValues(i, 3) = arrUniqueValues(j, 3)
                arrUniqueValues(j, 3) = temp
            End If

        Next j
    Next i
Изменено: tchack - 03.04.2023 21:24:06
Удалить встроенные картинки
 
Есть файл Пример.xls размеров 183 Кб, внутри каким-то образом встроены 3 картинки размером 158 Кб. Эти картинки использовались в колонтитуле.
В таблице нет значений и форматирования.

Чтобы их удалить использовал:


Код
Sub test()

    Dim shp As Shape
    
    For Each shp In ws.Shapes
        shp.Delete
    Next shp

End Sub


Код
Sub test()

Dim shape As Excel.shape

For Each shape In ActiveSheet.Shapes

    Select Case shape.Type
        Case msoPicture, msoMedia, msoShapeTypeMixed, msoOLEControlObject, msoAutoShape
            shape.Delete
        Case Else
            'Do nothing
    End Select

Next

End Sub


Но ничего не помогло.


Как удалить эти картинки с помощью vba?
Изменено: tchack - 16.03.2023 18:14:10
Функция перевода
 
У кого-нибудь есть готовая функция перевода через сайт deepl.com?
Интересует версия без использования ключа API. Вроде версии для Google Переводчика.
Передать значения из массива в столбцы умной таблицы
 
Дано:
Массив myArray(1 to 10, 1 to 3)
Столбец Sheet1.Range("Таблица1[Столбец1]")
Столбец Sheet1.Range("Таблица1[Столбец2]")
Столбец Sheet1.Range("Таблица1[Столбец3]")

Столбцы содержат 10 строк.

Как передать значения из массива во все столбцы, не пользуясь циклом???

Если бы массив был myArray(1 to 10, 1 to 1), то можно было бы сделать так:
Sheet1.Range("Таблица1[Столбец1]").Value = myArray
Поиск из одной книги в другой книге по умной таблице
 
Удалите тему, пожалуйста.
Изменено: tchack - 03.02.2023 17:40:38
Как избавиться от мерцания элементов управления формы?
 
На листе находятся кнопки из элементов управления формы. Каждый раз при выполнении макросов они мерцают.
Application.ScreenUpdating отключает обновление экрана, таблица перестает мерцать, а кнопки продолжают.

Можно ли от мерцания кнопок избавиться?
Страницы: 1 2 3 След.
Наверх