Снимите .Select
.
1) Вы не можете Set Rng = [whatever].Select
. Вы хотите сделать Set Rng = [whatever]
затем Rng.Select
на новой строке, но, что более важно,
2) Лучше всего Избегать использования .Select
/ .Activate
. Хотя вы, кажется, не используете его в другом месте (хорошо!), Поэтому держу пари, что это просто "опечатка".
Кроме того, если вы хотите Столбцы , вы должны сделать:
Set rng = ThisWorkbook.ActiveSheet.Range("b3,f3,l3,n3,p3,q3").EntireColumn
Редактировать: Это не решит проблему вставки промежуточных столбцов, но этот (по общему признанию немного хитрый) код выберет только используемые данные (включая заголовки) вместо целых столбцов:
'Copy Range from Excel
Dim lastRow As Long
With ThisWorkbook.ActiveSheet
lastRow = .Cells(Rows.Count, 2).End(xlUp).Row
' I assume your headers actually are in row 3, and the data is in row 4 on ward:
Set rng = ThisWorkbook.ActiveSheet.Range("b3:B" & lastRow & ",f3:F" & lastRow & ",l3:l" & lastRow & ",n3:N" & lastRow & ",p3:P" & lastRow & ",q3:Q" & lastRow)
Set rng1 = ThisWorkbook.ActiveSheet.Range("G4:I4")
End With
'Create an Instance of PowerPoint
On Error Resume Next
' Etc. etc.