Excel - изменение значения ячейки из другой ячейки, но измененная ячейка сохраняет значение после очистки входной ячейки - PullRequest
0 голосов
/ 18 марта 2019

Я в основном пытаюсь сделать ячейку ввода. То, что я хочу, это когда я изменяю значение C2, оно меняет значение C1. Но когда я стираю C2, я хочу, чтобы C1 сохранил значение.

Так что, если я сделаю C2 = "Адам", C1 = "Адам", но затем я изменю C2 = "", и C1 по-прежнему будет "Адам".

Может кто-нибудь помочь мне с этим? Я искал онлайн целую вечность и не могу найти ничего, что могло бы помочь мне найти решение.

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы можете сделать это для события Worksheet_Change,

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 2 And Target.Column = 3 Then    'C2
        If Target.Value <> "" Then
            Range("C1").Value = Target.Value
        End If
    End If
End Sub

Формула =C2 или какой-либо вариант не сработает, поскольку не может запомнить значение, которое с тех пор было удалено.


Полагаю, вы могли бы подделать формулу , как показано ниже, но я определенно не рекомендую ее, особенно в сочетании с кодом.Я просто публикую его из интереса.

Private Sub Worksheet_Change(ByVal Target As Range)
    Static old As String

    If Target.Row = 2 And Target.Column = 3 Then    'C2
        If Target.Value <> "" Then
            Range("C1").Formula = "=IF(N(""""),"""","""")&C2"
            old = Target.Value
        Else
            Range("C1").Formula = "=IF(N(""" & old & """),"""","""")& """ & old & """"
        End If

    End If
End Sub

Это бессмысленно, потому что вам все равно нужен код.


Я полагаю, что даже для кода можно просто написатьна именованный диапазон / значение, к которому затем относится формула:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value <> "" Then
        ActiveWorkbook.Names.Add Name:="stored", RefersToR1C1:="=""" & Target.Value & """"
    End If
End Sub
0 голосов
/ 18 марта 2019

Мы можем сделать это с помощью макроса события . Поместите следующий код в область кода листа:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C1 As Range, C2 As Range
    Set C1 = Range("C1")
    Set C2 = Range("C2")

    If Intersect(Target, C2) Is Nothing Then Exit Sub
    If C2.Value = "" Then Exit Sub

    Application.EnableEvents = False
        C2.Copy C1
    Application.EnableEvents = True
End Sub

Поскольку это код рабочего листа, установить очень просто и использовать автоматически:

  1. щелкните правой кнопкой мыши имя вкладки в нижней части окна Excel
  2. выберите Просмотр кода - откроется окно VBE
  3. вставьте материал и закройте окно VBE

Если у вас есть какие-либо проблемы, сначала попробуйте их на пробном листе.

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel позже, чем 2003, вы должны сохранить файл в формате .xlsm, а не .xlsx

К удалить макрос:

  1. вызвать окна VBE, как указано выше
  2. очистить код
  3. закрыть окно VBE

Чтобы узнать больше о макросах в целом, см .:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

и

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Чтобы узнать больше о макросах событий (код листа), см .:

http://www.mvps.org/dmcritchie/excel/event.htm

Для работы должны быть включены макросы!

...