您好我正在尝试编写一个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
我得到一个运行时错误'424':对象必需,它突出显示Select Case Model.Text行 . 我也尝试过Select Case Model.Value,但是没有用 . 如果我创建一个MsgBox来显示变量模型,那么它会显示在相应单元格中写入的内容,因此存储了变量值 . 请帮助我是新手 .
编辑:将Select Case Model.Text修改为Select Case Model不再导致运行时错误,但不会复制工作表 . 当我运行脚本时,它会打开新的工作簿(ClosedWB),但之后什么都不做 . 它甚至没有选择我指定它的工作表 . 我怎样才能让它发挥作用?
2 回答
Model是一个字符串,因为你已经为它分配了
ActiveSheet.Range("K3").Text
. 我强烈建议您在模块的顶部插入Option Explicit
,并在运行之前始终进行编译 . (Tools
,Options
,Require variable Declaration
将在每个新模块中自动执行此操作) .您还尝试将字符串与工作表进行比较 . 如果是输入的文本或使用sheet1.name,则需要将工作表#part放在引号中 .