Eu tenho uma macro instalada e funcionando que classifica um pivôtabela, copia um intervalo de células da tabela e, em seguida, cola-as em uma segunda planilha. Para ser honesto, com o que estou achando do VBA agora, estou muito feliz apenas com essa façanha. No entanto, tenho mais coisas que quero fazer.
O que eu quero que aconteça é o seguinte:A macro que colei dados nas primeiras células vazias da coluna A. Quando isso acontecer, quero que a macro insira a data de hoje (de preferência de uma maneira que a torne permanente e não mude para a data de amanhã) em a mesma linha na coluna C e o texto "IV020" na coluna D.
Na Planilha 9, tenho o seguinte código (principalmente tirado de postagens aqui):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aCell As Range
On Error GoTo Whoa
Application.EnableEvents = False
If Not Intersect(Target, Columns(1)) Is Nothing Then
If Not Target.Columns.Count > 1 Then
For Each aCell In Target
If aCell.Value <> "" And aCell.Offset(0, 2).NumberFormat = "" Then
aCell.Offset(0, 2).Value = "=TODAY()"
aCell.Offset(0, 3).Value = "IV020"
End If
Next
Else
MsgBox "Please paste in 1 Column"
End If
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
No entanto, quando as coisas são coladas ou inseridas manualmente na coluna A, nada acontece.
Respostas:
0 para resposta № 1Você não pode ter um Propriedade Range.NumberFormat essa é uma string de comprimento zero. Mesmo se você tentar inserir um manualmente, ele se redefinirá para Geral.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(1)) Is Nothing Then
"don"t do things until you have to
On Error GoTo Whoa
Application.EnableEvents = False
Dim aCell As Range
"this processes all of the cells that were changes in column A
For Each aCell In Intersect(Target, Columns(1))
"If aCell.Value <> "" And aCell.Offset(0, 2).NumberFormat = "" Then
If aCell.Value <> "" Then
aCell.Offset(0, 2).Value = Date "possibly Now but likely not "=TODAY()"
aCell.Offset(0, 3).Value = "IV020"
End If
Next
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
Fiz algumas pequenas alterações; você terá que decidir o que deseja fazer sobre o problema .NumberFormat.