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

Страницы: 1
API функция SHMessageBoxCheckA, Как ею пользоваться?
 
Здравствуйте. Не могу разобраться с функцией SHMessageBoxCheckA. Покажите пожалуйста пример.
Должно выглядеть примерно так:

Пробовал так:
Код
Private Declare Function SHMessageBoxCheck Lib "shlwapi" Alias "#185" (ByVal hWnd As Long, _
    ByVal lpszText As String, ByVal lpszTitle As String, ByVal dwType As VbMsgBoxStyle, _
    ByVal iDefault As Long, ByVal lpszId As String) As Long

Sub testMSGCHK()
    Dim message As Long
    message = SHMessageBoxCheck(ActiveWindow, "Text", "Title", vbOKCancel, vbOK, "{d9118bc3-8a61-4398-bfbc-b02102c77e8a}")
    Debug.Print message
End Sub
VBA. Regex патерн для кириллицы с украинскими символами, Возникла не очевидная проблема с регулярным выражением
 
Всем привет, особенно землякам украинцам.
Столкнулся с мало заметной деталью в регулярных выражениях, мне нужно было, чтобы паттерн захватывал(точнее не трогал) всю кириллицу и еще плюс некоторые символы добавленные вручную, текст большой, смотрю вроде при вставке текста в текстбокс ничего не изменилось, в котором на событие Change, как раз и срабатывает Regex, но результат выдавало кривой, там каждый символ был важен.  Аж после сравнения длины строки выяснилось, что после вставки моего текста в текстбокс пропадает пару символов, штук 5 примерно, потом посимвольно проверил и обнаружил недостачу наших украинских букв, короче намучался чуток.
В итоге паттерн стал выглядеть так: "[^A-Za-zА-Яа-яЁёЄєҐґЇїІі0-9_ ]" & ...

P.S. Про коды символов знаю и что эти самые буквы находятся отдельно, но как-то не сталкивался раньше, знаю стандартный паттерн для кириллицы [А-Яа-яЁё] и мне его хватало, а тут попал на, так сказать, подводный камень... Может кому пригодится когда-нибудь.
VBA. Сравнение двух текстовых строк
 
Всем доброго времени суток. Хотел добавить коментарий к теме "Поиск отличий в 2 текстовых строках" в разделе "ПРИЕМЫ", но сайт(или кто другой) принимает меня за спамера:

Неприятно однако...
Добавлю сюда, может кому пригодится.

Код

Примеры результата:
Вариант1

Вариант2
Необычный вид файлового диалога в Excel
 
Всем доброго времени суток. Подскажите пожалуйста, может кто стакивался, был в Excel-e(2010) нормальный вид файлового диалога, после того как снес офис(2016) в Excel-e(2010) при подключении некоторых надстроек стали появляться сообщения, типа нехватает каких-то библиотек. Ладно, переустановил офис(2010) сообщения о недостающих библиотеках пропали, но именно в Excel-e(2010) файловый диалог приобрел такой старый вид.  В Word-e нормально, а в Excel-е сломался.
Может где в реестре, что сломалось...? Кто знает, подскажите пожалуйста.
Нормальный вид:

Ненормальный вид:

———
UPD:
Решил проблему путем восстановления системы, но воспрос актуален, почему только в Excel все файловые диалоги приобрели стиль WinXP и как это настраивается, уверен, что есть такая настройка(в системном реестре), но где именно...
Изменено: DANIKOLA - 29.12.2022 08:42:55
Массовое создание папок
 
Всем доброго времени суток. Возможно на нашей планете(Excel) найдутся люди, которым иногда нужно создавать много однообразных папок с датой в имени или счётчиком плюс какие-либо префиксы/суффиксы, в общем рутина. Данная мини-программа создана для решения этой задачи. Конечно эта программа, скорее всего адресована новичкам или людям мало знакомым с VBA.

Работа в режиме «Дата»: выбираем начальную и конечную даты настраиваем формат даты, если нужно, в нем же можно добавлять свои префиксы и суффиксы по потребности, по умолчанию выставлен формат 01.12.2021, так же можно задать шаг с которым папки будут создаваться, типа: 01.12.2021, 03.12.2021, 05.12.2021…

Работа в режиме «Счётчик»: все точно так же, выбираем начальное и конечное числа, задаем формат…
*Если в форматировании даты или числа потребуется добавить латиницу, то обратите внимание на предпросмотр результата см. снизу красным, так-как некоторые латинские символы(c,d,e,h,m,n,q,s,w,y) участвуют в форматировании и даты, и чисел. Чтобы использовать эти символы, как обычный текст – каждый из них нужно экранировать левым слешем(\), типа: \M\y \t\ex\t dd.MM.yyyy, чтобы получить My text xx.xx.xxxx

Работа в режиме «Вручную»: просто печатаем имена папок через запятую.

Исходный код прилагается:Folders_creator_SourceCode.txt (17.97 КБ)
И сама программа:Folders creator.zip (132.83 КБ)

Создано в среде Visual Studio 2013 на языке Visual Basic, который в общем мало чем отличается от VBA. Портативная программа exe-файл.
Изменено: DANIKOLA - 24.10.2022 18:50:27 (Дополнил описание)
VBA. Выделение искомого текста в выбранном диапазоне ячеек
 
Всем доброго времени суток. Этот макрос является ответом на вопрос: "Как выделить искомое слово в ячейках? Именно слово, а не ячейку". Может кому-то пригодится.

Не совсем слово, скорее всего текст...
---UPD---
Цитата
Jack Famous написал:
Было бы удобнее оценить код
Вот пожалуйста:
Code
Изменено: DANIKOLA - 04.09.2022 13:10:26 (Добавил код по просьбе Jack Famous)
VBA. Убегает от курсора динамически добавляющийся ListBox, Пользовательский Intellisense в TextBox-e
 
Всем доброго времени суток. Вопрос знатокам UserForms VBA. Пробую сделать свой intellisense, типа как редакторе vba. При увеличении длины строки убегает вправо ListBox, кто знает как решить данную проблемку, помогите пожалуйста.

Может еще, кто знает, как этому ListBox-у назначить событие, чтобы впоследствии выбранный Item вставить на позиции курсора TextBox.SelStart
P.S. Задача не срочная и не для работы, так для общего развития и знания возможностей VBA.
VBA. Run-time error -1072896658 Указанная кодировка не поддерживается, Парсинг сайта
 
Здравствуйте, после восстановления сайта парсер перестал работать. Помогите пожалуйста.
Файл на гул-диске и на яндекс-диске(размер файла больше допустимого).

Кусок сода

UPD:
Игорь,  спасибо большое за помощь, но в процессе выскочила другая ошибка, завтра поиграюсь попробую решить задачу самостоятельно.
Изменено: DANIKOLA - 29.03.2022 21:56:51 (Добавлен ответ Игорю)
VBA. Вывод сообщения в системный трей Windows, Два варианта кода: попроще и сложный
 
Кто пользуется торрентом, к примеру как я, тот часто видит уведомление такого типа:

Кому интересно, как это сделать на vba, вот код попроще(Module2):
Код
Public Function Notify(ByVal title As String, ByVal msg As String, _
        Optional ByVal notification_icon As String = "Info", _
        Optional ByVal app As String = "excel", _
        Optional ByVal duration As Integer = 10)

    'Parameters:
    '    title (str):Notification title
    '    msg (str):Notification message
    '    notification_icon (str):Notification icon. Available options are: Info, Error and Warning
    '    app (str):Process name of app you want to be display in the system tray icon
    '    duration (int):Duration of notification in seconds

    Const PSpath    As String = "powershell.exe"

    Dim WsShell     As Object: Set WsShell = CreateObject("WScript.Shell")
    Dim strCommand  As String

    If notification_icon <> "Info" And notification_icon <> "Error" And notification_icon <> "Warning" Then
        notification_icon = "Info"
    End If

    strCommand = """" & PSpath & """ -Command " & Chr(34) & "& { "
    strCommand = strCommand & "Add-Type -AssemblyName 'System.Windows.Forms'"
    strCommand = strCommand & "; $notification = New-Object System.Windows.Forms.NotifyIcon"
    strCommand = strCommand & "; $path = (Get-Process -id (get-process " & app & ").id).Path"
    strCommand = strCommand & "; $notification.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)"
    strCommand = strCommand & "; $notification.BalloonTipIcon  = [System.Windows.Forms.ToolTipIcon]::" & notification_icon & ""
    strCommand = strCommand & "; $notification.BalloonTipText = '" & msg & "'"
    strCommand = strCommand & "; $notification.BalloonTipTitle = '" & title & "'"
    strCommand = strCommand & "; $notification.Visible = $true"
    strCommand = strCommand & "; $notification.ShowBalloonTip(" & duration & ")"
    strCommand = strCommand & " }" & Chr(34)

    WsShell.Run strCommand, 0, False

End Function

Public Sub Notify_Examples()

    Notify "Insert Title Here", "Insert Your Message Here"
'    Notify "Insert Title Here", "Insert Your Message Here", "Warning"
'    Notify "Insert Title Here", "Insert Your Message Here", "Error", "outlook"

End Sub

Сложный код см. в файле:
Изменено: DANIKOLA - 03.12.2021 17:53:57
Excel VBA. Групповое переименование файлов, на листе Excel
 
Здравствуйте. Может кому будет интересно.
С помощью обычных текстовых функций, с дополнительными столбцами или без них, выводим новое имя файла в колонку "Новое имя файла", не забываем про расширение файла, т.е., чтобы оно не "потерялось", так-как я не делал "защиту от дурака".
! Переименовываемые файлы не должны быть открыты в других программах или в самом Екселе, иначе будет ошибка.
Изменено: DANIKOLA - 05.09.2021 22:45:32
Горизонтальный фильтр на VBA
 

Здравствуйте. Где-то недавно встречал вопрос по горизонтальной фильтрации, сразу ответить на него не смог  так как был занят, но идея мне показалась интересной. Кому интересно смотрите, тестируйте,  переделывайте макрос под ваши нужды.

Изменено: DANIKOLA - 07.05.2021 07:53:13
Присвоение ID категории к товарам по ключевым словам из ячейки
 
Доброго времени суток. Хочу чтобы функция Instr не учитывала регистр, ставлю vbTextCompare и вылетает ошибка. Помогите пожалуйста.
Код
Sub SelectIdCategory()
    Dim i As Long, j As Long, l As Long, LastRowTovary As Long, LastRowCategory As Long, Tmp, Counter As Integer
    Dim Vremennaya
    LastRowCategory = Sheets("Категории").Cells(Rows.Count, 1).End(xlUp).Row
    LastRowTovary = Sheets("Товары").Cells(Rows.Count, 1).End(xlUp).Row
    Application.ScreenUpdating = False
    For i = 2 To LastRowCategory '-цикл по столбцу категории
            Tmp = Split(Sheets("Категории").Cells(i, 3).Text, ";") '
        For j = 2 To LastRowTovary 'цикл по товарах
            If IsEmpty(Sheets("Категории").Cells(i, 3)) Then Exit For
'            Tmp = Split(Sheets("Категории").Cells(i, 3).Text, ";") '
'            Vremennaya = UBound(Tmp)
            For l = 0 To UBound(Tmp) '
                Vremennaya = CStr(Tmp(l))
                If InStr(Sheets("Товары").Cells(j, 1).Text, Tmp(l), vbTextCompare) > 0 Then '
                    Counter = Counter + 1 '
                End If
            Next l
            If Counter = UBound(Tmp) + 1 Then ' Если все ключевые слова присутствуют в ячейке
                Sheets("Категории").Cells(i, 1).Copy Sheets("Товары").Cells(j, 2) 'то копируем id категории
'                Tmp = Empty
                Counter = 0
            End If
            Counter = 0
        Next j
    Next i
End Sub
VBA. Деактивация элементов лены в надстройке, Сделать не активными элементы надстройки, если не открыта ни одна книга
 
Вопрос решен. Решение ниже.

Большое спасибо всем откликнувшимся.
Изменено: DANIKOLA - 28.05.2020 11:43:01
Макрос, сохраняющий картинки с активного листа в выбранную папку, некорректная работа макроса
 
Всем доброго времени суток!

Сделал макрос, который сохраняет картинки с активного листа Excel в выбранную пользователем папку. В версиях Excel 2010 и Excel 2013 все работает без нареканий, а вот в Excel 2016, независимо от ОС(Win10 64-bit или Win7 32-bit), вместо картинок сохраняет белые квадраты.
Вопрос знатокам VBA: есть ли решение  этой проблемы?
Код
Option Explicit
Private Sub btnOk_Click()
    If Me.CheckBoxChoosePicturesNames = True Then
        Call NamesPictFromCells
    Else
        Call NamesPictDefault
    End If
End Sub
Private Sub NamesPictDefault()
    If Me.txtFolderPath = "" Then
        MsgBox "Выберите папку для сохранения картинок."
        Exit Sub
    End If
    If ActiveSheet.Shapes.Count = 0 Then
        MsgBox "А картинок то нету!"
        Exit Sub
    End If
    Me.Label3.Visible = True
    Dim i As Long, ActiveRow As Long, strFileName As String
    For i = 1 To ActiveSheet.Shapes.Count
    DoEvents
            Me.Repaint
            Me.LblProgress.Width = 130 / 100 * Int(i / ActiveSheet.Shapes.Count * 100)
            Me.LblProgress.Caption = Int(i / ActiveSheet.Shapes.Count * 100) & "%"
            '-----------------------------------
        If ActiveSheet.Shapes(i).Type = 13 Then
        ActiveSheet.Shapes(i).Copy
        strFileName = ActiveSheet.Shapes(i).Name
            
            With ActiveSheet.ChartObjects.Add(0, 0, ActiveSheet.Shapes(i).Width, ActiveSheet.Shapes(i).Height).Chart
                .Paste
                .Export Filename:=Me.txtFolderPath & "\" & strFileName & Me.CmbFormatImage
                .Parent.Delete
            End With
        End If
    Next i
    If Me.CheckBoxOpenFolder = True Then OpenFolder
'    Unload Me
End Sub

Private Sub NamesPictFromCells()
    If Me.txtFolderPath = "" Or Me.txtNumberColumn = "" Or Not IsNumeric(Me.txtNumberColumn.Value) Then
        MsgBox "1. Выберите папку для сохранения картинок." & vbCrLf & "2. Укажите номер колонки с именами файлов."
        Exit Sub
    End If
    If ActiveSheet.Shapes.Count = 0 Then
        MsgBox "А картинок то нету!"
        Exit Sub
    End If
    Me.Label3.Visible = True
    Dim i As Long, ActiveRow As Long, strFileName As String
    For i = 1 To ActiveSheet.Shapes.Count
    DoEvents
            Me.Repaint
            Me.LblProgress.Width = 130 / 100 * Int(i / ActiveSheet.Shapes.Count * 100)
            Me.LblProgress.Caption = Int(i / ActiveSheet.Shapes.Count * 100) & "%"
            '-----------------------------------
        If ActiveSheet.Shapes(i).Type = 13 Then
        ActiveRow = Range(ActiveSheet.Shapes(i).TopLeftCell.Address(False, False)).Row
        ActiveSheet.Shapes(i).Copy
        strFileName = Replace_symbols(Cells(ActiveRow, Val(Me.txtNumberColumn.Value)))
            If strFileName = "" Then
                MsgBox "Кажется указан не правильный номер колонки!": Exit Sub
            End If
            With ActiveSheet.ChartObjects.Add(0, 0, ActiveSheet.Shapes(i).Width, ActiveSheet.Shapes(i).Height).Chart
                .Paste
                .Export Filename:=Me.txtFolderPath & "\" & strFileName & Me.CmbFormatImage
                .Parent.Delete
            End With
        End If
    Next i
    If Me.CheckBoxOpenFolder = True Then OpenFolder
'    Unload Me
End Sub
Private Function Replace_symbols(ByVal txt As String) As String
    Dim St As String, i As Integer
    St = "\/:*?" & Chr(34) & "<>|"
    For i = 1 To Len(St)
        txt = Replace(txt, Mid(St, i, 1), "_")
    Next
    Replace_symbols = txt
End Function

Private Sub Image1_Click()
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        If .Show <> False Then
            Me.txtFolderPath.Text = .SelectedItems(1)
            SaveSetting "ExtractPicture", "FolderPath", "myPath", frmExtractPictures.txtFolderPath.Text
        End If
    End With
End Sub

Private Sub txtNumberColumn_Change()
    SaveSetting "ExtractPicture", "FolderPath", "CoumnNumber", frmExtractPictures.txtNumberColumn
End Sub

Private Sub UserForm_Initialize()
   Me.Label3.Visible = False
   Me.LblProgress.Width = 0
   Me.txtFolderPath.Text = GetSetting("ExtractPicture", "FolderPath", "myPath")
   Me.txtNumberColumn.Text = GetSetting("ExtractPicture", "FolderPath", "CoumnNumber")
   With CmbFormatImage
    .AddItem ".jpg"
    .AddItem ".png"
    .AddItem ".bmp"
    .AddItem ".gif"
    .ListIndex = 0
   End With
End Sub
Private Sub OpenFolder()
    Shell "explorer.exe " & Me.txtFolderPath, vbMaximizedFocus
End Sub
Private Sub CheckBox1_Change()
    Call ChangeRefStyle
End Sub

Private Sub ChangeRefStyle()
'макрос изменения стиля ссылок в текущей книге
    If Application.ReferenceStyle = xlA1 Then
        Application.ReferenceStyle = xlR1C1
    Else
        Application.ReferenceStyle = xlA1
    End If
End Sub
Файл прилагается:
Страницы: 1
Наверх