excel - IF 语句问题不适用于选择
问题描述
我试图制作这段代码,但仍然有问题。
问题很简单——
If sheet2 exists then
ThisWorkbook.Sheets(Sheet1).Range(a1).Select
If does not exist then
Set ws = Worksheets.Add(after:=Worksheets("Sheet1")) ws.Name = "Sheet2"
但是在添加 sheet2 之后它仍然给出错误。下面是代码:
Sub new6()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ActiveWorkbook
For Each ws In wb.Worksheets
If ws.Name <> "Sheet2" Then
Set ws = Worksheets.Add(after:=Worksheets("Sheet1"))
ws.Name = "Sheet2"
Else
ThisWorkbook.Sheets(Sheet1).Range(a1).Select
End If
Next
End Sub
解决方案
我认为您需要通过实施@Tim Williams的出色解决方案来改变您的方法并完全消除该循环。您的代码的问题是您在验证该工作表是否存在于书中之前添加了一个新工作表。
添加WorksheetExists
将扫描整个工作簿以查找没有循环的工作表并返回的功能WorksheetExists = TRUE or FALSE
。从那里您可以通过删除循环并作用于函数的结果来简化宏。
你也可以Select
在这里避免Application.Goto
Sub new6()
Dim ws As Worksheet
If WorksheetExists("Sheet2", ActiveWorkbook) Then
Application.Goto (Sheets("Sheet1").Range("A1"))
Else
Set ws = Worksheets.Add(After:=Worksheets("Sheet1"))
ws.Name = "Sheet2"
End If
End Sub
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
Dim sht As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set sht = wb.Sheets(shtName)
On Error GoTo 0
WorksheetExists = Not sht Is Nothing
End Function
推荐阅读
- c++ - 如何编写一个函数来交换二维数组中的行(c++)
- javascript - 我不明白为什么我的代码会渲染两次 - 简单的 React
- reactjs - 如果多条状态数据总是一起改变,我应该只将一个保持在状态中,而将其余的保持在类变量中吗?
- android - 卡在启动意图主要活动反应本机应用程序
- html - WordPress 安装后会改变我的整个网页设计吗?
- azure - 如何提前访问 Azure 应用服务中的配置?
- reactjs - 为什么 console.log("hello) 在 React hooks 中打印了六次
- xml - 使用 XSLT 格式化时间
- php - infusionsoft api - 如何通过使用联系人 ID 作为过滤器来获取联系人详细信息
- python - 如何使用python从单独的文件中删除一行