Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5366|回复: 17

[已解决]去除空白工作表

[复制链接]
发表于 2015-2-11 19:55 | 显示全部楼层 |阅读模式
去除空白工作表,如文件夹1中的,sheet3工作表要去除,
文件夹2中的 sheet2,sheet3 工作表要去除。明明存在,删除不了。
最佳答案
2015-2-11 21:45
msgbox都不需要,处理文件的时候。

去除空白工作表.rar

31.94 KB, 下载次数: 6

发表于 2015-2-11 21:07 | 显示全部楼层
thestr判断纯属多余,代码刚开始时thestr就是empty,你的判断会阻止正确的执行流程。

回复

使用道具 举报

 楼主| 发表于 2015-2-11 21:10 | 显示全部楼层
hwc2ycy 发表于 2015-2-11 21:07
thestr判断纯属多余,代码刚开始时thestr就是empty,你的判断会阻止正确的执行流程。

太多 if  了,我搞到头晕,是哪里错了?恳请帮助。谢谢!
回复

使用道具 举报

发表于 2015-2-11 21:11 | 显示全部楼层
  1. Sub 删除空白工作表()
  2.     Dim thePath$, theBook As Workbook, sht As Object
  3.     Dim theVisibleShtCount&, theSht As Worksheet, theStr
  4.     Dim theBookCount&, theShtCount&
  5.     With Application.FileDialog(msoFileDialogFolderPicker)
  6.         .AllowMultiSelect = False
  7.         If .Show = -1 Then
  8.             thePath = .SelectedItems(1)
  9.             If Right(thePath, 1) <> "" Then thePath = thePath & ""
  10.         Else
  11.             If MsgBox("以本工作簿所在路径为默认文件夹吗?" _
  12.                     & vbNewLine & vbNewLine & "单击“否”可退出程序", vbYesNo, "确认默认路径") = vbYes Then
  13.                 thePath = ThisWorkbook.Path
  14.                 If Right(thePath, 1) <> "" Then thePath = thePath & ""
  15.             Else
  16.                 GoTo The_Exit
  17.             End If
  18.         End If
  19.     End With

  20.     '    If theStr <> "" Then
  21.     Application.ShowWindowsInTaskbar = False
  22.     Application.ScreenUpdating = False
  23.     Application.DisplayAlerts = False
  24.    
  25.     If theStr <> ThisWorkbook.Name Then
  26.         On Error Resume Next
  27.         theStr = GetName(thePath)
  28.         For kk = 0 To UBound(theStr)
  29.             Set theBook = Workbooks.Open(theStr(kk))
  30.             If err.Number = 0 Then
  31.                 On Error GoTo 0
  32.                 theBookCount = theBookCount + 1
  33.                 For Each theSht In theBook.Worksheets
  34.                     If WorksheetFunction.CountA(theSht.Cells) = 0 Then
  35.                         theVisibleShtCount = 0
  36.                         If theBook.Sheets.Count > 1 Then
  37.                             For Each sht In theBook.Sheets
  38.                                 If sht.Visible = xlSheetVisible Then theVisibleShtCount = theVisibleShtCount + 1
  39.                             Next sht
  40.                             If theVisibleShtCount > 1 Then
  41.                                 Application.DisplayAlerts = False
  42.                                 theSht.Delete
  43.                                 theShtCount = theShtCount + 1
  44.                                 Application.DisplayAlerts = True
  45.                             Else
  46.                                 If theSht.Visible = xlSheetVisible Then
  47.                                     Application.ScreenUpdating = True
  48.                                     MsgBox "工作簿内须至少含有一张可视工作表" _
  49.                                          & vbNewLine & vbNewLine & "当前待处理工作簿“" & theBook.Name & "”的最后一个可视工作表“" & theSht.Name & "”不能被删除!", vbExclamation, "警告"
  50.                                     Application.ScreenUpdating = False
  51.                                 End If
  52.                             End If
  53.                         Else
  54.                             Application.ScreenUpdating = True
  55.                             MsgBox "工作簿内须至少含有一张可视工作表" _
  56.                                  & vbNewLine & vbNewLine & "当前待处理工作簿“" & theBook.Name & "”的最后一个可视工作表“" & theSht.Name & "”不能被删除!", vbExclamation, "警告"
  57.                             Application.ScreenUpdating = False
  58.                         End If
  59.                     End If
  60.                 Next theSht
  61.                 theBook.Close SaveChanges:=True
  62.             Else
  63.                 On Error GoTo 0
  64.                 Application.ScreenUpdating = True
  65.                 MsgBox "打开工作簿" & theStr & "失败!", vbCritical, "错误"
  66.                 Application.ScreenUpdating = False
  67.             End If
  68.         Next
  69.     End If

  70.     Application.ScreenUpdating = True
  71.     MsgBox "共计处理 " & theBookCount & " 个工作簿,删除 " & theShtCount & " 个工作表", vbInformation, "提示"
  72.     Application.ShowWindowsInTaskbar = True
  73.     '    Else
  74.     '        Application.ScreenUpdating = True
  75.     '        MsgBox "不存在目标工作簿!", vbInformation, "提示"
  76.     '    End If
  77. The_Exit:
  78.     Application.ScreenUpdating = True
  79.     Application.ShowWindowsInTaskbar = True
  80.     Set theBook = Nothing
  81. End Sub
复制代码
回复

使用道具 举报

发表于 2015-2-11 21:14 | 显示全部楼层
剩下你于测试当工作簿是3个空白表的情况吧。
回复

使用道具 举报

发表于 2015-2-11 21:15 | 显示全部楼层
对于一个variant类型的变量,要判断是否有曾赋值,可以用isempty来测试
回复

使用道具 举报

 楼主| 发表于 2015-2-11 21:15 | 显示全部楼层
hwc2ycy 发表于 2015-2-11 21:11

Application.DisplayAlerts = False  这句不发挥作用。
当一个工作簿中全部是空白工作表时,会不断出现错误提示对话框的。
回复

使用道具 举报

 楼主| 发表于 2015-2-11 21:17 | 显示全部楼层
hwc2ycy 发表于 2015-2-11 21:15
对于一个variant类型的变量,要判断是否有曾赋值,可以用isempty来测试

http://www.excelpx.com/thread-339039-1-1.html

对于同样是遍历,黄色单元的整行怎么删除不了,是哪个循环用错了还是此方法行不通?
回复

使用道具 举报

发表于 2015-2-11 21:19 | 显示全部楼层
张雄友 发表于 2015-2-11 21:15
Application.DisplayAlerts = False  这句不发挥作用。
当一个工作簿中全部是空白工作表时,会不断出现错 ...

这个提示不需要了,既然都删除得差不多了。
再说这个属性对msgbox是无效的。


回复

使用道具 举报

 楼主| 发表于 2015-2-11 21:22 | 显示全部楼层
hwc2ycy 发表于 2015-2-11 21:19
这个提示不需要了,既然都删除得差不多了。
再说这个属性对msgbox是无效的。

http://www.excelpx.com/thread-339039-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 09:53 , Processed in 0.378143 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表