Incorpore o VBA e copie e cole

0

Eu me pergunto se alguém pode me ajudar por favor.

Estou usando o código abaixo para autopopular um número de colunas com texto predefinido quando um valor é inserido na coluna "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

Isso funciona bem, mas agora gostaria de ampliar um pouco mais essa funcionalidade. Eu também gostaria que a população de colunas ocorresse se os valores fossem copiados e colados na coluna "B", além de quando eles são inseridos manualmente.

Isso ajudará quando eu migrar as informações das folhas existentes para a nova que estou construindo. Embora esta seja a última mudança que preciso fazer, está provando ser o mais difícil de encontrar uma solução.

Eu só queria saber se alguém poderia olhar para isso por favor e oferecer algumas orientações sobre como eu posso conseguir isso.

Muito obrigado e carinho

Chris

    
por IRHM 03.02.2013 / 16:26

2 respostas

1

De acordo com Karen, o evento é acionado se o conteúdo for recortado e colado. O problema é que o código que você postou verifica se o número de células retornadas é maior que um e, em caso afirmativo, impede que o evento seja executado:

If Target.Cells.Count > 1 Then Exit Sub

Altere o código para isso e ele deve funcionar bem.

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

O que foi feito aqui foi que a linha de código foi removida para permitir que o evento seja disparado, mesmo se houver mais células no intervalo de destino e, em seguida, usamos um loop For Each nas células contidas no Target para trabalhar cada linha.

Nim

    
por 10.02.2013 / 20:32
1

O evento Worksheet_Change (ByVal Target As Range) é acionado por ambos entrada manual e colagem de dados, por isso deve funcionar. Você tentou?

    
por 03.02.2013 / 23:13