2015-08-18 8 views
0

Привет, Я пытаюсь написать скрипт excel VBA, который скопирует конкретный рабочий лист из закрытой книги в активную книгу. Лист для копирования определяется флажком и значением переменной, которая устанавливается как текст в определенной ячейке. Мой код:Использование Select Case в Excel VBA для копирования рабочего листа из закрытой рабочей книги

Sub copysheet() 
     Dim WB, ClosedWB as Workbook 
     Set CheckBox = ActiveSheet.Shapes("CheckBox").DrawingObject 
     Model = ActiveSheet.Range("K3").Text 
     Const FilePath = "C:\..." 
     Set WB = Application.Workbooks.Open(FilePath, UpdateLinks:=False, ReadOnly:=False, AddToMRU:=False) 

     If CheckBox.Value = xlOn Then 
      With ClosedWB 
       Select Case Model.Text 
        Case Model = Sheet1 
         Sheets("Sheet 1 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count) 
        Case Model = Sheet2 
         Sheets("Sheet 2 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count) 
       End Select 
      End With 
     End If 

     If CheckBox.Value = xlOff Then 
      With ClosedWB 
       Select Case Model.Text 
        Case Model = Sheet3 
         Sheets("Sheet 3 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count) 
        Case Model = Sheet4 
         Sheets("Sheet 4 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count) 
       End Select 
      End With 
     End If 

Я получаю ошибку Run-Time '424': Объект не требуется, и это указывает на строку Select Case Model.Text. Я также попробовал Select Case Model.Value, но это не сработало. Если я создаю MsgBox для отображения переменной модели, тогда он отображает все, что записано в соответствующей ячейке, поэтому значение переменной сохраняется. Пожалуйста, помогите, я новичок в этом.

Редактировать: Изменить выбор модели Case.Text, чтобы просто выбрать модель Case, больше не приводит к ошибке во время выполнения, но листы не будут копироваться. Когда я запускаю скрипт, он открывает новую книгу (ClosedWB), но после этого ничего не делает. Он даже не выбирает лист, на который я его указал. Как я могу заставить это работать?

ответ

0

Модель - это строка, так как вы ее назначили ActiveSheet.Range("K3").Text. Я настоятельно рекомендую вам вставить Option Explicit в верхней части вашего модуля и всегда компилировать перед запуском. (Tools, Options, Require variable Declaration будет делать это автоматически в каждом новом модуле).

Select Case Model 
+0

Я использую опцию explixit и размерную модель как строку. Должен ли я тускнуть как переменная, это поможет? Я удалил .text в случае выбора, чтобы он выглядел как код, который вы указали выше. Теперь я не получаю никаких ошибок, но листы не копируются. Он просто открывает работу и даже не выбирает правильный лист. Любой совет? – nickalbe

0

Вы также пытаетесь сравнить строку с листом. Либо вам нужно положить часть листа # в кавычки, если это текст, который вводится, либо использовать имя sheet1.name.