2016-02-24 8 views
3

У меня возникает ошибка «Ошибка выполнения» 13 «Несоответствие типа» при попытке назначить рабочий лист переменной. Он работает для всех других листов, но, похоже, это происходит только с этим листом.VBA Excel Присвоение рабочих листов переменным

Вот мой код:

Sub TS() 
Dim RD, Dep, QC, MM, Pro As Workbook 

With ThisWorkbook 
Set RD = .Sheets("RawData") 
Set Dep = .Sheets("Departments") 
Set QC = .Sheets("QC") 
Set MM = .Sheets("MM") 
Set Pro = .Sheets("Production") 'I have a problem with this line 
End With 

End Sub 

Мой рабочий лист этикетки ниже:

enter image description here

+2

Вы объявили их «книгой/вариантом» ... – findwindow

+5

На самом деле вы устанавливаете Pro как книгу, которая должна быть листом. Все остальные объявлены как варианты. Вам нужно объявить их «Dim RD как WorkSheet, Dep как Worksheet, QC как Worksheet, MM как Worksheet, Pro As WorkSheet» –

ответ

7

ошибка имеет отношение к вашей ошибочной декларации:

Pro As Workbook 

Вы должны объявить это как Worksheet, или просто variant без указания типа, как:

Dim RD, Dep, QC, MM, Pro 

Лучше всего был бы использовать сильное типизированное заявление:

Dim RD As Worksheet, Dep As Worksheet, QC As Worksheet, MM As Worksheet, Pro As Worksheet 

Надеется, что это может помочь.

+1

... относящийся к вашей ошибочной декларации ... Чистое золото. +1 – Stewbob

+0

Почему простые ответы всегда получают самые высокие показатели XD [Этот ответ] (http://stackoverflow.com/questions/34028430/deleting-via-autofilter-takes-too-long) гораздо более заслуживает например, upvotes. – findwindow

+0

@Stewbob: Спасибо, а также, upvote :) –

3

Что ваш код должен выглядеть следующим образом:

Sub TS() 
    Dim RD as Worksheet 
    Dim Dep as Worksheet 
    Dim QC as Worksheet 
    Dim MM as Worksheet 
    Dim Pro as Worksheet 

    With This.Workbook 
    Set RD = .Sheets("RawData") 
    Set Dep = .Sheets("Departments") 
    Set QC = .Sheets("QC") 
    Set MM = .Sheets("MM") 
    Set Pro = .Sheets("Production") 
    End With 
End Sub 

Вы настраиваете кучу рабочих листов, поэтому они должны быть отнесены к Worksheet переменным. Единственная причина, по которой ваш код не упал на Set RD = ..., состоит в том, что все ваши переменные, кроме Pro, были объявлены как Variant.