Страницы: 1
RSS
Изменить макрос, чтобы значение ячейки с формулой, ссылающейся на данные другой книги, прописывались в листе 2
 
Этот макрос удаляет выбраннные данные из выпадающего списка ячейки C3 листа 1, источник которого ссылается на столбец A и прописывает в столбец B листа 2.
У меня в ячейке C3 формула, которая ссылается на данные другой книги, мне нужно, чтобы при обновлении формулы ячейки C3, значения которые в ней появляются прописывались в столбец A листа 2?
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        If Not Intersect(Target, Range("C3")) Is Nothing Then
            If Target <> Empty Then
                Dim lr As Long, cell As Range, sh As Worksheet
                Dim ValidFormula As String
                ValidFormula = "=OFFSET(Лист2!$A$2:$A$1048576,0,0,COUNTA(Лист2!$A$2:$A$1048576))"
                Set sh = Worksheets("Лист2")
                Set cell = sh.Cells.Find(Target)
                Application.EnableEvents = False
                cell.Delete Shift:=xlUp
                lr = sh.Cells(Rows.Count, 2).End(xlUp).Row + 1
                sh.Cells(lr, 2).Value = Target
                Application.EnableEvents = True
                With Range("C3").Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=ValidFormula
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = True
                End With
            End If
        End If
    End If
End Sub
 
Макрос, выполняющий, то, что написано тут.
Цитата
Ибрагим Белхороев написал:
при обновлении ... ячейки C3, значения которые в ней появляются прописывались в столбец A листа 2
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        If Not Intersect(Target, Range("C3")) Is Nothing Then
            If Target <> Empty Then
                Dim sh As Worksheet
                Set sh = Worksheets("Лист2")
                Application.EnableEvents = False
                sh.Cells(Rows.Count, 1).End(xlUp).Cells(2, 1).Value = Target
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub
 
МатросНаЗебре,
Цитата
Ибрагим Белхороев написал:
У меня в ячейке C3 формула, которая ссылается на данные другой книги, мне нужно, чтобы при обновлении формулы
Цитата
МатросНаЗебре написал:
Private Sub Worksheet_Change
:)  
 
RAN, соглашусь забавно.
Формально макрос сработает, так как было написано "При обновлении формулы". То есть, если формула изменится, то макрос выполнит некое действие.
Судя по всему, Ибрагим имел в виду "При изменении значения". Тут этот макрос не сработает.
 
МатросНаЗебре, такой момент, вот у меня в ячейке C3 формула которая ссылается на данные другой книги и когда эти данные обновляются, то соответственно и в ячейке C3 они обновляются, допустим число 123, это данные, на которые ссылается формула в ячейке C3, если эти данные изменить на 124, то в ячейке C3 они тоже изменятся, но вот макрос в сообщении #2 не прописывает эти обновленные данные в столбец A  листа 2?
 
Если использовать события, то нужно код писать для книги, на которую ссылается формула.
 
Цитата
Ибрагим Белхороев написал:
но вот макрос в сообщении #2 не прописывает эти обновленные данные в столбец A  листа 2
и не должен. событие Change и событие Calculate - это разные события
(вот только зачем я это написал?)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, если я правильно понял, calculate для перерасчета, получается нужно написать такой код, который при пересчете будет прописывать значения в лист 2

МатросНаЗебре, вы имели в виду, что в Range("C3") нужно написать в формулу, которая ссылается на данные другой книги?
Изменено: vikttur - 07.09.2021 17:11:58
 
Код
Private Sub Worksheet_Calculate()
    With Worksheets("Лист2").Cells(Rows.Count, 1).End(xlUp)
        If .Value <> Range("C3").Value Then
            Application.EnableEvents = False
            .Cells(2.1).Value = Range("C3").Value
            Application.EnableEvents = True
        End If
    End With
End Sub
 
МатросНаЗебре, этот код в лист 1 же нужно вставить, что-то значения в ячейке C3, не прописываются в лист 2
Изменено: Ибрагим Белхороев - 07.09.2021 16:36:41
 
Этот код нужно вставить в Лист1.
Напишите в любой ячейке какую-нибудь формулу.
 
МатросНаЗебре, вроде получилось, премного благодарен вам, спаисбо большое.
Изменено: Ибрагим Белхороев - 07.09.2021 17:07:35
 
Код
Private Sub Worksheet_Calculate()
    With ThisWorkbook.Worksheets("Лист2").Cells(Rows.Count, 1).End(xlUp)
        If .Value <> ThisWorkbook.Worksheets("Лист1").Range("C3").Value Then
            Application.EnableEvents = False
            .Cells(2.1).Value = ThisWorkbook.Worksheets("Лист1").Range("C3").Value
            Application.EnableEvents = True
        End If
    End With
End Sub
 
МатросНаЗебре, если сделать умную таблицу с заголовками, то код в сообщении #13 прописывает значение на строку ниже, т.е допустим в ячейке A1 заголовок, то вместо того, чтобы прописать значение в ячейку A2, макрос прописывает в ячейку A3, можете подсказать, что нужно сделать, я сам пытался, но у меня не получается?
Изменено: Ибрагим Белхороев - 13.09.2021 08:55:19
 
Ибрагим Белхороев,
пока не будет четкого и точного описания задачи НИКТО не сможет ее четко и точно решить
или вы четко и точно описываете свою задачу или решайте ее самостоятельно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, мне нужно, чтобы значения в ячейке C3 листа 1 прописывались в умную таблицу с заголовками листа 2. У меня в ячейке A1 листа 2 заголовок, но код в сообщении #13 прописывает значение в ячейку A3 вместо ячейки A2, видимо код нужно изменить для умной таблицы. Я тут пытался, но походу, что-то неправильно делаю:
Код
Private Sub Worksheet_Calculate()
    With ThisWorkbook.Worksheets("Лист2").ListObjects("Таблица1").Range.Cells(Rows.Count, 1).End(xlUp)
        If .Value <> ThisWorkbook.Worksheets("Лист1").Range("C3").Value Then
            Application.EnableEvents = False
            ThisWorkbook.Worksheets("Лист2").ListObjects("Таблица1").Range.Cells(2, 1).Value = ThisWorkbook.Worksheets("Лист1").Range("C3").Value
            Application.EnableEvents = True
        End If
    End With
End Sub
Изменено: Ибрагим Белхороев - 13.09.2021 11:50:51
 
Код
Private Sub Worksheet_Calculate()
    Dim r As Range
    With ThisWorkbook.Worksheets("Лист2")
        With .ListObjects(1).Range
            Set r = .Cells(.Rows.Count, 1)
            If IsEmpty(r.Value) Then
                Set r = r.Offset(-1)
            End If
            If r.Value <> ThisWorkbook.Worksheets("Лист1").Range("C3").Value Then
                Application.EnableEvents = False
                r.Cells(2, 1).Value = ThisWorkbook.Worksheets("Лист1").Range("C3").Value
                Application.EnableEvents = True
            End If
        End With
    End With
End Sub
 
МатросНаЗебре, спасибо вам большое.
Страницы: 1
Наверх