Интересно, сможет ли кто-нибудь помочь мне, пожалуйста.

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

Option Explicit
Public preValue As Variant


    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim cell As Range, res As Variant
        Dim FirstBlankCell As Range
        Dim lr As Long
        Dim msg
        Dim rCell As Range
        Dim Rng As Range, Dn As Range
        Dim Rng1 As Range
        Dim Rng2 As Range
        Dim Rng3 As Range
        Dim Rng4 As Range
        Dim Rw As Range


        If Target.Cells.Count > 1 Then Exit Sub

        lr = lr


        With Target
            Select Case True

            Case .Column = 2
            If .Value2 > 0 And .Value2 <> "Enter your name" And .Offset(, -1) = "" Then
                    .Offset(, 1).Value2 = "Yes"
                    .Offset(, 2).Value2 = "--Select--"
                    .Offset(, 3).Value2 = "--Select--"
                    .Offset(, 4).Value2 = "--Select--"
                    .Offset(, 5).Value2 = "Enter your FTE"
                    .Offset(, 6).Value2 = "C&R"
                    .Offset(, 7).Value2 = "--Select--"
                    .Offset(, 17).Value2 = "Enter the name of your Line Manager"
                  End If
            Case Else
            End Select
        End With

    End Sub

Это прекрасно работает, но теперь я бы хотел расширить эту функциональность. Я также хотел бы, чтобы в столбцах "B" происходило заполнение столбцов, а также вставка значений в дополнение к вводу вручную.

Это поможет, когда я перенесу информацию из существующих листов в новую, которую я создаю. Несмотря на то, что это последнее изменение, которое мне нужно сделать, найти решение для которого труднее всего.

Мне просто интересно, может ли кто-нибудь взглянуть на это, пожалуйста, и дать несколько советов о том, как мне добиться этого.

Большое спасибо и всего наилучшего

Крис

2 ответа2

1

Событие Worksheet_Change(ByVal Target As Range) вызывается как ручным вводом, так и вставкой данных, поэтому оно должно просто работать. Вы пробовали это?

1

Согласно Карен, событие срабатывает, если содержимое вырезано и вставлено. Дело в том, что код, который вы разместили, проверяет, больше ли число возвращенных ячеек, чем один, и если это так, он останавливает выполнение события:

If Target.Cells.Count > 1 Then Exit Sub

Измените код на этот, и он должен работать просто отлично.

Dim cell As Range, res As Variant
Dim FirstBlankCell As Range
Dim lr As Long
Dim msg
Dim rCell As Range
Dim Rng As Range, Dn As Range
Dim Rng1 As Range
Dim Rng2 As Range
Dim Rng3 As Range
Dim Rng4 As Range
Dim Rw As Range

lr = lr

Dim r As Range
For Each r In Target.Cells
With r
    Select Case True

    Case .Column = 2
    If .Value2 > 0 And .Value2 <> "Enter your name" And .Offset(, -1) = "" Then
            .Offset(, 1).Value2 = "Yes"
            .Offset(, 2).Value2 = "--Select--"
            .Offset(, 3).Value2 = "--Select--"
            .Offset(, 4).Value2 = "--Select--"
            .Offset(, 5).Value2 = "Enter your FTE"
            .Offset(, 6).Value2 = "C&R"
            .Offset(, 7).Value2 = "--Select--"
            .Offset(, 17).Value2 = "Enter the name of your Line Manager"
          End If
    Case Else
        End Select
    End With
Next r

Здесь было сделано то, что строка кода была удалена, чтобы позволить событию сработать, даже если в целевом диапазоне находится больше ячеек, чем одна, а затем мы используем цикл For Each для ячеек, содержащихся в Target, для работы с каждой строкой.

Nim

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .