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

Страницы: 1 2 3 След.
Worksheet_SelectionChange с условием MsgBox
 
Как все просто!
Спасибо огромное!
Worksheet_SelectionChange с условием MsgBox
 
Привет мастерам.
Не могу понять в чем проблема при работе Worksheet_SelectionChange. Внутри построено условие со всплывающим сообщением (подтверждения выполнения), при нажатии "Да" все корректно работает, но при нажатии "Нет", то все просто перестает работает. Макрос "Worksheet_SelectionChange" больше не реагирует, пока не перезапустишь EXCEL
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    DateNameEvent Target, Range(Cells(3, 7), Cells(20, 7))
End Sub

Sub DateNameEvent(Target As Range, KeyCells As Range)
Application.EnableEvents = False
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
    If Cells(Target.Row, 7) <> "Выполнено" Then
        If MsgBox(Подтвердить выполнение " & "(" & Cells(ActiveCell.Row, ActiveCell.Column - 3).Value & ")" & "?" & Chr(13) & _
        "Исполнитель:" & Cells(ActiveCell.Row, ActiveCell.Column - 4).Value & ".", vbExclamation + vbYesNo, "Выполнение задания") = vbYes Then
            ActiveCell.Value = "Выполнено"
            ActiveCell.Interior.Color = 52224
            Cells(Target.Row, 6).Interior.Color = RGB(255, 255, 255)
            Cells(Target.Row, 24).Value = Application.UserName
            Cells(Target.Row, 25).Value = Date
            Cells(Target.Row, 26).Value = Time
        Else
            Exit Sub
        End If
        Else
        If MsgBox("Задание " & "(" & Cells(ActiveCell.Row, ActiveCell.Column - 3).Value & ") уже выполнено, убрать отметку" & "?" & Chr(13) & _
        "Исполнитель:" & Cells(ActiveCell.Row, ActiveCell.Column - 4).Value & ".", vbInformation + vbYesNo, "Выполнение задания") = vbYes Then
            ActiveCell.Value = "Подтвердить выполнение"
            ActiveCell.Interior.Color = 13497086
            Cells(Target.Row, 27).Value = Application.UserName
            Cells(Target.Row, 28).Value = Date
            Cells(Target.Row, 29).Value = Time
                If Cells(ActiveCell.Row, ActiveCell.Column - 1) < Date Then
                    Cells(Target.Row, 6).Interior.Color = 255
                End If
        Else
            Exit Sub
        End If
    End If
End If
Application.EnableEvents = True
End Sub
Изменено: slesarok - 18.11.2023 18:48:57 (Приложить файл)
Уникальные имена листов excel при обращении VBA
 
Да,
Код
iShCodeName = Worksheets(1).CodeName
Вытягивает уникальное имя листа, но также, как строку (параметр в кавычка) "Sheet1" и дальше, использовать эту переменную в коде я не могу, нужно избавиться от кавычек
Код
iShCodeName = Worksheets(1).CodeName
iShCodeName.Activate
Ошибка
Изменено: slesarok - 22.09.2023 11:25:01
Уникальные имена листов excel при обращении VBA
 
Подскажите пожалуйста на примере одного листа:
в VBA можно обращаться по
Код
'По уникальному имени
УникИмяЛиста
 
'По индексу
Worksheets(N)
 
'По имени листа на ярлычке
Worksheets("Имя листа")

к примеру:
(индекс листа) - 4
(названием листа) - NAME = Календарь
(уникальное название листа) - (Name) = Sheet13

Существует необходимость обращаться к листам по уникальному имени
Sheet13.Activate
Sheet13.Name = "ЛОПАТА" и прочее...

Как мне задать переменную для уникального имени листа, в коде она учитывается с кавычками, типо "Sheet13"
Randomize (RDN) зацикливается после 3-го раза
 
MCH, Ігор Гончаренко, спасибо большое!
Оба варианта отлично работают. На Ваших примерах поучусь работе случайных чисел!

Спасибо!
Randomize (RDN) зацикливается после 3-го раза
 
не может быть:
127
671
в первой строке встречаются 7,1
и во второй строке 7,1

Кстати, заметил, что если не установлен параметр
Код
Randomize
То
Код
rDig = Int(Rnd * 7 + 1)
Всегда первое значение - 5.
Почему?
Randomize (RDN) зацикливается после 3-го раза
 
Добрый день всем.


Задача состояла в том, чтобы в 3 столбца и 7 строк забить цифры от 1 до 7 случайным образом, с условием, что:
1. В строке не было повторяющихся чисел
2. Чтобы в разных строках не было по 2х одинаковым чисел

По сути, это рандомная жеребьевка 7ми команд при игре в круг (каждый с каждым) в день играет по 3 команды
756
514
246
613
127
523
347
Сразу предупрежу, что реализация "топорная", но все же работает. После запуска таблица выстраивается, но после 3-го запуска (именно 3-го) уходит в зацикл.
Подскажите в чем дело или что поправить
Код
Sub AxeRND()
Dim arr()
Range(Cells(1, 1), Cells(20, 3)).ClearContents
        For i = 1 To 3
Return1:
        rDig = Int(Rnd * 7 + 1)
            Cells(1, i) = rDig
                If Cells(1, 1) <> "" And Cells(1, 2) <> "" And Cells(1, 3) <> "" Then
                    If Cells(1, 1) = Cells(1, 2) Or Cells(1, 1) = Cells(1, 3) Or Cells(1, 2) = Cells(1, 3) Then
                        GoTo Return1
                    End If
                End If
        Next
    For j = 2 To 7
        'Randomize
Return2:
        For i = 1 To 3
        rDig = Int(Rnd * 7 + 1)

    LR = Cells(Rows.Count, 1).End(xlUp).Row
Erase arr
    arr = Range(Cells(1, 1), Cells(LR + 1, 3))
            Cells(j, i) = rDig
                If rDig = arr(j, 1) Or rDig = arr(j, 2) Or rDig = arr(j, 3) Then
                    GoTo Return2
                End If
        Next i
            For x = 1 To j - 1
                If ((Cells(j, 1) = arr(x, 1) Or Cells(j, 1) = arr(x, 2) Or Cells(j, 1) = arr(x, 3)) And (Cells(j, 2) = arr(x, 1) Or Cells(j, 2) = arr(x, 2) Or Cells(j, 2) = arr(x, 3))) Or _
                    ((Cells(j, 1) = arr(x, 1) Or Cells(j, 1) = arr(x, 2) Or Cells(j, 1) = arr(x, 3)) And (Cells(j, 3) = arr(x, 1) Or Cells(j, 3) = arr(x, 2) Or Cells(j, 3) = arr(x, 3))) Or _
                    ((Cells(j, 2) = arr(x, 1) Or Cells(j, 2) = arr(x, 2) Or Cells(j, 2) = arr(x, 3)) And (Cells(j, 3) = arr(x, 1) Or Cells(j, 3) = arr(x, 2) Or Cells(j, 3) = arr(x, 3))) Then
                    GoTo Return2
                End If
            Next
    Next j
End Sub
Закрыть файл с общим доступом у всех пользователей
 
Эксперты, сможет кто помочь?
Необходимо с различной периодичностью доступ к файлу ограничить (на время убрать), Но не всегда удобно всех обзванивать или кто-то открыл файл и ушёл. Поэтому вывел кнопку с закрытием файла у всех, код ранее где-то находил и он точно работал. Но потом, то ли я что-то поменял... То ли лыжи не те...

В общем сейчас код такой, но он закрывает файл только у меня. Или есть другие пути решения вопроса?
Код
Private Sub CloseSaveAll()
Dim MyPath$, MyName$
MyPath = ThisWorkbook.Path
MyName = ThisWorkbook.Name
    GetObject(MyPath & "\" & MyName).Close False
    ThisWorkbook.Close True
End Sub
Дать/снять общий доступ программно, Есть ли возможность убрать диалоговые окна?
 
Не могу найти правила загрузки файлов. Не грузятся
Какой формат нужен?
https://disk.yandex.ru/i/S8GrI_tdp7_r9g
Изменено: slesarok - 08.04.2022 09:37:38
Дать/снять общий доступ программно, Есть ли возможность убрать диалоговые окна?
 

Все же макрос работает на совсем корректно. Без профессиональной помощи не разберусь

На странице кнопка вызова определенного Меню

Код
Private Sub Admin_Menu_Click()
Admin_Menu_Initialize
Load Window_Menu
Window_Menu.Show vbModeless
End Sub

В меню только 1 Флаг "Общий доступ у книге"
При инициализации меню "Admin_Menu_Initialize" я проверяю в каком состоянии сейчас "Доступ книге", чтобы Флаг корректно отображался
1 - при Общем доступе
0 - при отсутствии

Код
Private Sub Admin_Menu_Initialize()
If ActiveWorkbook.MultiUserEditing = True Then
Window_Menu.ExclusiveAccess_CheckBox.Value = True
Else
Window_Menu.ExclusiveAccess_CheckBox.Value = False
End If
End Sub


При манипуляциях с Флагом (включить/выключить), код работает корректно (общий доступ работает, сохраняет в нужную директорию! !Но при условии, если прописано On Error Resume Next

'Действие при установки/снятии флажка "Включить общий доступ к книге"

Код
Private Sub ExclusiveAccess_CheckBox_Click()
Dim MyPath$, MyName$
MyPath = ThisWorkbook.Path
MyName = ThisWorkbook.Name
On Error Resume Next
If ExclusiveAccess_CheckBox.Value = False Then
Application.DisplayAlerts = False
ActiveWorkbook.ExclusiveAccess
Application.DisplayAlerts = True
Else
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs MyPath & "\" & MyName, AccessMode:=xlShared
Application.DisplayAlerts = True
End If
End Sub

Иначе ругается Method 'ExclusiveAccess' of Object '_Workbook' failed

Конечно все работает с On Error Resume Next, но хочется понимать, можно ли иначе, так сказать по правильному

Изменено: slesarok - 08.04.2022 09:31:58
Дать/снять общий доступ программно, Есть ли возможность убрать диалоговые окна?
 
Разобрался)
Код
'Действие при установки/снятии флажка "Включить общий доступ к книге"
Private Sub ExclusiveAccess_CheckBox_Click()
    Dim MyPath$, MyName$    MyPath = ThisWorkbook.Path
    MyName = ThisWorkbook.Name
Application.DisplayAlerts = False
    If ActiveWorkbook.MultiUserEditing Then
        ActiveWorkbook.ExclusiveAccess = True
    Else
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs MyPath & "\" & MyName, AccessMode:=xlShared
        Application.DisplayAlerts = True
    End If
End Sub
Дать/снять общий доступ программно, Есть ли возможность убрать диалоговые окна?
 
А тогда подскажите:
Я в User_Form сделал Флаг на быстрое переключение Общего доступа
Код
'Действие при установки/снятии флажка "Включить общий доступ к книге"
Private Sub ExclusiveAccess_CheckBox_Click()
Application.DisplayAlerts = False
    If ActiveWorkbook.MultiUserEditing Then
        ActiveWorkbook.ExclusiveAccess = True
    Else
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs AccessMode:=xlShared
        Application.DisplayAlerts = True
    End If
End Sub
И суть проблемы в том, что при выполнении
Код
ActiveWorkbook.SaveAs AccessMode:=xlShared
происходит сохранение файла в директорию по умолчанию (к примеру: C:\User\Documents) а не в тоже место, откуда был изначально открыт файл. Хоть с локального диска открытие файла, хоть с сетевого расположения.

Помогите решить вопрос!
Invalid Data format (невозможно открыть модуль VBA)
 
Добавил новый модуль в существующий файл, после некорректного закрытия выходит сообщение "Invalid Data format". То же самое сообщение при попытке открыть Модуль, пересохранить файл, импортировать модуль и прочее.

Если ли возможность восстановить написанное в данном модуле?

Файл весит 2Mb не могу прикрепить
Невозможно скопировать надстройку в библиотеку, Надстройка для общего пользования
 
Добрый день, форумчане!
Столкнулся с такой проблемой:
Создана надстройка XLAM, при запуске и установке ее с локального компьютера, отлично работает. Но если я её помещаю на общий диск, чтобы все сотрудники могли пользоваться (ну а также, чтобы можно было менять параметры и код надстройки для всех одновременно), то при добавлении ее, вылазит ошибка "Невозможно скопировать надстройку в библиотеку"
Добавляют надстройку > Файл > Параметры > Надстройки > Перейти > Обзор > Выбираю файл на общем диске > ошибка

Если добавить надстройку и она будет лежать на лбом локальном диске (С/D и тд), то проблем не возникает и надстройка устанавливается
В центре управления безопасности EXCEL все разрешил (вроде как). В интернете нет ничего похожего на решение.

Но! Самое главное, что неделю назад я работал на другом компе и на нем у меня получилось добавить эту надстройку по СЕТИ! Значит идея реализуема.
Теперь вопрос в том, как?
Изменено: vikttur - 26.06.2021 00:36:58
Добавить недостающие позиции при сравнении массива столбцов
 
Отлично! Я хотел понять этот алгоритм. Сейчас применю на своей оригинальном фалйе!
Спасибо!
Добавить недостающие позиции при сравнении массива столбцов
 
В файле пометил, как должно быть.
Спасибо!
Добавить недостающие позиции при сравнении массива столбцов
 
msi2102, Спасибо за ответ!
Но немного не так, по совпадению мне добавлять не надо, надо наоборот:
Если в правом столбце6 (номера) есть значение, а в левом столбце1 - нет, то добавить!

На примере сравнивания 2 столбцов:
Было
21
32
43
4
5
После сравнения стало
21
32
43
14
55
Изменено: slesarok - 30.06.2020 14:57:41
Добавить недостающие позиции при сравнении массива столбцов
 
Пытался загрузить, в любых форматах виснет загрузка на 90% и все (
Добавил файл. Посмотрите, пожалуйста
Сравнение двух столбцов одной книги и подстановка значений с помощью VBA
 
А как вставлять в конец столбца значения, которые не были найдены?
Добавить недостающие позиции при сравнении массива столбцов
 
Доброго всем времени суток.
Работая с большой базой таблиц, есть необходимость сравнивать множество параметров, написал код чтобы сравнивать значения, но не могу "допетрить" как осуществить добавление недостающих значений.
В реальном фале сравниваю много параметров, в приведенном примере ниже, всего по 3 столбца
Код
Sub Сравнить_и_добавить()
Dim i&, j&, x&, y&, LastRow_1&, LastRow_2&
Dim aaa()
Dim bbb()
    LastRow_1 = Cells(Rows.Count, 1).End(xlUp).Row
    LastRow_2 = Cells(Rows.Count, 6).End(xlUp).Row
ReDim aaa(LastRow_1 - 1, 2)
ReDim bbb(LastRow_2 - 1, 2)
'заполняем массивы данными
    For i = 0 To UBound(aaa)
                aaa(i, 0) = Cells(i + 1, 1) 'Номер1
                aaa(i, 1) = Cells(i + 1, 2) 'Дата1
                aaa(i, 2) = Cells(i + 1, 3) 'Условие1
    Next
    For j = 0 To UBound(bbb)
                bbb(j, 0) = Cells(j + 1, 6) 'Номер2
                bbb(j, 1) = Cells(j + 1, 7) 'Дата2
                bbb(j, 2) = Cells(j + 1, 8) 'Условие2
    Next
        
For y = 0 To UBound(aaa)
    For x = 0 To UBound(bbb)
        If InStr(bbb(y, 2), "IA") Then
            'если номер и дата совпадают
            LastRow_1 = Cells(Rows.Count, 1).End(xlUp).Row
            If bbb(x, 0) = aaa(y, 0) And bbb(x, 1) = aaa(y, 1) Then
                Cells(y + 1, 2).Font.Color = RGB(0, 0, 255)
            ElseIf bbb(x, 0) = aaa(y, 0) And bbb(x, 1) <> aaa(y, 1) Then
                Cells(y + 1, 2).Value = bbb(x, 1)
                Cells(y + 1, 2).Font.Color = RGB(255, 0, 0)
            End If
         End If
    Next
Next
End Sub

Алгоритм сравнивания:
1. Работаем если в столбце 8 есть параметр IA
2. Ищем номер из столбцов 6 в столбце 1
3. Если дата совпадает, то окрашиваем в синий, если нет, то заменяем и в красный

А вот как, если номера в столбце 1 нет! Как добавить в конец столбца?
Изменено: slesarok - 29.06.2020 12:32:10
При активной UserForm возможность работы с таблицей
 
Anchoret, Спасибо. Как все просто, почему не догадался то сам)
При активной UserForm возможность работы с таблицей
 
Вот код:
Код
Sub Find_Replace()
Set Cur_range = Application.Selection
Replace_Choose.Show 0

Ar_rb = Array(Val_rb1, Val_rb2, Val_rb3, Val_rb4, Val_rb5)
Ar_ra = Array(Val_ra1, Val_ra2, Val_ra3, Val_ra4, Val_ra5)
For Lr = 0 To 4
        Dat_rb = Ar_rb(Lr)
        Dat_ra = Ar_ra(Lr)
    If Dat_rb <> "" Or Dat_ra <> "" Then
Cur_range.Replace Dat_rb, Dat_ra, 2
End If
Next Lr
End Sub

Код UserForm:
Код
Private Sub CommandButton_Add_Click()Val_rb1 = Rep_before1.Value
Val_rb2 = Rep_before2.Value

*******

Val_ra4 = Rep_after4.Value
Val_ra5 = Rep_after5.Value
    Me.Hide
End Sub

Если Replace_Choose.Show (без нуля, немодальный режим), то все работает, на этой строчке открывается UserForm, куда заполняются данные что на что менять, после нажатия кнопки макрос возвращается в Sub Find_Replace и работает с массивом

Если Replace_Choose.Show 0 (модальный режим) макрос открывает форму, и сразу со строчки 3 перепрыгивает на строку 5 с массивом
Код
Ar_rb = Array(Val_rb1, Val_rb2, Val_rb3, Val_rb4, Val_rb5)
Работатет до конца, но значения то не введены
При активной UserForm возможность работы с таблицей
 
Anchoret,
Цитата
Anchoret написал:
1.Show 0
С таким параметром макрос некорректно работает, он перепрыгивает, может в какой то момент надо обратно его поменять?
При активной UserForm возможность работы с таблицей
 
Добрый вечер форумчане.
Искал в поиске и Гугле, не смог найти ответ, возможно, на мой простой вопрос.
На данном форуме нашел макрос массовой замены и решил его загнать в UserForm, чтобы данные оттуда вводить, все работает, но:
Когда активируется окно UserForm, то у меня нет возможности работать с самой таблицей на листе, допустим выделить ячейку, чтобы скопировать текст из неё и вставить его в поле Формы для замены. Как это можно сделать?
Пробовать в свойствах менять UserForm задавать ShowModal = False - Появляется возможность работы с таблицей, но макрос работает некорректно, а отследить не получается...
[img]file:///C:/Slesar/111.jpg[/img]
Помогите
Изменено: slesarok - 24.02.2019 15:47:52
Ускорение Макроса автоматической вставки Даты
 
Спасибо большое, действительно летает теперь)))
Ускорение Макроса автоматической вставки Даты
 
Доброе утро!
Файл во вложении
Ускорение Макроса автоматической вставки Даты
 
Убраны были все события:
Код
Sub Workbook_SheetChang
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Application.Calculation = xlManual
Application.Interactive = False
Application.ShowWindowsInTaskbar = False

****

end Sub

не помогает :(
Изменено: slesarok - 10.02.2019 16:42:06
Ускорение Макроса автоматической вставки Даты
 
Доброе утро всем!
Хочется ускорить макрос, который при изменению значения определенного столбца устанавливает в соседние текущую дату и имя пользователя компьютера:
Код
Sub DateName(Target As Range, KeyCells As Range)
    If Not Application.Intersect(KeyCells, Target) Is Nothing Then
        Target.Offset(0, 2).Value = Date
        Target.Offset(0, 3).Value = Application.UserName
        Target.Offset(0, 4).Value = Time
    End If
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
'столбец куда вносятся изменения
    Col_tag = Range("A1:AM5").Find("STATUS", , xlValues, xlWhole).Column
'столбец куда "вставляется" имя пользователя, чтобы потом его поменять
    Col_Sig = Range("A1:AM5").Find("Signature", , xlValues, xlWhole).Column
    lLastRow = Cells(Rows.Count, Col_tag).End(xlUp).Row
'при изменении столбца Col_tag, записываем дату, имя пользователя и время 
    DateName Target, Range(Cells(5, Col_tag), Cells(lLastRow, Col_tag))
'далее, для удобства идет переименование "имени пользователя" в реальное имя сотрудника
'для примера две замены, по факту их более 20
Range(Cells(5, Col_Sig), Cells(lLastRow, Col_Sig)).Replace What:="PC_USER1", Replacement:="IVAN IVANOV", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
        False, ReplaceFormat:=False
Range(Cells(5, Col_Sig), Cells(lLastRow, Col_Sig)).Replace What:="PC_USER2", Replacement:="PETR PETROV", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
        False, ReplaceFormat:=False

В общем код работает отлично, но на одну замены уходит до 1 секунды
Можно ли его переделать, чтобы работал быстрее?
Некорректная работа надстройки XLAM
 
Спасибо Всем. Все гениальное - просто.
Совет ZVI помог
Еще раз спасибо :)
Некорректная работа надстройки XLAM
 
Создавал давно надстройку XLAM. Все работало до поры до времени, пока не добавил пару макросов (последний - массовая замена, позаимствованный с этого же форума).
Не знаю, в чем причина, и где копать, но почти на все макросы у меня одна и та же ошибка вылезает:
"Method or data member not found", везде, где есть строчка кода " Selection.   "
Как я понял проблему, что код при этом обращается к текущей топологии надстройки, а не к активной книге... может я и ошибаюсь
[img]file:///C:/Slesar/Macr.jpg[/img]

Где-то читал, что это глюк офиса, может ошибаюсь
Страницы: 1 2 3 След.
Наверх