Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 112 След.
Как добавить к строке данные справа
 
Цитата
New написал:
пусть привыкают к A1
Off. Сейчас появится Ігор Гончаренко и такое начнется... :D  
Владимир
Как добавить к строке данные справа
 
Добрый день! В конструкциях, подобных #5, есть тонкость - они не работают, если стиль ссылок установлен как R1C1.
Владимир
Доступ к листам по паролю (защита листов)
 
А какие действия Вы выполняете (опишите подробно)?  Проверил на машине с "американской" локализацией, ошибок не вижу (за исключением "кракозябр" в заголовке Userfom, что неисправимо).
Владимир
Ошибка RemoveDuplicates, Ошибка VBA при обработке RemoveDuplicates
 
У Вас длинный код - смотрите внимательно. Для того, чтобы использовать массивы с индексом от 1, указанная выше опция не нужна, достаточно при объявлении / переопределении массива указывать явно нижнюю границу. Если Option Base не указана, то по умолчанию нижняя граница массивов равна 0. Некоторые конструкции VBA, например, Split, возвращают массивы с нулевой нижней границей при любой "Option Base".
Изменено: sokol92 - 28 фев 2021 17:13:46
Владимир
Ошибка RemoveDuplicates, Ошибка VBA при обработке RemoveDuplicates
 
Цитата
phelex написал:
Option Base 1 - создает ошибку, а вот почему непонятно.
Баг в чистом виде.
Код
Option Explicit
Option Base 1
Sub Test()
  Workbooks.Add
  With Range("A1")
    .Value = 1
    .RemoveDuplicates Array(1), xlNo
  End With
End Sub

Если убрать "Option Base 1", то ошибки нет.
Владимир
Ошибка RemoveDuplicates, Ошибка VBA при обработке RemoveDuplicates
 
Добрый день! Думаю, что проблема в Option Base 1. Похоже, метод RemoveDuplicates c этой опцией не дружит.

P.S. Предлагаю не рассматривать подобные просьбы в отношении текстов модулей, не содержащих Option Explicit. Не все мы Гераклы. :(  
Изменено: sokol92 - 28 фев 2021 16:14:47
Владимир
Конвертнуть время в десятичный формат, Конвертнуть время в десятичный формат
 
Миллисекунда.
Владимир
Автоматический подбор высоты строк
 
Можно и без макроса: выделить все листы, выделить все ячейки и автоподбор.
Владимир
Ошибка при вставке данных "метод pastespecial из класса range завершен неверно"
 
Цитата
tyomi4 написал:
действия простые: необходимо вставить данные из буфера обмена в лист без форматирования
Метод Range.Pastespecial предназначен для вставки данных из скопированного в том же самом экземпляре Excel диапазона ячеек (что и проверяет макрос коллеги из #7). Если в буфере обмена что-то иное, то макрос из #1 будет выдавать указанную ошибку.
Владимир
"Сохранить как...." меняет имя файла перед сохранением (дописывает Копия)
 
Попробуйте проделать эксперимент из #1 для какой-нибудь папки на локальном диске (C:) (без OneDrive).
Изменено: sokol92 - 24 фев 2021 14:57:06
Владимир
Макрос создания дополнительного меню для перехода по листам
 
Успехов!
Владимир
Макрос создания дополнительного меню для перехода по листам
 
Всех с праздником!

Свойство Action допускает вызов макросов с параметрами, для этого нужно значение свойства заключить в апострофы. В Вашем случае передаем макросу MyMacro номер листа.
Код
Sub MyMacro(ByVal i As Long)
  Debug.Print "MyMacro", i
End Sub

Строка 39 из #4:
Код
Item.OnAction = "'MyMacro(" & i & ")'"
Владимир
Как найти дату функцией Find, Find VBA
 
Цитата
Dihlofos881 написал:
Проблема в том, что макрос начинает искать дату в формате 01/01/2021, а данные в табличке записаны в формате 01.01.2021.
Послесловие. Ключ к разгадке - в этой теме.
Владимир
LoadPicture() - как загрузить изображение без блокировки файла., LoadPicture() как освободить файл.
 
Понятно. Директория по умолчанию (default directory or folder) всегда блокируется от удаления и переименования. Это не связано с особенностями объекта FileDialog (который "виноват" лишь в смене текущей директории).

То же произойдет, если Вы выполните Chdir (как в #4) и попытаетесь переименовать вновь установленную директорию по умолчанию.
Владимир
сделать для таблицу для расчета, сделать для таблицу для расчета
 
Существует обширная математическая литература по теме "линейных диофантовых уравнений". При количестве переменных, большем двух, без макроса никак не обойтись. :)  
Владимир
LoadPicture() - как загрузить изображение без блокировки файла., LoadPicture() как освободить файл.
 
Не вижу блокировки при переименовании выбранной папки для Application.FileDialog.
Код
Sub test()
  Dim fDialog As FileDialog, folder As Object, fso As Object, fName As String
  Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
  With fDialog
    If .Show = 0 Then Exit Sub
    fName = .SelectedItems(1)
  End With
  
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set folder = fso.getFolder(fName)
  folder.Name = "Folder_New"
  
  Set folder = Nothing
  Set fso = Nothing
End Sub
Владимир
Об особенностях метода Range.Find c параметром LookIn:=xlValues
 
Итак, анализируем результаты экспериментов.
При указанном Андреем в #5 аргументе поиска "f" текст находится только для февраля, для аргумента "y" текст найден для месяцев 1,2,5,7. Проведя аналогичные опыты (и вспомнив английский язык :) ), делаем выводы:

1. В процессе выполнения поиска числовые, логические и ошибочные значения ячеек преобразуются в текст (числовые - с учетом формата ячеек). При преобразовании текущие региональные настройки не учитываются, точнее, преобразование производится в соответствии со стандартными "американскими" настройками: локализация en_US, дробная часть числа отделяется точкой, разделитель тысяч запятая, стандартный формат даты M/D/YYYY.
Таким образом, если в ячейке с форматом D MMMM YYYY содержится число, соответствующее первому дню текущего года, то оно будет преобразовано в текст "1 January 2021". Логические значения ячеек преобразуются в "FALSE" или "TRUE", ошибочные в "#DIV/0!", "#NAME?", ...

2. Если текст, полученный в результате п.1, не помещается в ячейке, то он заменяется на один или несколько символов "#".

Теперь мы можем объяснить результаты в задаче 2 из #1. Ширина столбца "A" выравнивается под ширину видимого текста в ячейкe A1 (например, "1 Январь 2021"), Если текст, полученный в результате п.1 (например, "1 January 2021"), помещается в ячейке, то он будет найден, иначе нет.

Кстати, в конфигурации автора результат выполнения 2-го макроса из #1 отличается от результата коллеги, указанного в #8: текст не найден для месяцев 3, 8, 9, 11, 12. Это объясняется возможными различиями в настройке стиля "Обычный" ("Normal"), который используется для форматирования ячейки по умолчанию.

Использовать или нет в макросах "мудреный" метод, указанный в заголовке темы - решать читателю. :)  
Изменено: sokol92 - 21 фев 2021 15:52:26
Владимир
Подбор цены в копейках по нескольким позициям для достижения требуемого итога
 
В Вашем примере замена цены на копейку меняет итог либо на 50, либо на 146 копеек. Не факт, что задача имеет решение в общем случае.

В данном случае Вам повезло - надстройка Excel "Поиск решения" помогла.

Для модераторов тема: "Подбор цены в копейках по нескольким позициям для достижения требуемого итога".
Изменено: sokol92 - 20 фев 2021 17:45:08
Владимир
Об особенностях метода Range.Find c параметром LookIn:=xlValues
 
Завтра всё прояснится. :)  
Владимир
Об особенностях метода Range.Find c параметром LookIn:=xlValues
 
Зачет. :D  
Владимир
Об особенностях метода Range.Find c параметром LookIn:=xlValues
 
Подсказка по теме. Во второй задаче из #1 заменить 4-ю строку макроса на
Код
txt = "y"   ' текст для поиска в ячейке A1
Выполнить макрос, объяснить результаты.
Владимир
Анекдот дня, Постим сюда понравившиеся:)
 
Правда. Реклама по телевизору. Звуки 40-й симфонии Моцарта, голос диктора: "Добавь пару свежих нот!"
Владимир
Запуск макроса из контекстного меню
 
Цитата
New написал:
Видно у Excel разные контекстные меню для разного вида страницы (обычный, страничный)
Да, верно, и оба меню называются "Cell". Для добавления в оба меню можно так:
Код
Option Explicit
Dim cmdBar1 As CommandBar, cmdBar2 As CommandBar
Sub MakeMenu()
  Dim cmdBar As CommandBar
  For Each cmdBar In Application.CommandBars
     If cmdBar.Name = "Cell" Then
       If cmdBar1 Is Nothing Then
         Set cmdBar1 = cmdBar
         MakeMenu_2 cmdBar
       Else
         Set cmdBar2 = cmdBar
         MakeMenu_2 cmdBar
         Exit For
       End If
     End If
  Next cmdBar
End Sub

Sub MakeMenu_2(ByVal cmdBar)
'   Добавление пунктов контекстного меню
    Dim Cap(1 To 15)
    Dim Mac(1 To 15)
    Dim NewMenu As CommandBarControl
    Dim Item As CommandBarControl
    Dim MenuCount As Integer
    Dim i As Integer
    
    Cap(1) = "Выделить вверх (клавиши <Ctrl+Shift+Down>)"
    Mac(1) = "SelectDown"
    Cap(2) = "Выделить вверх (клавиши <Ctrl+Shift+Up>)"
    Mac(2) = "SelectUp"
    Cap(3) = "Выделить вправо (клавиши <Ctrl+Shift+Right>)"
    Mac(3) = " SelectToRight"
    Cap(4) = "Выделить влево (клавиши <Ctrl+Shift+Left>)"
    Mac(4) = " SelectToLeft"
    Cap(5) = "Выделить текущий регион (клавиши <Ctrl+Shift+*>)"
    Mac(5) = " SelectCurrentRegion"
    Cap(6) = "Выделить активную область (клавиши End, Home, <Ctrl+Shift+Home>)"
    Mac(6) = " SelectActiveArea"
    Cap(7) = "Выделить ячейки, смежные со столбцом с активной ячейкой"
    Mac(7) = " SelectActiveColumn"
    Cap(8) = "Выделить ячейки, смежные со строкой с активной ячейкой"
    Mac(8) = " SelectActiveRow"
    Cap(9) = "Выделить весь столбец (клавиши <Ctrl+пробел>)"
    Mac(9) = " SelectEntireColumn"
    Cap(10) = "Выделить всю строку  (клавиши <Shift+пробел>)"
    Mac(10) = " SelectEntireRow"
    Cap(11) = "Выделить весь лист (клавиши <Ctrl+A>)"
    Mac(11) = " SelectEntireSheet"
    Cap(12) = "Активизировать следующую пустую ячейку снизу"
    Mac(12) = " ActivateNextBlankDown"
    Cap(13) = "Активизировать следуущую пустую ячейку справа"
    Mac(13) = " ActivateNextBlankToRight"
    Cap(14) = "Выделить диапазон строки от первой непустой ячейки до последней непустой ячейки"
    Mac(14) = " SelectFirstToLastInRow"
    Cap(15) = "Выделить диапазон столбца от первой непустой ячейки до последней непустой ячейки"
    Mac(15) = " SelectFirstToLastInColumn"


'   Удалить меню, если оно уже существует
    On Error Resume Next
    cmdBar.Controls("&Демонстрация выделения").Delete
    On Error GoTo 0
    
'   Добавление меню
    MenuCount = cmdBar.Controls.Count
    Set NewMenu = cmdBar.Controls.Add(Type:=msoControlPopup, temporary:=True)
    NewMenu.Caption = "&Демонстрация выделения"
    
'   Добавление пунктов меню
    For i = 1 To 15
        Set Item = NewMenu.Controls.Add(Type:=msocontrolbutton, temporary:=True)
        With Item
            .Caption = Cap(i)
            .OnAction = Mac(i)
            If i Mod 4 = 0 Then .BeginGroup = True
        End With
    Next i
End Sub

Sub DeleteMenu()
'   Удаление меню перед закрытием
    On Error Resume Next
    cmdBar1.Controls("&Демонстрация выделения").Delete
    cmdBar2.Controls("&Демонстрация выделения").Delete
End Sub
Изменено: sokol92 - 19 фев 2021 18:50:50
Владимир
Об особенностях метода Range.Find c параметром LookIn:=xlValues
 
Добрый день!

Вопросы по применению метода Range.Find c параметром LookIn:=xlValues сравнительно часто задаются на форуме. Владимир (ZVI) давал разъяснения здесь. Попробуем продолжить изучение этого проблемы.

Первую задачу можно в начале решать "без доски". Что будет выдано в результате выполнения следующего макроса. Почему?
Код
Sub TestRangeFind()
    Dim rg As Range, txt As String, y As Long
    y = 2021
    Workbooks.Add
    With Range("A1")
      .NumberFormat = "D MMMM YYYY"
      .Value = DateSerial(y, 1, 1)
      Set rg = .Find(y, LookIn:=xlValues, LookAt:=xlPart)
      Debug.Print "Текст " & y & IIf(rg Is Nothing, " не", "") & " найден в ячейке со значением " & .Value
    End With
End Sub
Скрытый текст

Следующая задача значительно труднее. Ее решение дает ключ к ответу по данной теме.
Выполнить макрос. Если есть различия в сообщениях по месяцам, то объяснить эти различия.

Код
Sub TestRangeFind2()
    Dim rg As Range, m As Long, y As Long, txt As String
    y = 2021
    txt = y   ' текст для поиска в ячейке A1
    Workbooks.Add
    With Range("A1")
        .NumberFormat = "D MMMM YYYY"
        For m = 1 To 12
            .Value = DateSerial(y, m, 1)
            .EntireColumn.AutoFit
            Set rg = .Find(txt, LookIn:=xlValues, LookAt:=xlPart)
            Debug.Print "Текст " & txt & IIf(rg Is Nothing, " не", "") & " найден в ячейке со значением " & .Value
        Next m
    End With
End Sub

Сделаем паузу на пару дней, чтобы дать возможность читателям темы (если таковые будут) провести самостоятельные исследования.
Владимир
VBA работа с запароленными zip архивами
 
Цитата
whateverlover написал:
Есть WinRar
У Дмитрия Щербакова есть подробная статья на эту тему.
Владимир
Как найти дату функцией Find, Find VBA
 
Переносит. Если Вы в примере из #6 заполните ячейку B29 на листе Production, то макрос перенесет ее значение в ячейку B2 листа Vol Pack.
Изменено: sokol92 - 18 фев 2021 16:16:36
Владимир
Как найти дату функцией Find, Find VBA
 
Метод Range.Find с параметром LookIn:=xlValues имеет ряд непростых для понимания особенностей. Для начала можно ознакомиться с замечательными разъяснениями Владимира (ZVI).

Для того, чтобы пример из #6 заработал, необходимо:

1. Изменить формат ячеек первой строки листа Production c Д.М;@ на Д\.М;@
2. Изменить строку макроса с вызовом Find на
Код
Set fcell2 = Sheets("Production").Rows("1:1").Find(Format(CStr(Sheets("Vol Pack").Cells(lLastRow + i, 1).Value), "D.M"), LookIn:=xlValues, LookAt:=xlWhole)
Изменено: sokol92 - 18 фев 2021 14:13:16 (Уточнил параметры Find)
Владимир
Чаевые криптой или на дебетовые карты??
 
Да, "Маркс - это голова" ©

А нынешние "корифеи" явно не учились на курсах у Николая Павлова. :D  
Владимир
Удалить файл из архива
 
Успехов!
Владимир
Чаевые криптой или на дебетовые карты??
 
Цитата
БМВ написал:
Пузырь он и есть пузырь
Добрый день, Михаил! Причем наносящий колоссальный ущерб природе за счет потребления дикого количества энергоресурсов. Метод доказательства в криптовалютах: прав я, поскольку потратил больше электроэнергии.
Владимир
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 112 След.
Наверх