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

Страницы: 1
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 (Приложить файл)
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
Invalid Data format (невозможно открыть модуль VBA)
 
Добавил новый модуль в существующий файл, после некорректного закрытия выходит сообщение "Invalid Data format". То же самое сообщение при попытке открыть Модуль, пересохранить файл, импортировать модуль и прочее.

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

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

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

Но! Самое главное, что неделю назад я работал на другом компе и на нем у меня получилось добавить эту надстройку по СЕТИ! Значит идея реализуема.
Теперь вопрос в том, как?
Изменено: vikttur - 26.06.2021 00:36:58
Добавить недостающие позиции при сравнении массива столбцов
 
Доброго всем времени суток.
Работая с большой базой таблиц, есть необходимость сравнивать множество параметров, написал код чтобы сравнивать значения, но не могу "допетрить" как осуществить добавление недостающих значений.
В реальном фале сравниваю много параметров, в приведенном примере ниже, всего по 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 возможность работы с таблицей
 
Добрый вечер форумчане.
Искал в поиске и Гугле, не смог найти ответ, возможно, на мой простой вопрос.
На данном форуме нашел макрос массовой замены и решил его загнать в UserForm, чтобы данные оттуда вводить, все работает, но:
Когда активируется окно UserForm, то у меня нет возможности работать с самой таблицей на листе, допустим выделить ячейку, чтобы скопировать текст из неё и вставить его в поле Формы для замены. Как это можно сделать?
Пробовать в свойствах менять UserForm задавать ShowModal = False - Появляется возможность работы с таблицей, но макрос работает некорректно, а отследить не получается...
[img]file:///C:/Slesar/111.jpg[/img]
Помогите
Изменено: slesarok - 24.02.2019 15:47:52
Ускорение Макроса автоматической вставки Даты
 
Доброе утро всем!
Хочется ускорить макрос, который при изменению значения определенного столбца устанавливает в соседние текущую дату и имя пользователя компьютера:
Код
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
 
Создавал давно надстройку XLAM. Все работало до поры до времени, пока не добавил пару макросов (последний - массовая замена, позаимствованный с этого же форума).
Не знаю, в чем причина, и где копать, но почти на все макросы у меня одна и та же ошибка вылезает:
"Method or data member not found", везде, где есть строчка кода " Selection.   "
Как я понял проблему, что код при этом обращается к текущей топологии надстройки, а не к активной книге... может я и ошибаюсь
[img]file:///C:/Slesar/Macr.jpg[/img]

Где-то читал, что это глюк офиса, может ошибаюсь
Вызов telnet через макрос VBA
 
Добрый день, специалисты VBA
Есть вопрос, который хочется автоматизировать через VBA.
Ниже скрипт VBS, который открывает telnet, заходит на коммутатор по IP и сбрасывает ошибки, данные по IP берет построчно из текстового файла DATA.txt (который должен находится в директории с исходным файлом VBS)

Код VBS
Код
Dim strSourceFile
Dim oShell
Dim objFSO
Dim strLine
Dim TimeSleep
Set oShell = wscript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe"
TimeSleep = 500
wscript.Sleep 2000
strSourceFile = "DATA.txt"
With wscript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
    With .OpenTextFile(strSourceFile)
        Do Until .AtEndOfStream
            strLine = .ReadLine()

oShell.SendKeys "o " & strLine
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "admin"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "admin"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "^(S)"
wscript.Sleep TimeSleep

****

oShell.SendKeys "{F}"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

            Loop
        .Close
    End With
Else
    wscript.echo "Can't find [" & strSourceFile & "]."
    wscript.Quit 1
End If
oShell.SendKeys "{Q}"
oShell.SendKeys "{Enter}"
End With
wscript.echo "Выполнено"
Хочется, чтобы этот код вызывался из EXCEL, а данные брал из таблицы, типо:
Код
Application.InputBox(Prompt:="Укажите диапазон IP адресов для Сброса Alarms:", Type:=8)
Изменено: slesarok - 11.09.2018 09:43:03
Восстановление удаленной надстройки XLA
 
Уважаемы форумчане, возникла проблема, когда ребенок, случайно на диске удалил часть данных, в том числе системных, и одну из моих НАДСТРОЕК для EXCEL. Копии данного файла не имею, очень обидно потерять хоть небольшие, но все же разработки чайника.

Вопрос 1: хранит ли где-либо EXCEL резервные копии надстроек?

Вопрос 2: Программой восстановление RECUVA мне удалось его восстановить, но восстановился неправильно:

Имя файла: Slesar_IO.xla
Путь: C:\Users\z003s15s\AppData\Roaming\Microsoft\AddIns
Размер: 139 КБ (142 336)
Состояние: Утрачен
Примечание: Файл перезаписан с помощью "C:\Users\z003s15s\AppData\Local\Microsoft\Device Metadata\dmrc.idx"

При открытии данной надстройки, пишет: что данный формат файла отличается от расширения (((

Есть ли возможность восстановить прежний файл надстройки?

В прикрепленных файлах:
1. Старый файл надстройки (Slesar_IO_Old.xla) начальный вариант (для примера что было из первоначальных сохранений)
2. Полный\восстановленный, но поврежденный файл надстройки (Slesar_IO.xla)
Вызов макроса для каждого листа (Call) без активации листа (фоном)
 
Доброе утро форумчане
Вопрос таков: в книге у меня несколько листов, при открытии книги у меня выполняется макрос:
Код
Private Sub Workbook_Open()
On Error Resume Next
'убираем фильтры со всех листов
Dim i&
   For i = 1 To Sheets.Count
       If Sheets(i).FilterMode = True Then Sheets(i).ShowAllData
   Next i
Worksheets("IEC-61850").Activate
        Call Data_List_Status
Worksheets("MODBUS_TCP").Activate
        Call Data_List_Status
Worksheets("SCADA").Activate
        Call Data_List_Status
Worksheets("PMS_LSS").Activate
        Call Data_List_Status
Worksheets("ELSS").Activate
        Call Data_List_Status
Worksheets("Main").Activate
End Sub

Модуль вызываемого макроса "Data_List_Status" делает ряд операций. Но при работе все листы по очереди активируются/переключаются. А можно ли сделать выполнение фоном без динамических переключений листов?

Спасибо.

Отобразить скрытую строку по тому же условию
 
Добрый вечер, форумчане.
На определенной таблице использую userForm Checkbox (выбор галочками) для скрытия и отображения строк по условиям.
Код
Public ESS_num&
Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
        ESS_num = Range("B4:B35").Find("CCB-020", , xlValues, xlWhole).Row
        Rows(ESS_num).Select
        Selection.EntireRow.Hidden = True
    Else
        ESS_num = Range("B4:B35").Find("CCB-020", , xlValues, xlWhole).Row
        Rows(ESS_num).Select
        Selection.EntireRow.Hidden = False
    End If
End Sub
В диапазоне B4:B35 ищу значение CCB-020 и скрываю.
Когда я убираю галочку, по логике строка должна обратно отображаться... Но после скрытия макрос не может найти значение "CCB-020".
Как можно обойти, исправить?
Спасибо.
Переименование/замена ссылки на лист в формуле СЧЕТЕСЛИМН
 
Доброго вечера всем!
На "Главном" листе есть множество формул типа:
Код
=СЧЁТЕСЛИМН(ELSS!G:G;"=*043S030C*";ELSS!Y:Y;"<>*SPARE*")
Ссылки в формулах бывают на разные листы!
В процессе работы мне необходимо удалить старый лист "ELSS" и в последствии формула станет:
Код
=СЧЁТЕСЛИМН(#ССЫЛКА!G:G;"=*043S030C*";#ССЫЛКА!Y:Y;"<>*SPARE*")
Далее я создаю новый (с таким же именем), на который далее будут ссылаться формулы.
Но при обычном find&relace диапазона, где находятся мои формулы excel пишет что данные для ввода не найдены... в Чем причина, и как это можно выполнить. Алгоритм, чтобы потом макрос замены написать.
Кто-то мне говорил, что это проблема при работе с определенными функциями типа СЧЕТЕСЛИ и т.п.. так ли это?
Изменено: slesarok - 21.12.2017 16:31:27
Как вызвать макрос ByVal из Модуля
 
Добрый день, форумчане!
Интересует такой вопрос:
Есть макрос, который на листе выставляет даты и имя пользователя в соседних ячейках, если были изменения в заданном столбце (диапазоне)
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("A1:A50")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
        Target.Offset(0, 2).Value = Date
        Target.Offset(0, 3).Value = Application.UserName
    End If
End Sub
Проблема с тем, что в книге много листов, и в каждом листе диапазон, который "контролирует" изменения разный, в этом примере Range("A1:A50"), на другом листе может быть Range("B1:B50") и тд
Я хотел задать переменную (и для каждого листа руками его прописывать) для диапазона и вызывать данный макрос для каждого листа отдельно (из модуля может быть?)
А как это осуществить не могу разобраться!
Изменено: slesarok - 17.12.2017 08:44:09
Обработки ошибок в VBA (двойное On Error GoTo)
 
Ночи доброй всем!
Ругается на код, где я использую двойную проверку на ошибки, вот часть макроса (копирование листа из другой книги с использованием UserForms):
Код
Public List
           With ActiveWorkbook
 On Error GoTo Error1
           Call List_copy ' выполняется Активация User формы, где из сплывающего списка необходимо выбрать название листа, который нужно копировать

           .Sheets(List).Copy before:=BazaWb.Sheets(1)
 GoTo Ends:
 Error1:
 On Error GoTo Error2
            List = InputBox("Данный лист не найден, введите название листа вручную", "IO", "")
            .Sheets(List).Copy before:=BazaWb.Sheets(1)
 GoTo Ends:
 Error2:
 MsgBox ("Дынный лист не найден, проверьте правильность написания и повторите процедуру") Exit Sub '? здесь процедуру заканчивать 
 Ends:
          End With
  
           Workbooks(oAwb).Close False    'Закрываем книгу

И вот здесь у меня ругается на 11 строку. Вроде на мой (любительский) взгляд правильно. Может грамматика? подскажите
Изменено: slesarok - 11.12.2017 23:05:45 (Добавил тестовый Файл)
VBA Вставка переменной в формулу УФ
 
Добрый день
Подскажите правильность написание, не могу сообразить:
В макросе для условного форматирования есть формула: "=$U5=""FAIL""" (при значения значении в столбце U = FAIL будет окрашиваться вся строка)
Но мне необходимо значение ячейки $U5 - прописать переменной (определенная ячейка, по своим условия)
Код
Код
10 Dim lLastRow&, lLastCol&
20 lLastRow = Cells(Rows.Count, 1).End(xlUp).Row 'ищем последнюю непустую ячейку в столбце 1
30lLastCol = Cells(5, Columns.Count).End(xlToLeft).Column 'ищем последний непустой ячейку в строке 5

40   Cells.FormatConditions.Delete
50    Range(Cells(5, 1), Cells(lLastRow, lLastCol + 1)).Select
60    Cells(5, lLastCol + 1).Activate
70    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
80     "=$" & Cells(5, lLastCol + 1) & "=""FAIL"""
90    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
100   With Selection.FormatConditions(1).Interior
110        .PatternColorIndex = xlAutomatic
120        .ThemeColor = xlThemeColorAccent6
130        .TintAndShade = 0.399945066682943
140    End With

В строке 80 - моя попытка замены $U5 на Cells(5, lLastCol + 1)
Подскажите где ошибка?
Сравнение таблиц
 
Добрый день Всем!
Можно ли осуществить такое сравнение?
1. Сравниваются таблицы на 2 листах в разных файлах. Основное сравнение происходит по одному столбцу
2. Сравниваем первые столбцы (A) по критериям:
    а) Ищем значение ячейки А1 во втором листе
         I. Найдено в той же строке что и в первом листе = сравниваем ВЫБОРОЧНЫЕ столбцы (B,D,F), если значения совпадают никаких действий, иначе окрашиваем значение в первом листе (YELLOW)
         II. Найдено в другой строке = также сравниваем (окрашиваем или нет) и в столбце "G" пишем номер строки из второго листа, где нашли наше значение А1
         III. Не найдено - окрашиваем(RED) пишем в строке Е="NOT USE"
    б) Теперь необходимо сравнить в обратную сторону значения столбцов А. То есть, остались ли во втором листе Значения, которых нет в первом листе
          Если во втором листе найдено значение, которого нет в первом, то во втором листе окрашиваем (RED), либо на первом листе в столбце Е вывести значения, которые не найдены

В приложенных файлах
Examples - визуальный пример

030_1 и 030_2 - файлы, которые в итоге надо сравнить
Изменено: slesarok - 02.12.2017 12:35:53 (Уважаемые модераторы, удалите тему. Я подготовлю файлы. И позже прикреплю вопросы по которым не могу решить задание до конца! Спасибо)
Передача переменных в вызываемый макрос
 
Друзья, помогите неопытному)
Для примера разбираюсь, не могу понять
Макрос в листе
Код
Public x As String
Public y As String
Sub www()
    x = "A1"
    y = "K5"
   Call qqq
End Sub
Макрос вызываемый в модуле:
Код
Sub qqq()
Cells.Range(x, y).Value = 1
End Sub
Eror 1004!
VBA обновление данных из другой таблицы в сводную
 
Добрый день Форумчане!
Темы подобные были, но я не смог найти решения по своему ответу.
Есть несколько таблиц (для удобства в архиве я сделал две 001.xlsm и 800.xlsm) а также общий файл Status_Common.xlsm
В Status_Common.xlsm 3 листа: 1 - общая сводная информация, а также 2 листа, в которых подтягивается информация с книг 001 и 800.
Для каждого из листов 001 и 800 Прописан простой макрос копирования информации:
Код
Sub ESS_800()
Dim sFilePath As String, sFileName As String, sSh As String
Dim sStr As String
    Worksheets("800").Select
    Range("B5:Y19").Select
    Selection.NumberFormat = "[<>0]General;"
sFilePath = Dir(ThisWorkbook.Path & "*.xlsm")
sFileName = "800.xlsm"
sSh = "Main"
    With Range("B5:Y19")
    .Formula = "='" & sFilePath & "[" & sFileName & "]" & sSh & "'!" & "B5"
    .Value = .Value
    End With
End Sub 

Здесь я применил ThisWorkbook.Path чтобы обновления происходили из текущей папки, где находится общий файл (Status_Common.xlsm). Так как при работе с этими файлами иногда приходится их копировать в другие места, отсылать и тд (и директория всегда разная)

А на главном листе вывел кнопку для объединения этих макросов:

Код
Sub Обновить_значения()    
Call Sheets("001").ESS_001    
Call Sheets("800").ESS_800    
Worksheets("Total").Select
End Sub

Но все равно (при нажатии кнопки обновления) он просит указать директорию первого обновляемого файла (в моем случае 001), а потом сам обновляет остальные.

Как исправить чтобы обновление происходило само, относительно текущего расположения файла?
Долгая обработка Replacement & Interior.Color
 
Добрый День форумчане!
Помогите разобраться с проблемой:
1. В файле вкладка C&E1, в которой находится таблица причинно-следственных связей алгоритмов работы, в которой необходимо ставить отметки (выполнено/не выполнено).
Реализовал так: английские буквы X и T - условие не выполнено, русские буквы Х и Т - условие выполняется. Написал макрос как отдельный модуль (вывел на кнопки) выделил область>нажал ВЫПОЛНЕНО>заменились буквыSub Replace_DONE()  
Код
  Selection.Replace What:="X", Replacement:="Х", _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
    False, ReplaceFormat:=False
    Selection.Replace What:="T", Replacement:="Т", _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
    False, ReplaceFormat:=False
End Sub

Sub Replace_NOT_DONE()
    Selection.Replace What:="Х", Replacement:="X", _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
    False, ReplaceFormat:=False
    Selection.Replace What:="Т", Replacement:="T", _
    LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
    False, ReplaceFormat:=False
End Sub
и также макрос в лист/вкладку (для визуализации), который окрашивает буквы в цвета - (Икс/Т.англ & Ха/Т.рус) красный и зеленый соответственно.Private Sub
Код
Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim n
    With Worksheets("C&E1") '!!!!!!!!!!!!!!!!!!!!!!!!!!!
        Set Rng = Selection
        For Each n In Rng
            Select Case n
                Case "X"
                   n.Interior.Color = RGB(255, 200, 200)
                Case "T"
                    n.Interior.Color = RGB(255, 200, 200)
                Case "Х"
                    n.Interior.Color = RGB(0, 255, 0)
                Case "Т"
                    n.Interior.Color = RGB(0, 255, 0)
            End Select
        Next n
    End With
End Sub
Если я выделяю небольшую область (к примеру 20х20 ячеек), то макрос работает быстро, а если больше.... то обработка занимает очень долгое время, тупит, зависает. Может кто подскажет мне, как можно реализовать поинтереснее?

2. И второй вопрос: На первой вкладке Main формируется подсчет (выделил желтым), относительно вкладки C&E1. Реализовано все формулами, возможно ли осуществить макросом?

Спасибо.
Страницы: 1
Наверх