【发布时间】:2015-02-10 06:28:40
【问题描述】:
我正在尝试使用 VBA 创建基于表单的界面。我遇到了一个我无法解决的问题。所以在我的代码中,我尝试创建一个新的工作簿然后保存它。之后,它将扫描复选框并查看哪个被选中。如果它被选中,它将创建一个新工作表并复制预制模板。用户将打开另一个他们想要的工作簿,并将该工作簿中的信息复制到刚刚创建的工作簿中。下面是获取数据的代码:
Sub mil10_data()
Dim NewWB As Workbook
Dim thisWB As Workbook
Dim wb As Workbook
Dim Ret
Set thisWB = ThisWorkbook
Set NewWB = ActiveWorkbook
With NewWB
'Copy the pre-made template to new workbook
thisWB.Sheets("Data 10").Range("A1:AZ3000").Copy NewWB.Sheets(ActiveSheet.Name).Range("A1:AZ3000")
'Retriving the data
Ret = Application.GetOpenFilename("Excel Files (*.CSV), *.CSV", Title:="Select File To Be Opened")
If Ret = False Then Exit Sub
Set wb = Workbooks.Open(Ret)
**'This is where the error is show up
wb.Sheets(ActiveSheet.Name).Range("E21:E2136").Copy NewWB.Sheets(ActiveSheet.Name).Range("C2:C2117")**
wb.Close SaveChanges:=False
Set wb = Nothing
Set NewWB = Nothing
End With
End Sub
我认为可能是因为打开了三个工作簿,它不知道哪个是活动工作簿,但事实并非如此。我使用 MsgBox 进行了测试,它显示了我想要的正确的工作簿和工作表名称。如果我将 ActiveSheet.Name 更改为实际工作表名称,它可以工作,但我不想使用该方法。我有不同的工作表需要创建,所以我更喜欢使用 ActiveSheet.Name。有谁知道为什么它不起作用?我非常感谢您的帮助。谢谢!
【问题讨论】:
-
你想用这条线
wb.Sheets(ActiveSheet.Name)实现什么?您要引用哪个ActiveSheet?也许您需要完全限定要使用哪个ActiveSheet?也许wb.ActiveSheet.Name -
wb.Sheets(ActiveSheet.Name)是指用户打开的文件,在该文件中将提取信息并将其粘贴到NewWB.Sheets(ActiveSheet.Name)