MS Excel, Macro acrescentando caracteres extras

0

Usando uma macro, estou unindo dois conjuntos separados de colunas com dois pontos usando uma função simples, como =A2&":"&B2

Isso funciona bem até chegar à última linha, onde a macro está adicionando duas células adicionais, cada uma com apenas : . Parece que a macro selecionou automaticamente os campos que continham dados e se juntou ao conteúdo da célula vazia com o : .

Revisei a macro várias vezes e não vejo o que pode estar causando isso. Alguém pode ver isso para mim?

Sub NetworkStatisticsFilter()
'

' NetworkStatisticsFilter Macro
' Format and Filter Data from Get-NetStatTCP to simplify port discovery
'

'
'Suppress alerts
'
    Application.DisplayAlerts = False

'
'Delete empty header rows that resulted from Get-NetStatTCP export
'
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Rows("2:2").Select
    Selection.Delete Shift:=xlUp

'
'Text-to-Columns, space-delimited
'
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
    TrailingMinusNumbers:=True

'
'Join LocalAddress & LocalPort with a ":" then copy results and replace both columns w/a paste-value
'
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "SRC"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]&"":""&RC[-1]"
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C77")
    Range("C2:C77").Select
    Selection.Copy
    Range("D2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Columns("A:C").Select
    Range("C1").Activate
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft

'
'Join RemoteAddress & RemotePort with a ":" then copy results and replace both columns w/a paste-value
'
    Columns("D:D").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "DST"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]&"":""&RC[-1]"
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D2:D77")
    Range("D2:D77").Select
    Selection.Copy
    Range("E2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Columns("B:D").Select
    Range("D1").Activate
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft

'
'Auto-fit columns
'
    Columns("A:D").Select
    Columns("A:D").EntireColumn.AutoFit

'
'Auto-filter loopback address/port combinations and delete resulting rows
'
    Columns("A:A").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$A$79").AutoFilter Field:=1, Criteria1:="=127.0.0.1*", Operator:=xlFilterValues
    ActiveSheet.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete
    ActiveSheet.ShowAllData

'
'Remove duplicate values in DST column
'
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$67").RemoveDuplicates Columns:=2, Header:=xlYes
    ActiveWindow.SmallScroll Down:=-9

'
'Allow Alerts
'
    Application.DisplayAlerts = True


End Sub
    
por Conan Stuart 08.05.2017 / 16:46

1 resposta

1

Você está copiando a fórmula nas colunas usando Range.AutoFill() . Assim, se a macro estiver criando uma fórmula em células erradas, isso significa que o intervalo que você está fornecendo é falso. Você está usando Range("C2:C77") , o real pode ser Range("C2:C76") , por exemplo.

Você pode encontrar a última linha usada em um intervalo (aqui coluna C) usando isto:

LastRow = Range("C" & Rows.Count).End(xlUp).Row

Além disso, quando você excluir os cabeçalhos vazios, você está:

(a) Excluindo a linha 1

(b) Excluindo a linha 2 que é a linha 3 antes de (a) ser executada.

Isso é de propósito? Se você quiser excluir a primeira e a segunda linha, poderá fazer isso:

Rows("1:2").EntireRow.Delete

EDITAR:

Como você realmente queria excluir a linha 1 e 3:

Rows(1).EntireRow.Delete
Rows(2).EntireRow.Delete
    
por 08.05.2017 / 21:11