Excel изменение значения ячейки вставляет «S» в другую ячейку - PullRequest
0 голосов
/ 14 марта 2012

Я вставил лист1.Обратите внимание на столбцы.Мониторинг находится под заголовком Description и Healthman.Как только изменение происходит в столбце Change, вставляется символ S.Например, Spectacle Frame меняется на Spec Frame, мы вставляем S в поле Change.Столбец изменений изначально пустой.Под Healthman, когда цена меняется, P вставляется в столбце Change.Когда продукт должен быть удален, т.е. удалить строку, X вставляется в поле «Изменить».Когда строка вставляется, поскольку я сравнивал ячейку со скрытым листом за ячейкой, это причина, по которой я обновил скрытый лист.я попробовал предыдущий код, который не работает, и подумал о вставке листа для вашего обзора.
Легенда: P = ИЗМЕНЕНИЕ ЦЕНЫ
N = НОВЫЙ X = УДАЛЕНО S = ОПИСАНИЕ
Изменение кода Описание HEALTHMAN

    40501       Spectacle Frame             
    40609       Sunglasses              
    40525   S   Ready Made Optical              
    41008       Spectacle Case              
    43025   P   Transfer - Zyl or Metal  Frame  198.00          
    43126   P   Transfer - Nylon Supra Frame    314.00          
    43136   P   Transfer - Rimless Frame    359.00      

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

При работе с Worksheet_Change необходимо обеспечить 2 вещи.

1) Надлежащая обработка ошибок обязательна

2) Отключите .EnableEvents, чтобы избежать возможности бесконечного цикла.

ПОЛОЖЕНИЯ

1) Вы хотите захватить изменение в ячейке A1

2) Вы хотите отобразить "S" в A2

Поэтому, пожалуйста, измените, как это применимо в приведенном ниже коде.

CODE

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        Range("A2").Value = "S"
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

FOLLOWUP

Это то, что вы пытаетесь?

Это относится к области кода "ThisWorkbook".

Private Sub Workbook_Open()
   Dim hiddenSheet As Worksheet

   Set hiddenSheet = Me.Worksheets.Add
   hiddenSheet.Visible = xlSheetVeryHidden

   On Error Resume Next
   Application.DisplayAlerts = False
   Sheets("HiddenSheet").Delete
   Application.DisplayAlerts = True
   On Error GoTo 0

   hiddenSheet.Name = "HiddenSheet"

   Sheet1.Range("A1:D15").Copy hiddenSheet.Range("A1:D15")
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   On Error Resume Next
   Application.DisplayAlerts = False
   Sheets("HiddenSheet").Delete
   Application.DisplayAlerts = True
   On Error GoTo 0
End Sub

и это относится к соответствующей области листа

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    If Not Intersect(Target, Range("A1:D15")) Is Nothing Then
        Dim old_value

        Application.EnableEvents = False

        old_value = Sheets("HiddenSheet").Range(Target.Address).Value

        If Target.Value <> old_value Then
            '~~> Change 1 to whatever offset that you want.
            Target.Offset(0, 1).Value = "S"
        End If
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

HTH

Sid

0 голосов
/ 14 марта 2012

Вы можете использовать событие Worksheet_Change. Смотрите, например, это и это .

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

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("A1").Address Then
        Range("A3") = "You changed A1"
    ElseIf Target.Address <> Range("A3").Address Then 'to prevent a change of A3 to trigger an update
        Range("A3") = "You changed another cell"
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...