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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 100 След.
Дополнить макрос преобразования из кириллицы в латиницу
 
Проверяйте. Функция должна работать с любыми кодовыми страницами Windows и с любыми региональными настройками.
Код
Option Explicit
Function KzCyrToLat(ByVal s As String) As String
    Static cyr, lat, Dict As Object
    Dim i As Long, s1 As String, s2 As String, arr() As String, b As Boolean, n As Long
    If IsEmpty(cyr) Then
        ' буквы казахского алфавита
        cyr = Array(1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1241, 1110, 1187, 1171, 1199, 1201, 1179, 1257, 1211)
        lat = Array("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "y", "k", _
            "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", _
            "sh", "sch", "", "y", "", "e", "yu", "ya", "a", "i", "ng", "g", "u", "u", "k", "o", "h")
        If UBound(cyr) <> UBound(lat) Then
            MsgBox "Dimensions of arrays cyr and lat must be the same", vbCritical
            Exit Function
        End If
    
        Set Dict = CreateObject("Scripting.Dictionary")
        For i = 0 To UBound(cyr)
            Dict(ChrW(cyr(i))) = lat(i)
            Dict(UCase(ChrW(cyr(i)))) = StrConv(lat(i), vbProperCase)
        Next i
    End If  ' первоначального заполнения
        
    ReDim arr(1 To Len(s))
    For i = 1 To Len(s)
      s1 = Mid(s, i, 1)
      If Dict.exists(s1) Then
        arr(i) = Dict(s1)
      Else
        arr(i) = s1
      End If
    Next i
        
    ' Обработка "особых" правил
    n = UBound(arr)
    For i = 1 To n
      s1 = arr(i)
      If LCase(s1) = "e" Then  ' добавляем y к е
        If i = 1 Then
          b = True
        Else
          b = LCase(arr(i - 1)) Like "[aouiye]"
        End If
        If b Then arr(i) = IIf(s1 = "e", "ye", "Ye")
        
      ElseIf LCase(s1) = "y" And i > 1 And i < n Then
         arr(i) = IIf(arr(i) = "y", "i", "I")
        
      ElseIf LCase(s1) = "s" And i > 1 And i < n Then
        If LCase(arr(i - 1)) Like "[aouiye]" And LCase(arr(i + 1)) Like "[aouiye]" Then arr(i) = IIf(arr(i) = "s", "ss", "Ss")
      End If
    Next i

    KzCyrToLat = Join(arr, "")
End Function
Владимир
О сравнении текста и числа в VBA
 
WorksheetFunction.CountIf ведет себя так же, как и функция СЧЁТЕСЛИ (за исключением моментов, связанных с локализаций). Второй параметр ">0" для этой функции определяет подсчет в заданном диапазоне ячеек с числовым значением, большим нуля. При этом пустые ячейки, ячейки содержащие текст, логические или ошибочные значения при "числовом" подсчете игнорируются.
Владимир
Как обновить макрос, чтобы работал на 64-bit
 
Поскольку в теме есть неточности, давайте разберем этот пример. Цель: составить определение функции из сообщения #3 для версий офиса 2010+ (VBA7).
1. Ищем описание функции в файле Win32API_PtrSafe.TXT. К сожалению, этой функции там нет.
2. Ищем описание это функции в документации разработчика. Находим здесь.
3. Анализируем типы параметров и возвращаемое значение функции. Описание типов, используемых Microsoft в документации, можно найти здесь (в дальнейшем - Типы). Итак:
  • параметр Hwnd типа HWND. Согласно Типам, HWND - это HANDLE, а HANDLE - указатель. Для указателей в VBA7 используется LongPtr.
  • параметр crKey типа COLORREF. Согласно Типам это 32-разрядное целое, в VBA  - Long
  • параметр bAlpha типа BYTE. Согласно Типам 1-байтовое целое, в VBA - Byte
  • параметр dwFlags типа DWORD. Согласно Типам 32-разрядное целое, в VBA - Long (практически все параметры с префиксом "dw" имеют тип Long)
  • возвращаемое значение описано как BOOL, согласно типам это int - 32-разрядное целое, в VBA - Long

Теперь составляем описание:
Код
#If VBA7 Then  ' версии MS Officе, начиная с 2010
  Private Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As LongPtr, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
#Else
  Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
#End If

Если мы все-таки ошиблись в описании какой-либо функции, то выполнение Excel с большой долей вероятности завершится аварийно. Поэтому перед выполнением сохраняем все данные.
Изменено: sokol92 - 26 сен 2020 15:39:34
Владимир
О сравнении текста и числа в VBA
 
В теме сопоставляются разные вещи.

1. Сравнение в VBA переменной типа Variant c числом в случае, если переменная содержит текст.
VBA в этом случае перед сравнением пытается преобразовать текст в число. Если это невозможно, то считается что текст больше (как и в формулах Excel).
Код
Sub test()
  Dim v As Variant
  v = ""
  Debug.Print v > 9999
End Sub

Выдает True.

Если в примере тип переменной v описать как String, то возникнет ошибка преобразования типа.

2. Алгоритм работы функции рабочего листа CountIf.

Для модераторов тема: о сравнении текста и числа в VBA
Изменено: sokol92 - 26 сен 2020 14:13:10
Владимир
Перевод на русский язык терминов, используемых в описании работы динамических массивов
 
Хорошее объяснение этих терминов здесь.
Владимир
Как определить версию Excel, которой был сохранен файл
 
Не у всех, как у медвеля, есть сотни машин. Обычные пользователи готовят примеры для форума на том же (единственном?) экземпляре Excel, на котором и будут в дальнейшем работать.  :)  
Владимир
Формат подписи данных диаграммы. Разделить значения на миллион
 
Или в "Формате оси" диаграммы поставить цену деления 1 000 000.
Владимир
Как определить версию Excel, которой был сохранен файл
 
Здравствуйте, Виталий! Быстрее посмотреть в файл, будешь дольше искать, где этот макрос. :)  
Владимир
Склеивание текста из образцов, Склейка текста из кусков, куски рандомно меняются внутри текста
 
Цитата
БМВ написал:
1. какая версия Excel
Excel 2019   :D  
Владимир
Как избавиться от предупреждения «Файл уже используется», При открытии файла - я сам обрабатываю ситуация
 
Цитата
Кирилл Найдёнов написал:
Тогда какое событие можно взять, что бы оно возникало до появления этой надписи?
Перечень событий объекта Application приведенздесь. События типа "WorkbookBeforeOpen" в нем нет.
Владимир
VBA. Удаление строк, в которых непустая ячейка в столбце
 
Добрый день! Удаление несмежных строк - долгий процесс, независимо от того, получены ли они методом Union (медленным), автофильтром или методом Range.SpecialCells.
Владимир (ZVI) еще в 2009 году (или раньше?) предложил отсортировать строки исходного диапазона по признаку удаления, а затем применить одно удаление уже смежных строк (см. #6). Даже для миллиона строк такой подход занимает секунды. В ссылке из сообщения Игоря #8 автор на stackoverflow в 2015 году "переоткрывает" этот метод.
Изменено: sokol92 - 23 сен 2020 19:28:20
Владимир
Me.TextBox3.Value="" определяется как числовое значение
 
Здравствуйте, Игорь, коллеги! Тут есть один "хитрый" момент, который заключается в том, что свойство Value объекта Textbox имеет тип Variant, в отличие от свойства Text, которое имеет тип String. Если бы в #1 использовалось свойство Text вместо Value, то возникла бы ошибка преобразования типа (проверьте!).
VBA по-разному сравнивает типы String c Integer (Long...) и Variant c Integer (Long...). В первом сравнении производится попытка преобразования текста в число, при невозможности возникает ошибка времени выполнения. Во втором случае при невозможности преобразования текста в число считается, что текст больше числа (как в языке формул Excel).

Если мы хотим гарантировать, что текст из Textbox может быть в VBA интерпретирован как число, то лучше в начале проверить свойство Value (или Text) с помощью функции IsNumeric.
Изменено: sokol92 - 23 сен 2020 16:27:45
Владимир
Хронология в Excel
 
В отписке
Владимир
Точки как граница ячеек по умолчанию. Как избавиться?
 
Файл Excelxx.xlb создается при модификации меню, ленты, панели быстрого доступа и т.д.
Если снос ветви реестра не помог, то не факт, что поможет переустановка офиса - сообщите о результате.
Изменено: sokol92 - 21 сен 2020 13:47:11
Владимир
При протягивании формулы пропал выбор "только значения" или "только формат", Вместо этого теперь мини-окно с выбором варианта условного форматирования
 
Это может быть параметр Дополнительно / Распространять форматы и формулы при расширении данных
(в начале списка дополнительных параметров)
Изменено: sokol92 - 21 сен 2020 13:11:19
Владимир
Как избавиться от предупреждения «Файл уже используется», При открытии файла - я сам обрабатываю ситуация
 
Открывайте файл макросом.

Событие Workbook.Open возникает после того, как файл открыт.
Владимир
Точки как граница ячеек по умолчанию. Как избавиться?
 
Можно попробовать пойти по сокращенному пути.
1. Удалить ветку реестра \HKEY_CURRENT_USER\Software\Microsoft\Office
2. Удалить папку (с подпапками) C:\Users\ВашеИмяl\AppData\Roaming\Microsoft\Excel (если там есть что-то нужное, то предварительно скопировать)

3. Стартовать Excel
Изменено: sokol92 - 21 сен 2020 12:13:02
Владимир
Перевести дату по-русски на дату по-английски одной формулой
 
Цитата
БМВ написал:
Хочу взглянуть в глаза тому
Кто из них ? :)  
Владимир
Перевести дату по-русски на дату по-английски одной формулой
 
Цитата
БМВ написал:
b форматирует с шагом
bbbb (или bb - 2 последние цифры) - год по тайскому календарю (интуиция Михаила не подводит).
ggge используется для года в японском календаре. Не понял, чем это отличается от григорианского года.

Полезная информация здесь.
Владимир
Какие возможные причины не "срабатывания" условного форматирования., Условное форматирование по формуле не работает.
 
Забудьте на минуту про условное форматирование. Просто отлаживайте формулу.
Владимир
Перевести дату по-русски на дату по-английски одной формулой
 
Самое смешное, что в VBA нет проблем с локализацией символов форматирования:
Код
Sub test()
  Debug.Print Application.Text(Now(), "[$-409]DDDD, MMMM DD, YYYY")
End Sub
Владимир
Какие возможные причины не "срабатывания" условного форматирования., Условное форматирование по формуле не работает.
 
Вам самому это проще выяснить. Выведите на проблемном компьютере результат формулы из #1 в другой ячейке. Если формула выдает "ЛОЖЬ", то проанализируйте по шагам.
Владимир
Выпадающий список (проверка данных) - создать макросом, В списке имеются запятые и точки с запятой
 
Все-таки, чем Вас не устраивает диапазон ячеек для списка проверки? Вы же можете держать этот диапазон в скрытом столбце.

Судя по предыдущим темам, у Вас Excel 2007. Список для проверки в этой версии сохраняется с разделителем запятая, независимо от региональных настроек. Соответственно, Вы получаете эффект, описанный в сообщении #1.
Владимир
После обновления Excel 2016 макрос не сохраняет данные в сети
 
В файле формируется такой путь для сохранения:
\\0.0.0.0\MontazhVeles\СМУ-ТТЗаявка 144 P-18107_1-063A5A-H-WT.xlsx
Вряд ли это правильно.
Владимир
Как запретить преобразование числа в переменной VBA в экспоненциальный формат
 
Цитата
Borrusale написал:
меня интересует значение переменной которая создается в коде VBA
Еще раз - свойство Range.Value всегда возвращает числа (любые, целые в том числе) в формате double.
Владимир
Как запретить преобразование числа в переменной VBA в экспоненциальный формат
 
Число в ячейке Excel всегда хранится в формате double (как и в переменной VBA после присвоения). Excel в отладчике показывает значение переменной в экспоненциальной форме (считая в даном случае такой вид оптимальным для пользователя). Если Вы в ячейке выберете числовой формат с 0 знаков после запятой, то увидите значение ячейки в "обычной" форме.
Владимир
Склонение ФИО, изменение падежей
 
Так кто же будет ударения ставить? :)

Для решения нужны таблицы имен и (некоторых) фамилий. Как иначе (без таблиц) узнать:

Зайца->Заяц  Подгайца->Подгаец


Проблем немало.
Владимир
Не строится график после преобразования csv в xlsx, Не строится график после преобразования csv в xlsx
 
По выравниванию ячеек видно, что в первом столбце  - даты, во втором и третьем - тексты (а не числа). На форуме есть много сообщений, как правильно открывать (импортировать) файлы csv.
Владимир
Точки как граница ячеек по умолчанию. Как избавиться?
 
Попробуйте на проблемном компьютере зайти под другим пользователем. Проблема сохраняется?
Владимир
VBA обработка событий элемента OptionButton, внедренного на лист Excel
 
Старайтесь не пользоваться элементами управления ActiveX.
Проблема со шрифтами исправима: в свойствах элемента управления, Font, выбираете в списке "Набор символов" - Кириллица.
Владимир
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 100 След.
Наверх