【发布时间】:2019-01-31 12:11:32
【问题描述】:
我编写了一个代码,它打开了一个窗口,我可以在该窗口中选择一个我想要复制和导入工作表的 Excel 工作簿 (#2)。 然后,代码会检查打开的工作簿(#2)中是否存在所需的工作表(名为“Guidance”)。如果存在,则应将其复制并粘贴到当前工作簿(#1)中。 粘贴工作表后,工作簿 (#2) 应再次关闭。
到目前为止,代码完成了我想要它做的事情,因为它打开了窗口并让我选择想要的工作表(名为“Guidance”),但我有错误(不确定翻译是否正确)
“运行时错误'9':索引超出范围”
应该复制和粘贴工作表的位置。
对此的任何帮助将不胜感激!提前致谢。
Private Function SheetExists(sWSName As String, Optional InWorkbook As Workbook) As Boolean
If InWorkbook Is Nothing Then
Set InWorkbook = ThisWorkbook
End If
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(sWSName)
If Not ws Is Nothing Then SheetExists = True
On Error GoTo 0
End Function
Sub GuidanceImportieren()
Dim sImportFile As String, sFile As String
Dim sThisWB As Workbook
Dim vFilename As Variant
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set sThisWB = ActiveWorkbook
sImportFile = Application.GetOpenFilename("Microsoft Excel Workbooks,
*xls; *xlsx; *xlsm")
If sImportFile = "False" Then
MsgBox ("No File Selected")
Exit Sub
Else
vFilename = Split(sImportFile, "|")
sFile = vFilename(UBound(vFilename))
Application.Workbooks.Open (sImportFile)
Set wbWB = Workbooks("sImportFile")
With wbWB
If SheetExists("Guidance") Then
Set wsSht = .Sheets("Guidance")
wsSht.Copy Before:=sThisWB.Sheets("Guidance")
Else
MsgBox ("No worksheet named Guidance")
End If
wbWB.Close SaveChanges:=False
End With
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
【问题讨论】:
-
请注意:您应该在
End Function之前添加On Error GoTo 0或Err.Clear,否则Err将不会被清除,以防工作表不存在。 -
@Pᴇʜ 感谢您的提示!
-
sThisWB 是否已有名为“Guidance”的工作表?由于 Copy 方法中使用的 Before 参数使用现有工作表作为参考,因此如果工作表不存在,则无法引用它
-
哦,我实际上删除了名为“Guidance”的工作表,之前的代码检查它是否存在,如果存在则删除它。
-
@HenriquePessoa 如何将其插入到当前工作簿的开头?