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

Страницы: 1
Отображение формата процентов в ListBox
 
Добрый вечер всем !

Столкнулся с проблемой - значения ячеек в формате % некорректно отображаются в ListBox формы
в ячейке например 10%  - в ListBox отображается 0,10
в ячейке например 25%  - в ListBox отображается 0,25

Пробую загнать в форму код
Код
Private Sub UserForm_Initialize()
Dim  i As Long
With Me.ListBox1
'      For i = .ListCount - 1 To 0 Step -1
      For i = 0 To 5
         .List(i, 0) = (Format(.List(i, 0), "0%"))
      Next i
End With
  

отображать начинает шестизначные числа и пр - как можно правильно наладить в ListBox отображение % ?
Ввод уникального неповторяющегося номера строки по условию
 
Добрый вечер всем !
В книге 2 листа: лист "УчетДокументов" и лист "Выполнено"
В столбце А обоих листов находится нумерация строк - при этом нумерация уникальна:
те на обоих листах нет повторяющихся (одинаковых) номеров

Как на листе "УчетДокументов" в столбце А в первую незаполненную ячейку внести уникальный номер по условию:
собрать все номера внесенные на обоих листах в столбце А, вычислить последний самый больший номер N и присвоить в новую строку
номер N+1  ?

Макрос начал делать - но пока только определение 1 незаполненной ячейки
Код
Sub ПронумероватьСтолбецА()
Application.ScreenUpdating = False 'чтоб не моргало выключаем скрин
 Application.EnableEvents = False

 Dim i As Long, LastRow As Long
 LastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Cells(LastRow + 1, 1).Select
 
 'Cells(LastRow + 1, 1).Value = ..... макрос выбора уникального номера ....
 


Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub


Файл с примером прилагаю.
Нестрогий поиск - не учитывать спецсимволы и пробелы
 
День добрый всем !

Есть макрос поиска по InStr- нашел на просторах инета приспособил под свои нужды
По значению TextBox1 ищет совпадающие значения в столбце B и показывает нужные строки с совпадающими значениями (остальные скрывает)
Код
Sub Поиск ()
    Dim strText As String, arr()
    Dim lr As Long, i As Long, x
    Rows.Hidden = False
    strText = ActiveSheet.OLEObjects("Textbox1").Object.text
    If strText = "" Then
        Exit Sub
    End If
    lr = Cells(Rows.Count, "B").End(xlUp).Row
    arr() = Range("B1:B" & lr).Value
    For i = 4 To UBound(arr)
        If InStr(1, arr(i, 1), strText, vbTextCompare) = 0 Then
            Rows(i).Hidden = True
            Else
            Rows(i).Hidden = False
        End If
    Next i
    
    x = dhCountVisibleCells(Range("A5:S500"))
    If x = 0 Then
    Rows.EntireRow.Hidden = False
    MsgBox "Текст не найден !"
    Else
'    ActiveWindow.ScrollColumn = 8
    End If
End Sub

Вопрос в том что нужно сделать нестрогий поиск - исключить спецсимволы (кавычки, точки, тире и пр) и лишние пробелы (не дожны учитываться при поиске)
те както модифицировать строку
Код
If InStr(1, arr(i, 1), strText, vbTextCompare) = 0 Then

чтоб не учитывал при поиске регистр,спецсимволы и лишние пробелы ?
Например: в TextBox1 строка для поиска:  Шкаф     Белый
найдет  шкаф "белый"
Выравнивание текста в TextBox формы по вертикали
 
Доброго дня всем !

Как выровнять текст в TextBox формы по вертикали - только по горизонтали есть
Наткнулся на код в форму на ресурсе  Здесь
Код выглядит так
Код
Private Type RECT
        Left   As Long
        Top   As Long
        Right   As Long
        Bottom   As Long
End Type
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA " ( _
        ByVal hwnd As Long, _
        ByVal wMsg As Long, _
        ByVal wParam As Long, _
        lParam As Any) As Long
Private Const EM_GETRECT = &HB2
Private Const EM_SETRECTNP = &HB4

Sub VerMiddleText(mText As TextBox)
        If mText.MultiLine = False Then Exit Sub
        Dim rc     As RECT, tmpTop       As Long, tmpBot       As Long
        SendMessage mText.hwnd, EM_GETRECT, 0, rc
        With Me.Font
            .Name = mText.Font.Name
            .Size = mText.Font.Size
            .Bold = mText.Font.Bold
        End With
        tmpTop = ((rc.Bottom - rc.Top) - _
                (mText.Parent.TextHeight("H ") \ Screen.TwipsPerPixelY)) \ 2 + 2
        tmpBot = ((rc.Bottom - rc.Top) + _
                (mText.Parent.TextHeight("H ") \ Screen.TwipsPerPixelY)) \ 2 + 2
        rc.Top = tmpTop
        rc.Bottom = tmpBot
        mText.Alignment = vbCenter
        SendMessage mText.hwnd, EM_SETRECTNP, 0&, rc
        mText.Refresh
End Sub

Private Sub Form_Load()
        VerMiddleText (text1)
End Sub

Только не понял как запустить  - непонятен этот кусок
Код
Private Sub Form_Load()
        VerMiddleText (text1)
End Sub

Заменил на это
Код
Private Sub UserForm_Activate()
Dim text1 As String
text1 = TextBox1.Value
VerMiddleText (text1)
End Sub

MultiLine в True поставил
Но выдает ошибку на переменную text1
Как поправить код чтоб работал ?

Файл приложил с примером
Вставить скопированную строку на защищенном листе макросом
 
Доброго дня всем !

Не могу побороть проблему вставки строк после копирования макросом на защищенном листе.
Выдает ошибки при вставке (копируется нормально).
Защиту снимаю, в коде все перепробовал начиная от ActiveSheet.Paste и заканчивая Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.Locked = False и On Error Resume Next тоже применял - бесполезно
Кто что подскажет как справится с проблемой ?
Макрос и файл с примером прилагаю.
Код
Sub ПоставитьЗащитуЛиста()
ActiveSheet.Protect Password:="123", UserInterfaceOnly:=True, _
DrawingObjects:=True, Contents:=True, Scenarios:=True, _
AllowInsertingRows:=True, AllowDeletingRows:=True
End Sub
Код
Sub ВставитьСтроку()
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.Unprotect Password:="123"
'ActiveCell.EntireRow.Select
'Selection.Locked = False
'On Error Resume Next
'ActiveSheet.Paste
'Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteAll
'Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
'Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteValues
'Rows(ActiveCell.Row).PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect Password:="123", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingRows:=True, AllowDeletingRows:=True
'On Error GoTo 0
Application.EnableEvents = True
'Application.ScreenUpdating = True
End Sub
Изменено: andreyka33 - 21.05.2019 13:07:42
Условие на стирание или изменение внесенных данных в активной ячейке
 
Здравствуйте !

В ячейки диапазона D4:D50 вносятся данные. После внесения данных в активную ячейку идет переход в другие ячейки на листе.

Можно ли сделать такое условие на стирание или изменение внесенных данных в активной ячейке:
Разрешить изначально вносить и потом дополнять внесенные данные в ячейке
но  запретить  стирать частично или полностью уже внесенные данные через MsgBox
"Вы пытаетесь изменить введенные данные !  Изменить или удалить внесенные данные ?"
Кнопка Да - данные меняются
Кнопка Нет - както вернутся к сохраненным в Target старым значениям

те вносить и дополнять данные в ячейке можно,
а стирать частично или полностью только через MsgBox ?
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(ActiveCell, Range("D4:D50")) Is Nothing Then

'''''вносить и дополнять данные в ячейке можно,
'''''а стирать частично или полностью только через MsgBox ?

Select Case MsgBox("Вы пытаетесь изменить введенные данные! Изменить или удалить внесенные данные ?", 33, "Предупреждение !") 
Case 1 ' Ок

Case 2 ' Отмена 

End Select

End If
End Sub 
Изменено: andreyka33 - 22.05.2018 21:09:46
Пропадает выделение ячейки при использовании CommandButton
 
Добрый вечер всем !

Проблема в том что по CommandButton (созданный в ActiveX) во время выполнения макроса не видно (или снимается?) ранее выделенная активная ячейка на листе
При запуске того же макроса с помощью фигуры выделение ячейки видно и не меняется.

Перебрал свойства CommandButton - ничего не нашел  что блокирует выделение активной ячейки во время выполнения макроса  - что это и как поправить ?

Выделить ячейку и смотреть ее выделение при выполнениии макроса  выложил  в файле-примере:
с помощью CB - выделение пропадает
с помощью фигуры - выделение остается во время выполнения макроса
Изменено: andreyka33 - 02.05.2018 22:25:45
Создать кнопку с закругленными краями
 
Добрый день всем !

Возникла необходимость создать квадратную кнопку Command Button со скругленными углами
через Разработчик - Вставить - Элементы ActiveX - Кнопка

В настройках Command Button не нашел как скруглить углы - загуглил - нашел архив с элементами управления
(архив во вложении) вроде как можно сделать хоть круглую кнопку
Предварительно в Excel2016 - Центр управления безопасности -Параметры ActiveX - Включить все элементы управления


Теперь добавляю элементы управления
Разработчик - Вставить - Элементы ActiveX - Другие элементы управления - Зарегестрировать настраиваемый
Выбираю из распакованного архива элемент ActiveX  файл Free.ocx
Ругается при добавлении - Не удается зарегестрировать этот обьект

Что не так делаю и как сделать квадратную кнопку со скругленными углами ?
Удаление гиперссылки у заданной автофигуры
 
Добрый вечер всем !

Была задачи
1)макросом 1 поставить гиперссылку в автофигуру (гиперссылка на активную ячейку)
2)макросом 2 удалить гиперссылку из этой автофигуры

С Макрос1 вроде справился - гиперссылку вставляет по адресу активной ячейки
Код
Sub Макрос1()
Dim i As Shape
If Not Intersect(ActiveCell, Range("D4:D500")) Is Nothing Then

Set i = ActiveSheet.Shapes("Picture 1")
a = ActiveSheet.Name & "!" & ActiveCell.Address
ActiveSheet.Hyperlinks.Add Anchor:=i, Address:="", SubAddress:=a, ScreenTip:="Всплывающая подсказка 1"
Set i = Nothing

End If
End Sub
а вот как удалить (Макрос2) конкректно из данной автофигуры - не получается
- полностью не удаляет - остается ссылка на книгу    (вариант удаления всех гиперссылок на листе не подходит - нужно именно на одну)
Код
Sub Макрос2()
Dim i As Shape

Set i = ActiveSheet.Shapes("Picture 1")
ActiveSheet.Hyperlinks.Add Anchor:=i, Address:="", SubAddress:="", ScreenTip:=""
Set i = Nothing

'удаляем записью из рекодера не работает и выделение фигуры не нужно
'ActiveSheet.Shapes.Range(Array("Picture 1")).Select
'Selection.ShapeRange.Item(1).Hyperlink.Delete

End Sub

Файл приложил

 
Изменено: andreyka33 - 01.05.2018 23:02:13
Запрет на ввод определенных значений в диапазон ячеек
 
Добрый вечер всем !

Помогите составить формулу для Проверка данных - Другой  для решения такого:

На листе Лист1 имеется диапазон ячеек P4:P200 куда вводятся данные.
На листе Лист2 имеется диапазон ячеек D2:D40 содержащий список значений (которые можно вносить на Лист1 в вводимый диапазон)
Другие значения (отличные от значений Лист2 !$D$2:$D$40) нельзя вносить на Лист1!$P$4:$P$200.

Решения типа Проверка данных - Список не подходит, тк дает сбоку от ячейки выпадающий список значений который не нужен.
Можно ли по другому - формулой через Проверка данных - Другой ?
Присвоить переменной значение между определенными словами в строке
 
Вечер добрый !

Как присвоить переменной значение состоящее из начального  и конечного слова (включительно) в строке ?
Например есть такие строки:
"Встреча будет назначена на период с 12 февраля до 7 марта по графику 1 квартал"
"Встреча уже назначена на период с 20 февраля до 1 марта по графику 1 квартал"
"Встреча возможно назначена на период с 16 апреля до 20 апреля по графику 2 квартал"
"Встреча назначена на период с 5 июля до 7 июля по графику 3 квартал"

те нужно взять в переменную часть строки: начинается со слова "период" и заканчивается словом "по графику" (значения между этими словами меняются)
Запомнить адрес ячейки при выходе из диапазона и вернуться в эту ячейку
 
Добрый вечер всем !

Во вложении пример с формой.
По кнопкам формы Вверх,Вниз перемещаемся в диапазоне F4:F31
По кнопке СТАРТ должны вернуться в ПОСЛЕДНЮЮ выделенную ячейку в диапазоне F4:F31 - если вышли из диапазона
Как запомнить адрес последней выделенной активной ячейки в диапазоне - если вышли из диапазона ?
Не знаю как это реализовать ...
Изменено: andreyka33 - 11.09.2017 21:38:35
Определить последнюю заполненную строку в ListBox
 
Вечер добрый всем !

Как определить последнюю заполненную строку в ListBox1 в форме  по аналогии
с
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row   ?
Вставка текста из формы в ячейку в положение курсора в тексте ячейки
 
Добрый вечер !

Возникла необходимость вставки текста из формы
в ячейку диапазона.
Сам макрос и форма работают,
положение вставляемого текста в ячейку определяется сейчас кодом формы - сейчас в конец текста.
А вот как в местоположение  курсора в тексте ячейки  вставить текст из формы ? Возможно это или нет-както отловить положение курсора в тексте ?  Пример с рабочей формой приложил.
Код
Private Sub ListBox33_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
a = ListBox33.Text
If Not Intersect(Range("A2:H1000"), ActiveCell) Is Nothing Then
    ActiveCell.Value = ActiveCell.Value & " " & a & "."
End If
End Sub
Изменено: andreyka33 - 28.08.2017 22:12:38
Как сделать текст жирным с опреденного значения в ячейке
 
Здравствуйте !

Есть текст в ячейках в диапазоне и в этих текстах встречается значение "//"
После "//" весь текст дб жирным до конца строки в ячейке  - кусок макроса такой
Код
Sub ЖирныйТекст()
Dim LastRow As Long, r As Long
LastRow = Cells(Rows.Count, 2).End(xlUp).Row
For r = 2 To LastRow

'как в этом месте прописать данное условие ?
If Cells(r, 2) Like "//" '''''''''''.Font.Bold 

End If
Next
End Sub
Выстроить значения столбцов B,C,D от значения в столбце A
 
Добрый день всем !
Столкнулся с проблемой как сделать корректно действие макросом - вопрос в п.3 (п1 и п2 - исходное состояние)
1)Столбцы B,C,D связаны записями между собой (как в автофильтре)
2)В столбце A исходные значения - совпадающие по тексту со столбцом В
3)Как сделать так - чтобы связанные значения столбцов B,C,D выстроились по принципу
от значения столбца А  = значение столбца В (те по совпадению с ячейками столбца А со столбцом В  выстроить строки B,С,D) ?
макросом
Вставка текста из ListBox в ячейку и форматирование вставляемого текста
 
Доброго дня всем !

Макрос вставляет строку текста  из ListBox1 вызываемой формы   в активную ячейку столбца E2:E500
те макрос работает  -  только как сделать чтобы строка текста  "Информация ТЕКСТ ЖИРНЫЙ :" из ListBox1 вставлялась  жирным (Bold),
остальные строки нормальным шрифтом.  Пока в ListBox как заготовка прописано так (пример во вложении):
Код
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
a = ListBox1.Text
If Not Intersect(Range("E2:E500"), ActiveCell) Is Nothing Then
If ListBox1.Text = "Информация ТЕКСТ ЖИРНЫЙ:" Then
ActiveCell.Value = ActiveCell.Value & " " & a
Else
ActiveCell.Value = ActiveCell.Value & " " & a
End If
End If
End Sub
Копирование отфильтрованного диапазона в новый лист новой книги
 
доброго дня всем !
макрос копирует данные таблицы из исходной таблицы - далее создается папка в директории файла и новый файл куда копируются значения и формат исходной таблицы
только незадача - просто значения копирутся нормально, а вот отфильтрованные значения в исходной таблице не копируются к сожалению
Что поправить в макросе ?
Код
Sub Copy()
Application.ScreenUpdating = False 'чтоб не моргало выключаем скрин
Application.DisplayAlerts = False

Call Создать_папку_ДАТА 'создаем папку ДАТА в корне файла

Dim strFileName As String 'имя файла который создаем Дата_27.02.2017_20.35.xls
strFileName = ThisWorkbook.Path & "\ДАТА\Дата_" & Format(Date, "dd.mm.yyyy") & "_" & Format(Time, "HH.mm") & ".xls"

Call КопированиеДанных 'копируем таблицу с отфильтрованными значениями
ActiveWorkbook.SaveAs strFileName

Application.CutCopyMode = False

Application.DisplayAlerts = True
Application.ScreenUpdating = True 'включаем скрин
End Sub

Sub КопированиеДанных()
    Workbooks.Add xlWBATWorksheet
    ActiveSheet.Name = "Результаты_копирования" 'обзываем лист новой книги
    ThisWorkbook.ActiveSheet.Range("A1:G500").Copy 'диапазон копирования
    ActiveSheet.[A1].PasteSpecial
    ActiveSheet.[A1].PasteSpecial xlPasteValues 'копируем значения
    ActiveSheet.[A1].PasteSpecial xlPasteFormats 'копируем формат
    ActiveSheet.[A1].PasteSpecial Paste:=xlPasteColumnWidths 'корпируем ширину столбцов
    ActiveSheet.Rows("1:500").EntireRow.AutoFit 'выравнивание высоты строки
End Sub

Sub Создать_папку_ДАТА()
    On Error Resume Next
    Const folder$ = "ДАТА" ' название основной папки
    MkDir ThisWorkbook.Path & "\" & folder$ ' создаём папку в директории, если её ещё нет
 End Sub

Вопрос по преобразованию ФИО в ячейке в фамилию с инициалами
 
Вечер добрый
Макрос включает функцию преобразования ФИО из активной ячейки в фамилию с инициалами в соседнюю ячейку
столкнулся с такой трудностью - исходные активные ячейки могут содержать не ФИО а организацию например в кавычках
как сделать условие (если текст в активной ячейке не содержит кавычки " и количество слов между пробелами равно трем =3 словам)
файл  с примером загрузил
Код
Function Фамилия_ИО$(Фамилия_Имя_Отчество$)   ' преобразует Иванов Иван Иванович —> Иванов И.И.
   Dim iArr, NotFirst As Boolean
   For Each iArr In Split(Application.Trim(Фамилия_Имя_Отчество))
      If NotFirst Then
         Фамилия_ИО = Фамилия_ИО & UCase$(Left$(iArr, 1)) & "."
      Else
         Фамилия_ИО = StrConv(iArr, vbProperCase) & " "
         NotFirst = True
      End If
   Next
   Фамилия_ИО = Trim(Фамилия_ИО)
End Function
Sub PreobrazovatText2()
'If (текст в активной ячейке не содержит кавычки " и количество слов между пробелами равно трем =3 словам )  Then
ActiveCell.Offset(0, 1).Value = Фамилия_ИО$(ActiveCell)
'Else
'Exit Sub
End Sub
Изменено: andreyka33 - 10.02.2017 20:24:16
Вставка закомментированых строк между переносами в макросе
 
Здравствуйте всем !

Как вставить закомментированые строки между переносами макроса ?
Если есть переносы в коде макроса, то закомментированные строки не вставить между ними к сожалению (макрос перестает работать) - есть ли выход из этой ситуации ?

Вот так не будет работать
Вставил закомментированные строки между переносами в макросе
Код
Private Sub ListBox5_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
a = ListBox5.Text
If Not Intersect(Range("A1:D100" _
'пробуем вставить закомментированную строку
, ActiveCell) Is Nothing Then _
'пробуем вставить закомментированную строку
    ActiveCell.Value _
'пробуем вставить закомментированную строку
   = ActiveCell.Value _ 
   & "." & " " & a
End If
End Sub

Какие еще способы закомментирования строк есть в VBA
как скрыть форму в панель задач макросом
 
Здравствуйте
На форме вывел значки скрыть и развернуть
Как скрыть форму макросом ( а не мышью по клику) не могу додуматься
пример приложил
Сортировка по столбцам в ListBox на форме
 
доброго дня

Есть форма UserForm1  в ней ListBox1  данные в листбокс  попадают с нескольких листов книги
В  ListBox1  четыре столбца  0- "Наим листа"  1-"Индекс листа"  2-"Адрес ячейки"  3-"Данные с листа"

Возникла необходимость отсортировать по возрастанию по 2-м колонкам 1-"Индекс листа"  2-"Адрес ячейки"

Как это сделать  в ListBox ?  Копировать полученные данные в ListBox-е на новый лист книги, там сортировать и обратно в ListBox запихивать  ?
Или можно как то средствами самого ListBox  сделать ?
Изменено: andreyka33 - 01.02.2017 13:17:03
Страницы: 1
Наверх