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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 155 След.
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
AlexGor, testuser и другие коллеги, спасибо за интересную тему и исследования!
Владимир
Округление в Excel
 
В Excel то, что хочет автор темы, называется "Экспоненциальный" формат ячейки. Затем (опционально) можно убрать E+xx (E-xx) и передвинуть запятую.
Владимир
Excel преобразует нумерацию №п.п. в десятичную дробь
 
Цитата
olege1983 написал:
Почему код ниже преобразует текстовое значение в числовое
Разбирается в этой теме, пункт 4.4
Владимир
Особенность сортировки диапазона с формулами, Баг или фича?
 
Владимир, спасибо, не знал этого.
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
AlexGor написал:
Запуск с кнопки описал ранее в #37
Да, спасибо, тогда, на мой взгляд, с практической точки зрения проблемы нет. Разбираться с разным поведением макросов при запуске из VBE и непосредственно из Excel (и еще в различных версиях Win и Office) можно бесконечно.  :)
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
AlexGor написал:
так я код запускаю клавишей "Run Sub" из редактора.
Попробуйте закрыть редактор и запускать макрос непосредственно из Excel посредством диалога "Макрос" (Alt+F8) или назначьте на макрос горячую клавишу (можно через кнопку "Параметры" в том же диалоге).
Изменено: sokol92 - 25.03.2024 15:24:59
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
AlexGor написал:
редактор VBA активен
Редактор VBE - отдельная песня, лучше все тестировать при закрытом редакторе.
Владимир
Подсказка в эксел, Подсказка при условиях
 
... примерно таким.

Нужно предусмотреть изменение ячейки как через счетчик, так и непосредственно.
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Большое спасибо за проделанную работу!
Изменено: sokol92 - 24.03.2024 19:40:00
Владимир
VBA. Ширина ячейки, Как сделать новую ячейку ровно такой же ширины как исходная ?
 
Посмотрите еще эту тему.
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Использование пользовательских классов, или не использование -  дело вкуса автора, к алгоритмам в данной теме не имеющее отношения.
Вот редакция макросов из #16 без использования классов (потратил минут 5, детально не проверял). Функция  HtmlEncode и ее вызов добавлены.
Изменено: sokol92 - 23.03.2024 20:07:42 (Исправлено вложение (была неточность в макросе addHTMLWraper))
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Спасибо за тестирование!
Отмеченные Вами проблемы могут быть связаны с ограничениями (безопасности) для вызова PowerShell.

Об отображении букв русского алфавита.
"HTML Format" буфера обмена использует для текста кодировку utf-8.
Текст программы из сообщения #16 этого не учитывает.
Можно обойти эту проблему так.
1. Добавьте в модуль vbaClipboard функцию HtmlEncode из сообщения #30.
2. В модуле vbaClipboard в функции addHTMLWraper перед строкой
Код
sData = sHtmlHeader & sContextStart & sHtmlElement & sContextEnd

добавьте строку
Код
sHtmlElement = HtmlEncode(sHtmlElement)

Расскажите о результате. Успехов!
Изменено: sokol92 - 22.03.2024 14:46:26
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Тестирование показывает, что не все программы соблюдают стандарты и корректно работают с русскими буквами при вставке из буфера обмена, имеющего формат "Html". Так что придется до копирования в буфер обмена кодировать (по старинке) все символы юникода с кодом >=128. После этого кодировка utf-8 не отличается от кодировки windows-1251.  :)

Протестируйте, пожалуйста (занести в стандартный модуль книги):
Код
Option Explicit

' Копирует в буфер обмена строку в Html - формате.
' Теги <HTML> и <BODY> указывать не следует.
Sub HtmlToClipboard(ByVal txt As String)
  Dim fso As Object, f As Object, fileName As String
  Set fso = CreateObject("Scripting.FileSystemObject")
  fileName = fso.GetSpecialFolder(2) & "\" & fso.GetTempName() & ".html" ' временный файл
  Set f = fso.OpenTextFile(fileName, 2, True)  ' для записи
  f.Write HtmlEncode("<HTML><BODY>" & txt & "</BODY></HTML>")
  f.Close
  
  RunPgm "powershell -command ""type " & fileName & " | Set-Clipboard -AsHtml"""

  Set f = Nothing
  Set fso = Nothing
  Kill fileName
End Sub

' Кодирует в строке txt все символы с кодом >=128 по стандарту Html (&#код;).
Function HtmlEncode(ByVal txt As String) As String
  Dim arr, n As Long, i As Long, s As String
  If Len(txt) = 0 Then Exit Function
  ReDim arr(1 To Len(txt))
  For i = 1 To Len(txt)
    s = Mid(txt, i, 1)
    n = AscW(s)
    If n > 127 Then
      arr(i) = "&#" & n & ";"
    Else
      arr(i) = s
    End If
  Next i
  
  HtmlEncode = Join(arr, "")
End Function

' Запуск внешних программ в синхронном режиме
Function RunPgm(ByVal pgm)
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    RunPgm = wshShell.Run("%comspec% /c " & pgm, 0, True)
    Set wshShell = Nothing
End Function

Sub Test()
  HtmlToClipboard "<B>Это полужирный</B> and <I>this is italic.</I>"
End Sub

Изменено: sokol92 - 21.03.2024 17:20:34
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
nilske написал:
Почему через PowerShell или Word сделать красивее, чем через пользовательский класс
Если Вы о программе из #16, то пользовательские классы не при чем, всё это без проблем переносится в стандартный модуль. Там используются Windows API для работы с буфером обмена. Соответственно, нужно разбираться с проблемами. Например:
Цитата
AlexGor написал:
2. вместо кириллицы выдаёт кракозябры.
Могу (не вникая в текст макросов) предположить, что проблема с использованием ASCII версий Windows API вместо Unicode версий.

На мой взгляд, лучше идти проторенными путями и контролировать свои шаги.
Например, в результате пункта 1 из #19 будет создан (временный) файл формата html. Мы сможем проверить его корректность, открыв в любом браузере.
Владимир
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
БМВ,  написал:
А там и вода , да еще и не верная вода.
Действительно, как-то все некрасиво и проблемы с символами Unicode, не попадающими в диапазон 0-127.
Проще сделать так:
1. Создать временный файл и записать туда HTML в кодировке utf-8.
Например, файл C:\Temp\test2.html c содержимым
Код
<html> <body>Это обычный шрифт.<b>Это полужирный.</b> <i><b>This is bold italic.</b> This is italic.</i></body> </html>
2. Скопировать содержимое файла в буфер обмена в формате "Html". Например, через PowerShell:
Код
Sub Test()
  RunPgm "powershell -command ""type C:\Temp\test2.html | Set-Clipboard -AsHtml"""
End Sub

' Запуск внешних программ в синхронном режиме
Function RunPgm(ByVal pgm)
    Dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    RunPgm = wshShell.Run("%comspec% /c " & pgm, 0, True)
    Set wshShell = Nothing
End Function
Наверняка, есть и более краткие пути.
Владимир
Как правильно сослаться на переменную
 
Успехов!
Владимир
Имя элементов на английском, Как убрать кириллицу
 
Цитата
написал:
почему такие мелочи не зафиксили переменными на английском
Слишком много надо фиксить.  :)
Успехов!
Изменено: sokol92 - 18.03.2024 17:22:38
Владимир
Имя элементов на английском, Как убрать кириллицу
 
Изменил ответ выше. Попробуйте, пожалуйста.
Изменено: sokol92 - 18.03.2024 17:13:40
Владимир
Как правильно сослаться на переменную
 
Дополнение к ответу МатросНаЗебре (один из возможных вариантов):
Код
Option Explicit
Const myColumnName = "Moy_UID"
Sub test()
  Dim tbl As ListObject, rg1 As Range
  Set tbl = ActiveSheet.ListObjects("Таблица2")
  
  Set rg1 = tbl.ListColumns(myColumnName).Range
  rg1.Select           ' Range("Таблица2[Moy_UID]").Select
  rg1.Rows(1).Select   ' Range("Таблица2[[#Headers],[Moy_UID]]").Select
End Sub
Владимир
Имя элементов на английском, Как убрать кириллицу
 
Уже забыл, что это такое ( SlicerCache ).  :)
Скачал отличный пример у Николая Павлова.
Думаю, что имя можно поменять стандартным образом через Диспетчер имен (Ctrl+F3). Попробуйте на своем примере.
Изменено: sokol92 - 18.03.2024 17:09:37
Владимир
[ Закрыто] Сумма прописью
 
Если у Вас есть формула, выводящая сумму прописью в указанном Вами стандартном формате для суммы из ячейки A1, то сумму в требуемом формате можно получить так:
Код
=ЦЕЛОЕ(A1)  & " (" & ПОДСТАВИТЬ(вашаФормула; " руб"; ") руб")
Изменено: sokol92 - 11.03.2024 19:49:27
Владимир
Как обращаться к ячейкам разных листов из пользовательской формы?
 
Успехов!
Владимир
Как обращаться к ячейкам разных листов из пользовательской формы?
 
Внимательно просмотрите все строки своих макросов на предмет явного указания листа во всех констукциях.
Например (фрагмент):
Код
    With ThisWorkbook.Worksheets(i)
        lastRow = .Range("A" & Rows.Count).End(xlUp).Row
        Set Rng = Columns(1).Find(what:=strDi, LookIn:=xlValues, lookAt:=xlWhole)

В присвоении для Rng не указано, к какому листу относится Columns(1) (возможно, нужно добавить в начале точку).

Для модераторов тема: Как обращаться к ячейкам разных листов из пользовательской формы?
Изменено: sokol92 - 10.03.2024 15:43:10
Владимир
Как зафиксировать округлённое число?, Появились погрешности из-за округления
 
Введите в любую свободную ячейку формулу:
=A4=B4
Ее значение - ИСТИНА. То есть, значения ячеек A4 и B4 одинаковы.
В этих ячейках установлены разные числовые форматы (соответственно Общий и Числовой с 2 знаками после запятой), поэтому на экране они отображаются по-разному.
Изменено: sokol92 - 10.03.2024 15:23:18
Владимир
Редактирование формулы для вывода данных с обоих листов на третий, Вывод данных с двух листов на третий лист
 
Коллеги, спасибо за интересное обсуждение!
Владимир
Редактирование формулы для вывода данных с обоих листов на третий, Вывод данных с двух листов на третий лист
 
Цитата
Aleksa1984 написал:
Помогите недоучке, если возможно...
Ничего, лет через 20 и мы научимся (может быть) писать такие формулы...  :D
Владимир
Правила условного форматирования в сводной таблице, Пожалуйста, помогите прописать правила условного форматирования
 
Поставьте первым правилом условного форматирования: если значение факта и плана 0, то числовой формат ";;" и укажите для него флажок "Остановить, если Истина".
Изменено: sokol92 - 07.03.2024 15:29:10
Владимир
Правила условного форматирования в сводной таблице, Пожалуйста, помогите прописать правила условного форматирования
 
Можно так (с вычисляемым полем).
Владимир
VBA список переменных/процедур/функций/параметров
 
Проще поискать vba obfuscation.
Владимир
Работа с Excel из Outlook
 
В #8 описан вполне рабочий вариант, только нужно перехватить ошибку:

Код
Sub Test()
  Dim objXls2 As Object
  On Error Resume Next
  Set objXls2 = GetObject("D:\ForMacros\123.xlsx")
  On Error GoTo 0
  
  ' следующие операторы
  
End Sub
   

Если указанный файл ранее был открыт, то переменная objXls2 будет содержать ссылку на открытый файл (в этом экземпляре Excel или в ином).
Если указанный файл ранее не был открыт, то он будет открыт в скрытом окне данного экземпляра Excel и переменная objXls2 будет содержать ссылку на этот вновь открытый файл.

В случае возникновения ошибки (например, файл не существует), переменная objXls2 будет Nothing.
Владимир
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 155 След.
Наверх