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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 93 След.
внешние связи, удаление внешних связей
 
Сначала:
Цитата
Den23 написал:
можно ли удалить все внешние связи из книги не открывая её
А в результате:
Цитата
Den23 написал:
' Открываем книгу
:D
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Небольшой файл сжирает оперативную память
 
Ну и файлик! Совсем пустой, а подвесил Excel капитально.
Успел проверить только отсутствие кучи имён и графических объектов с 0-ми размерами.
Когда хотел проверить наличие невидимых объектов (.Visible = False)  завис напрочь.
Больше ковыряться нет времени. Надо спасать свои зависшие файлы
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Автоматический переход к другой ячейке если в редактируемой ячейке выбрано "да"
 
Цитата
val_kaz написал:
при выборе в ячейке слова "да"
Выборе в ячейке откуда? Из выпадающего списка проверки данных, комбобокса ActiveX, поля со списком элементов форм, …? В коне-концов просто ручного ввода?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
не запускается макрос, при запуске кода открывается окно выбора уже сохраненных макросов
 
Sanja, прав.
Эту процедуру должна вызывать какая-то другая, передающая ей 4 аргумента: n, A(), F(), X()
Изменено: Alex_ST - 14.04.2024 07:33:44
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
внешние связи, удаление внешних связей
 
Цитата
написал:
..еще необходимо перед этим обновить данные в книге...
интересно, а как Вы собираетесь обновить данные в книге, не открывая её?
Изменено: Alex_ST - 12.04.2024 14:59:45
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
внешние связи, удаление внешних связей
 
Открываете книгу архиватором и удаляете содержимое папки xl\externalLinks\
Изменено: Alex_ST - 12.04.2024 09:49:33
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Макрос "почистить глобально ZVI" (почему увеличился размер файла многократно)
 
Так потому у меня там и Select  стоит, а не Delete чтобы я сам уже принимал решение.
Но это просто сделать на листе, а вот как в книге с большим количеством листов реализовать, я что-то пока не понимаю.
И речь идёт даже не про прямоугольники без заливки и с нулевой толщиной границ, а именно про фигуры с 0 размером по одной из координат. Они вообще визуально никак не отслеживаются.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Макрос "почистить глобально ZVI" (почему увеличился размер файла многократно)
 
Володя, добрый день.
Есть ещё один артефакт, увеличивающий размер файла: при скрытии строк или столбцов, в которых были рисованные объекты, имеющие по умолчанию свойство "Перемещать и изменять размер вместе с ячейками", их размер по высоте или ширине становится равным 0. Объекты схлопываются в одномерные вертикальные или горизонтальные линии, невидимые на экране.
А если сначала скрыть столбцы, а потом строки, то объекты становятся вообще 0-мерными (т.е. математическими точками).
Такие объекты хоть и невидимы, но вес файлу прибавляют точно так же как "нормальные".
Для того, чтобы находить и выделять на листе такие объекты, я написал такую процедуру:
Код
Sub Draws_0D_Select()   ' выделить НА ЛИСТЕ все рисунки с нулевыми размерами
   Dim oDraw As Shape
   If ActiveSheet.DrawingObjects.Count = 0 Then:   MsgBox "В выделенном диапазоне нет рисунков", , "Нет объектов!": Exit Sub
   For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange
      If oDraw.Width = 0 Or oDraw.Height = 0 Then oDraw.Select (False)
   Next
End Sub
Может быть, если уж решишь заняться "допилингом" макроса,  имеет смысл и подобную фитнес-процедуру добавить (только, конечно, заменив Select  на Delete)?

Изменено: Alex_ST - 11.04.2024 11:47:09
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Перевести дату из формата 05.09.2017 04:00:01.000 в формат 05.09.2017
 
Цитата
написал:
3. В вашем коде есть несколько нюансов: он вывалится в ошибку на большом количестве областей (только видимые из отфильтрованного диапазона, например) + вы принудительно в конце выставляете автопересчёт, хотя у пользователя может стоять ручной.
Ну, во первых, вываливаться в ошибку код в принципе не может ввиду включения в самом начале обработчика ошибок
Код
On Error Resume Next

Во-вторых, несмотря на то, что код чаще всего работает с большим количеством диапазонов, определяемых директивой

Код
ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select

за более чем 10-летнее достаточно активное использование процедуры как мной лично, так и сотрудниками, с которыми я им поделился, нареканий к её работе  не возникало.

В-третьих, вставка сразу всех процедур-ускорителей одной строкой типа

Код
   With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With
   …
   With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With
у меня подвешена на горячие клавиши Punto Switcher' а и я не разу не имел с этим проблем.
Более того, за всё своё, наверное 30-летнее активное использование Excel я ещё не встречал пользователей, у которых был осознанно включен ручной пересчёт формул. Но при желании никто не мешает Вам убрать соответствующие директивы из кода.
Самое же главное, "изюминка", в коде - восстановление работы формата циклом не по ячейкам, а по циклом диапазонам способом
Код
rArea.FormulaLocal = rArea.FormulaLocal

Это намного быстрее. Идея точно не моя. Обсуждалось здесь на Планете очень давно. Сейчас где-то в архове. Предложил, кажется, Слэн или Hugo , но не уверен.

Изменено: Alex_ST - 10.04.2024 21:35:31
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Перевести дату из формата 05.09.2017 04:00:01.000 в формат 05.09.2017
 
MadNike, Jack Famous, ребята, Вы серьёзно считаете, что предлагаемые Вами всем давно известные "телодвижения" сделать проще, чем выделить нужный "искалеченный" при экспорте диапазон и нажать одну кнопку вызова макроса?  :D

Или Вы просто прикалываетесь, а я туплю и юмора не понимаю?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Перевести дату из формата 05.09.2017 04:00:01.000 в формат 05.09.2017
 
melnik542, проблема необновления данных после форматирования ячеек тянется ещё, наверное, с Excel-97.

Очень часто это получается при экспорте из внешних баз данных - числа экспортируются как текст, а изменение формата ячеек не приводит к результату.

Приходится входить в каждую ячейку или юзать макросы.
Вот, например, такой:
Код
Sub Repair_Value()   ' в выделенных ячейках исправить экспортированные как текст данные чтобы нормально опознались числа
   Dim rArea As Range
   On Error Resume Next
   ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select
   If Err Then Exit Sub
   With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With
   For Each rArea In Selection.Areas
      rArea.FormulaLocal = rArea.FormulaLocal
   Next rArea
   With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Извлечь цифры из текста
 
Лет 10 назад писал для этого UDF
Код
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray ДИАПАЗОН())
'---------------------------------------------------------------------------------------
' Author       : Alex_ST, v__step, nerv
' URL          : http://www.excelworld.ru/forum/3-1012-97065-16-1401961860
' Topic        : Функция (UDF) "ИЗВЛЕЧЬЦЕЛЫЕ"
' Purpose      : Создать массив из целых чисел, извлечённых из текста произвольно расположенных ячеек
' Notes        : К полученному массиву-результату можно применять любые стандартные формулы листа
'---------------------------------------------------------------------------------------
   Dim rArea, rCell, sStr$, oMatches, i&, Arr()
   On Error GoTo xlErrEXIT
   For Each rArea In ДИАПАЗОН
      For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value)
         sStr = sStr & " " & rCell
      Next rCell
   Next rArea
   With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\d+": Set oMatches = .Execute(sStr): End With
   If oMatches.Count = 0 Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function      ' вернуть ошибку #Н/Д если чисел нет
   '   If oMatches Is Nothing Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrNA): Exit Function   ' вернуть ошибку #Н/Д если чисел нет
   ReDim Arr(1 To oMatches.Count)
   For i = 0 To oMatches.Count - 1: Arr(i + 1) = CLng(oMatches(i).Value): Next i
   ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr
xlErrEXIT:    If Err Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue)   ' вернуть ошибку #ЗНАЧ! если была ошибка
End Function
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Предупреждение о том, что книга уже открыта, макрос
 
Не стал разбираться в чужом коде (слишком много строк), но у меня в копилке лежит пара приёмчиков, которые можно попытаться заюзать:
Код
Private Function FileIsBusy(File$) As Boolean   ' не открывая файла проверяет, открыт ли он вообще кем-либо
   Dim FN%: FN = FreeFile
   On Error Resume Next
   Open File For Random Access Write Lock Write As #FN
   Close #FN
   FileIsBusy = (Err <> 0)
End Function

Private Sub test_FileIsBusy()
Debug.Print FileIsBusy("C:\Temp\Hotkeys.xls")
End Sub
'-------------------------------------------------
Private Sub test_Статус_Книги()
'Свойство UserStatus возвращает 2D-массив (1, 1 to 3), содержащий информацию:
'UserStatus(1,1) - имя пользователя, открывшего книгу в режиме общего доступа,
'UserStatus(1,2) - дата и время, когда этот пользователь открыл книгу,
'UserStatus(1,3) - режим открытия книги (1 - монопольный доступ, 2 - общий доступ).
Debug.Print IIf(ThisWorkbook.UserStatus(1, 3) = 1, "Exclusive", "Shared")
End Sub

Изменено: Alex_ST - 05.04.2024 09:59:56
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Координатное выделение ячейки (ячеек), Программа для подсветки строк/столбцов выделенного диапазона ячеек
 
ZVI, спасибо.
После перезагрузки компа всё заработало: стала показываться вкладка "Надстройки", а на ней - кнопки для управления надстройкой.
Теперь ничего "ковырять" не нужно, да и не очень-то я люблю чужой код разбирать, честно говоря.
Правда инсталляция файлом instal.exe почему-то не прошла.

Но такой мелочью нас не напугаешь: руками закинул файл надстройки в Addons , подцепил её на вкладке Разработчик/Надстройки и всё заработало.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Координатное выделение ячейки (ячеек), Программа для подсветки строк/столбцов выделенного диапазона ячеек
 
ZVI, спасибо.

Очень интересно.

Классное выделение! Ни выделения нескольких областей, ни простого, ни условного форматирования … Форматы ячеек сохраняются! Супер!
Но когда попробовал надстройку, понял, что юзать её на 2013 и выше не удаётся, т.к. кнопки включения/отключения на панелях не создаются...
Хотел попробовать расковырять, а проект запаролен :oops:
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Макрос отслеживающий событие, Макрос отслеживающий событие "копирования" или "вставить" ("Ctrl+C" или "Ctrl+C")
 
Извините, но где в постановке задачи - стартовом топике темы Вы увидели указание на то, что обрабатывать нужно копирование именно по хоткею  Ctrl+C , а не любым другим доступным способом?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Координатное выделение ячейки (ячеек), Программа для подсветки строк/столбцов выделенного диапазона ячеек
 
Вообще-то тема перекрёстного (координатного) выделения проработана в разных вариантах уже давно и подробно рассмотрена в конце 2012 года здесь, на Планете, Николаем Павловым в статье Координатное выделение.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Макрос отслеживающий событие, Макрос отслеживающий событие "копирования" или "вставить" ("Ctrl+C" или "Ctrl+C")
 
Само копирование - это не событие приложения Excel, которое может быть программно обработано.
Можно, конечно, как советовали выше, слепить макрос, который будет реагировать на ввод с клавиатуры хоткея Ctrl+C, но это "костыль", т.к. копирование может быть выполнено и по ПКМ, например, или просто нажатием на кнопку "Копировать" на ленте.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
найти формулу в таблице для редактирования, нужна помощь в поиске формулы на листе
 
Просто встаньте на ячейку D3 и нажмите "Зависимые ячейки" на ленте Формулы/Зависимости формул
Изменено: Alex_ST - 02.04.2024 13:43:59
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Ушел из жизни Сергей (Serge_007)
 
Огромная потеря для близких. Соболезную.
Но также большая потеря для заочных друзей Сержа по форумам - как знатоков, так и начинающих.
Очень хорошо, что я в своей личной копилке макросов всегда в комментариях записываю автора и откуда утащил. А Серёгиных решений там немало. Будет мне о нём добрая память.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Сохранить документ в растровый PDF
 
БМВ прав. При желании распознать текст - не проблема.
И сохранение "как картинка" - защита только от "честных людей".
Поэтому проще, действительно, печатать на PDF-принтер, а потом, если есть желание ограничить права пользователя, то можно открыть его и установить защиту.
Изменено: Alex_ST - 01.04.2024 09:40:37
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Вывести из массива уникальные значения
 
У меня давно уже в Personal лежит макрос для поиска уникальных значений в выделенном диапазоне.
Попробуйте:
Код
Sub NoDups_in_Range()
'---------------------------------------------------------------------------------------
' Procedure    : NoDups_in_Range
' Author       : Alex_ST
' Topic_HEADER : Макрос "NoDups_in_Range" (Подсчёт и вывод уникальных значений в диапазоне)
' Topic_URL    : http://www.excelworld.ru/forum/3-39-25849-16-1347208019
' Purpose      : вывод списка уникальных значений из ВИДИМЫХ ячеек задаваемого диапазона с возможностью подсчёта числа повторов
'---------------------------------------------------------------------------------------
   Dim Addr, rRng As Range, rCell As Range
   On Error Resume Next
   '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   ' замена Application.InputBox("...", "...", Type:=8), не работающего на других листах и листах с УФ формулой
   Addr = Application.InputBox("Где брать список?", "Выбор диапазона данных", "=" & Selection.Address, Type:=0)
   If TypeName(Addr) = "Boolean" Then Exit Sub    ' если нажали "Отмена", то Addr = False
   Addr = Range(Trim(Mid(Application.ConvertFormula(Addr, xlR1C1, xlA1, True), 2))).AddressLocal(0, 0, 1, 1)
   '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   Set rRng = Intersect(Range(Addr).Parent.UsedRange, Range(Addr).Parent.Cells.SpecialCells(xlCellTypeVisible), Range(Addr)): If Err Then Exit Sub
   With CreateObject("Scripting.Dictionary"): .CompareMode = vbTextCompare   ' создаем временный словарь
      For Each rCell In rRng
         If Trim(rCell) <> "" Then .Item(Trim(rCell)) = .Item(Trim(rCell)) + 1   ' попытка записи значения по отсутствующему ключу добавит ключ в словарь
      Next
      If MsgBox("Видимые ячейки указанного диапазона содержат " & vbCrLf & .Count & " уникальных значений." & vbCrLf & _
                "Вывести список на лист?", vbYesNo Or vbInformation, "Параметры списка") = vbNo Then Exit Sub
      '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      ' замена Application.InputBox("...", "...", Type:=8), не работающего на других листах и листах с УФ формулой
      Addr = Application.InputBox("Куда выводить список?", "Выбор диапазона данных", "=" & Selection(1).Address, Type:=0)
      If TypeName(Addr) = "Boolean" Then Exit Sub   ' если нажали "Отмена", то Addr = False
      Addr = Range(Trim(Mid(Application.ConvertFormula(Addr, xlR1C1, xlA1, True), 2))).AddressLocal(0, 0, 1, 1)
      '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      Range(Range(Addr)(1, 1), Range(Addr)(.Count, 1)).Value = Application.WorksheetFunction.Transpose(.Keys)
      Range(Addr).Parent.Activate  ' перейти к листу, куда выводятся данные
      If MsgBox("Вывести количества в соседний столбец?", vbQuestion + vbYesNo, "Вывод данных") = vbYes Then
         Range(Range(Addr)(1, 2), Range(Addr)(.Count, 2)).NumberFormat = "General"
         Range(Range(Addr)(1, 2), Range(Addr)(.Count, 2)).Value = Application.WorksheetFunction.Transpose(.Items)
         Range(Range(Addr)(1, 1), Range(Addr)(.Count, 2)).Activate  ' выделить диапазон выведенных данных
      Else
         Range(Range(Addr)(1, 1), Range(Addr)(.Count, 1)).Activate  ' выделить диапазон выведенных данных
      End If
   End With
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Сравнительная характеристика массивов, коллекций и словарей
 
Цитата
Юрий М написал:
Лично я этого не знал - может кому ещё пригодится )
Что-то я этот совет Юрия либо пропустил, либо просто забыл...
Сейчас практически не программирую. Но несколько лет назад всё равно почему-то предпочитал в своих разработках применять циклы For Each - Next. Наверное, интуитивно  :)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Сохранить Рабочую Область в Excel 2013
 
karlson7,
основные доработки и обсуждения были в основном в Миру Excel в топике"Сохранить рабочую область" в Excel-2013, не уверен, но здесь, на Планете, я, кажется, выложил крайнюю версию. Проверьте.
Но вообще-то книгу с рабочей областью Вы сохраняете сами и с каким расширением сохранять - Ваш выбор.
Проверьте в Безопасности разрешение на выполнение макросов на всякий случай.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Сохранить Рабочую Область в Excel 2013
 
karlson7, для того, чтобы процедура могла прописывать код в модули проекта VBA, необходимо дать соответствующее разрешение в Центре управления безопасностью:
   Файл → Параметры → Центр управления безопасностью → Параметры макросов: поставить галочку "Доверять доступ к объектной модели проектов VBA"
Подробнее читайте Что необходимо для внесения изменений в проект VBA(макросы) программно
На Планете также есть топик Доверять доступ к объектной модели проектов VBA
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Пользовательская форма прекращает работу Excel
 
Цитата
New написал:
Алексей, а при чём тут мышь?
Ну да, немного попутал...
Но вообще-то в коде нет выбора элемента управления после инициализации формы. А код с клавиатуры получит только активный элемент. А чем его можно инициализировать? В 99,9% случаев ЛКМ (можно ещё, конечно, и Tab-ом, но это очень редкое извращение)
Изменено: Alex_ST - 27.10.2021 14:38:24
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Пользовательская форма прекращает работу Excel
 
Цитата
New написал:
Вот так объявлять переменные в VBA неправильно
Это точно. А, если уж в Private Sub UserForm_Initialize() объявил как  
Код
Dim s&
, то и эти переменные нужно объявлять как
Код
Dim i&, i1&
для соблюдения единого стиля написания.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Пользовательская форма прекращает работу Excel
 
Неопытный_Экселист, тут-то как раз ничего недопустимого нет. Это часто используемое опытными людьми сокращение. Основано на числовых представлениях логических значений: false =0 , true >0
А вот с логикой событий мыши на комбобоксе что-то хитрое накручено.
Почему-то отдельно обрабатываются обычно неразрывно следующие друг за другом (если, конечно, не заснул, нажав ЛКМ) события клика ЛКМ мыши: ComboBox1_KeyDown (нажатие ЛКМ) и ComboBox1_KeyUp (отпускание ЛКМ) вместо того, чтобы сделать всё в одной процедуре обработки события ComboBox1_Click
Но это, кажется, ничего не должно вешать кроме мозгов разбирающего код юзера.
А вот зачем два раза подряд проверяется условие
Код
      If ComboBox1.Text <> "" Then
         ActiveCell = ComboBox1.Text
         If ComboBox1.Text <> "" Then
я не понял.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
ДР (ex HB)
 
Юрий, с ДНЮХОЙ!
Здоровья и удачи тебе и всем тем, кто тебе близок и дорог.
Гибкости ума и элегантности решений.
Да минуют тебя #Н/Д, #ЗНАЧ!, #ССЫЛКА!, #ДЕЛ/0! и #ИМЯ?
И всегда по жизни  On Error Resume Next
Изменено: Alex_ST - 28.04.2021 09:07:07
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Программа для редактирования Ribbon - RibbonXMLEditor
 
dolbodub, спасибо, что сказал. Попробуем на досуге.
На всякий случай актуальная ссылка для скачивания:
Ribbon XML Editor v.9.3
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 93 След.
Наверх