2015-05-21 4 views
0

В основном мой макрос извлекает данные из определенных столбцов из определенного файла, а затем вставляет поверх листа другого файла. Но теперь я получаю сообщение об ошибкеНесоответствие типов в Excel VBA

Тип несовпадения в Excel VBA

на этой линии: With Worksheets(wkbSourceBook)

Sub ImportDatafromotherworksheet() 
Dim wkbCrntWorkBook As Workbook 
Dim wkbSourceBook As Workbook 
Dim rngSourceRange As Range 
Dim rngDestination As Range 
Dim row As Integer 
Dim row1 As Integer 
Dim hello As Range 
Dim hello1 As Range 
Dim lastRow As Long, i As Long 
Dim CopyRange As Range 
Set wkbCrntWorkBook = ActiveWorkbook 
With Application.FileDialog(msoFileDialogOpen) 
    .Filters.Clear 
    .Filters.Add "Excel 2007-13", "*.xlsx; *.xlsm; *.xlsa" 
    .AllowMultiSelect = False 
    .Show 
    If .SelectedItems.Count > 0 Then 
     Workbooks.Open .SelectedItems(1) 
     Set wkbSourceBook = ActiveWorkbook 

     With Worksheets(wkbSourceBook) 
      lastRow = .Range("A" & .Rows.Count).End(xlUp).row 

     For i = 4 To lastRow 
      If Len(Trim(.Range("A" & i).Value)) <> 0 Then 
       If CopyRange Is Nothing Then 
        Set CopyRange = .Rows(i) 
       Else 
       Set CopyRange = Union(CopyRange, .Rows(i)) 
       End If 
      End If 
     Next 

     If Not CopyRange Is Nothing Then 
      row = rngSourceRange.row 
      Set hello = Range("O" & row & ",Q" & row & ",W" & row) 
      wkbCrntWorkBook.Activate 
      Set rngDestination = Application.InputBox(Prompt:="Select destination cell", Title:="Select Destination", Default:="A1", Type:=8) 
      row1 = rngSourceRange.row 
      Set hello1 = Range("AD" & row & ",AI" & row & ",AF" & row) 
      hello.Copy hello1 
      rngDestination.CurrentRegion.EntireColumn.AutoFit 
      wkbSourceBook.Close False 
      '~~> Change Sheet2 to relevant sheet name 
     End If 
     End With 


    End If 
End With 
End Sub 

ответ

0

Вы передаете объект Workbook в качестве аргумента функции, которая принимает либо integer (index), либо string (имя рабочего листа).

листы ("Лист1") или листы (1)

+0

Но для моего дела есть какие-либо способы использования объекта рабочей книги в качестве аргумента? – excel

+0

Вы хотите использовать имя объекта рабочей книги. 'With Worksheets (wkbSourceBook.Name)', но эта проблема не будет работать, потому что имя листа не будет содержать расширение файла (.xlsx или .csv или что-то еще). Поэтому сохраните имя в строковой переменной, а затем удалите extesnion. – ChipsLetten

+1

Set wkbSourceBook = Workbooks.Open (.SelectedItems (1)) С wkbSourceBook.Worksheets (1) – LagGyver

0

wkbSourceBook уже объявлен как workbook

Для работы с worksheets в workbook использовать этот код:

With wkbSourceBook.worksheets("name of worksheet") 

или

With wkbSourceBook.worksheets("index of worksheet") 
0

Кроме того, я думаю, может быть, вы могли бы использовать:

Set wrkSheet = ActiveSheet 
With wrkSheet 
    lastRow = .Range("A" & .Rows.Count).End(xlUp).row 
Смежные вопросы