2017-01-17 3 views
1

Вот мой код, это просто! но у меня есть ошибка в этой строке "wb.Sheets (" Лист1 "). Range (Cells (3, J), Cells (10, J)). Выберите"Определенная пользователем или объектная ошибка vba 1

Private Sub CommandButton1_Click() 
    Dim fd As Office.FileDialog 
    Dim wb As Workbook 
    Dim ms As Workbook 
    Dim Path As String 
    Dim i As Integer 
    Dim j As Integer 

Set ms = ThisWorkbook 


Path = "D:\SYSTEM DATA\\EVT.xlsx" 

Set wb = Workbooks.Open(Path) 

wb.Activate 
For i = 2 To 12 Step 1 
If wb.Sheets(1).Cells(1, i).Value = "EVT006" Then 
j = i 
Exit For 
End If 
Next i 

wb.Sheets("Sheet1").Range(Cells(3, j), Cells(10, j)).Select 'the error line 
Selection.Copy 


ms.Activate 
With ms 
Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
Application.CutCopyMode = False 
End With 

wb.Close True 
End Sub 

я не знаю, почему? Пожалуйста, помогите

ответ

1

Обязательно объявить ББ на клетках в пределах диапазона, а также.

Private Sub CommandButton1_Click() 
    Dim fd As Office.FileDialog 
    Dim wb As Workbook 
    Dim ms As Workbook 
    Dim Path As String 
    Dim i As Integer 
    Dim j As Integer 

Set ms = ThisWorkbook 


Path = "D:\SYSTEM DATA\\EVT.xlsx" 

Set wb = Workbooks.Open(Path) 

wb.Activate 
For i = 2 To 12 Step 1 
If wb.Sheets(1).Cells(1, i).Value = "EVT006" Then 
j = i 
Exit For 
End If 
Next i 

wb.Sheets("Sheet1").Range(wb.Sheets("Sheet1").Cells(3, j), wb.Sheets("Sheet1").Cells(10, j)).Select 'the error line 
Selection.Copy 


ms.Activate 
With ms 
Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
Application.CutCopyMode = False 
End With 

wb.Close True 
End Sub 
+1

Спасибо, Брад за вашу помощь – Mchich

+0

Не проблема! :) Рад, что я мог @Mchich – Brad

0

в

wb.Sheets("Sheet1").Range(Cells(3, j), Cells(10, j)).Select 

вы wb.Sheets("Sheet1").Range( ссылающегося лист «Лист1» из книги wb, а Cells(3, j) и Cells(10, j) ссылаются активного листа активных книги, где этот последний все еще wb (из-за предшествующего wb.Activate), в то время как первый рабочий лист wb открывается с (т.е. активным листом на тим е последнее сохранение), который не уверен, какой-либо образом, чтобы быть «Лист1»

Furthemore следует избегать Activate/Select/ActiveXXX/Selection шаблона и использовать ссылки на полный диапазон

, наконец, вы не должны любое wb.Activate заявление после того, как Set wb = Workbooks.Open(Path) один, так как при любом открытии рабочей книги он становится Активный один

так подставлять

wb.Sheets("Sheet1").Range(Cells(3, j), Cells(10, j)).Select 'the error line 
Selection.Copy 


ms.Activate 
With ms 
Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
Application.CutCopyMode = False 
End With 

с

With Wb.Sheets("Sheet1") 
    .Range(.Cells(3, j), .Cells(10, j)).Copy 
    ms.Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
    Application.CutCopyMode = False 
End With 
+0

Это работает! Спасибо, ребята – Mchich

+0

Я рад. Затем вы можете пометить ответ как принятый. спасибо – user3598756

+0

@Mchich не этот ответ работает больше? – user3598756