Vba excel工作表的创建和更新

Vba excel工作表的创建和更新,vba,excel,Vba,Excel,我正在寻找一种基于单元格列表在excel中创建工作表的方法 我的问题是,我希望脚本检查列表是否已更新,并添加其他工作表,而不是重新创建所有或删除旧副本 1) 是否可以从excel(非VBA)执行此操作 2) 如果不是,我创建图纸的代码是: 但如果我重新运行(我正在寻找更新),它将创建新的入口 使用此函数检查工作表是否已存在,然后让它跳过它 Function WorksheetExists(sName As String) As Boolean WorksheetExists = Eval

我正在寻找一种基于单元格列表在excel中创建工作表的方法 我的问题是,我希望脚本检查列表是否已更新,并添加其他工作表,而不是重新创建所有或删除旧副本

1) 是否可以从excel(非VBA)执行此操作

2) 如果不是,我创建图纸的代码是: 但如果我重新运行(我正在寻找更新),它将创建新的入口


使用此函数检查工作表是否已存在,然后让它跳过它

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
因此,您的代码可以是:

Sub AddSheets()
    'Updateby Extendoffice 20161215
    Dim xRg As Variant
    Dim wSh As Excel.Worksheet
    Dim wBk As Excel.Workbook
    Set wSh = ActiveSheet
    Set wBk = ActiveWorkbook
    Application.ScreenUpdating = False
    For Each xRg In wSh.Range("A1:A7")
        If Not IsError(xRg) Then
            If xRg <> "" Then
                If Not WorkSheetExists((xRg)) Then
                    With wBk
                       .Sheets.Add after:=.Sheets(.Sheets.Count)
                        ActiveSheet.Name = xRg.Value
                    End With
                End If
            End If
        End If
    Next xRg
    Application.ScreenUpdating = True
End Sub

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
Sub AddSheets()
'由Extendoffice 20161215更新
Dim xRg作为变体
将wSh设置为Excel.工作表
将wBk设置为Excel.工作簿
设置wSh=ActiveSheet
设置wBk=ActiveWorkbook
Application.ScreenUpdating=False
对于wSh范围内的每个xRg(“A1:A7”)
如果不是IsError(xRg),则
如果xRg“”那么
如果不是工作表列表((xRg)),则
用wBk
.Sheets.Add after:=.Sheets(.Sheets.Count)
ActiveSheet.Name=xRg.Value
以
如果结束
如果结束
如果结束
下一个xRg
Application.ScreenUpdating=True
端接头
函数工作表列表(sName为字符串)为布尔值
WorksheetExists=Evaluate(“ISREF(“&sName&”!A1)”)
端函数

使用此功能检查工作表是否已存在,然后让它跳过它

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
因此,您的代码可以是:

Sub AddSheets()
    'Updateby Extendoffice 20161215
    Dim xRg As Variant
    Dim wSh As Excel.Worksheet
    Dim wBk As Excel.Workbook
    Set wSh = ActiveSheet
    Set wBk = ActiveWorkbook
    Application.ScreenUpdating = False
    For Each xRg In wSh.Range("A1:A7")
        If Not IsError(xRg) Then
            If xRg <> "" Then
                If Not WorkSheetExists((xRg)) Then
                    With wBk
                       .Sheets.Add after:=.Sheets(.Sheets.Count)
                        ActiveSheet.Name = xRg.Value
                    End With
                End If
            End If
        End If
    Next xRg
    Application.ScreenUpdating = True
End Sub

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
Sub AddSheets()
'由Extendoffice 20161215更新
Dim xRg作为变体
将wSh设置为Excel.工作表
将wBk设置为Excel.工作簿
设置wSh=ActiveSheet
设置wBk=ActiveWorkbook
Application.ScreenUpdating=False
对于wSh范围内的每个xRg(“A1:A7”)
如果不是IsError(xRg),则
如果xRg“”那么
如果不是工作表列表((xRg)),则
用wBk
.Sheets.Add after:=.Sheets(.Sheets.Count)
ActiveSheet.Name=xRg.Value
以
如果结束
如果结束
如果结束
下一个xRg
Application.ScreenUpdating=True
端接头
函数工作表列表(sName为字符串)为布尔值
WorksheetExists=Evaluate(“ISREF(“&sName&”!A1)”)
端函数

这里是另一个选项。我还添加了一个部分,其中它会将工作表命名为列a值。(如果需要,可以将其删除)

Sub AddSheets()
'由Extendoffice 20161215更新
将xRg设置为Excel.Range
将wSh设置为Excel.工作表
将wBk设置为Excel.工作簿
设置wSh=ActiveSheet
设置wBk=ActiveWorkbook
Application.ScreenUpdating=False
对于wSh范围内的每个xRg(“A1:A7”)
用wBk
如果不存在(xRg.Value)和xRg“”,则
.Sheets.Add after:=.Sheets(.Sheets.Count)
ActiveSheet.Name=xRg.Value
如果结束
以
下一个xRg
Application.ScreenUpdating=True
端接头
函数sheetExists(sheetToFind为字符串)为布尔值
'http://stackoverflow.com/a/6040454/4650297
将工作表设置为工作表
sheetExists=False
对于工作表中的每张图纸
如果sheetToFind=sheet.Name,则
sheetExists=True
退出功能
如果结束
下一页
端函数

这里是另一个选项。我还添加了一个部分,其中它会将工作表命名为列a值。(如果需要,可以将其删除)

Sub AddSheets()
'由Extendoffice 20161215更新
将xRg设置为Excel.Range
将wSh设置为Excel.工作表
将wBk设置为Excel.工作簿
设置wSh=ActiveSheet
设置wBk=ActiveWorkbook
Application.ScreenUpdating=False
对于wSh范围内的每个xRg(“A1:A7”)
用wBk
如果不存在(xRg.Value)和xRg“”,则
.Sheets.Add after:=.Sheets(.Sheets.Count)
ActiveSheet.Name=xRg.Value
如果结束
以
下一个xRg
Application.ScreenUpdating=True
端接头
函数sheetExists(sheetToFind为字符串)为布尔值
'http://stackoverflow.com/a/6040454/4650297
将工作表设置为工作表
sheetExists=False
对于工作表中的每张图纸
如果sheetToFind=sheet.Name,则
sheetExists=True
退出功能
如果结束
下一页
端函数

您所说的“更新”是什么意思。您是否只想多次运行此操作,并且仅在新工作表不存在时添加新工作表?是的,完全正确。。。如果该范围的单元格中没有值,那么跳过它,您所说的“更新”是什么意思。您是否只想多次运行此操作,并且仅在新工作表不存在时添加新工作表?是的,完全正确。。。如果在该范围内的单元格中没有值,那么跳过它是可行的,但每次执行时都会出现“类型不匹配”错误是的,我只是修复了它。我必须将xRg更改为变量而不是范围,以便函数可以接受参数。现在尝试更新的代码。为什么有“不做任何事情”的块?反转条件并移除冗余的
Else
。。以及外部条件下的冗余
Else
。。。请注意,
iError(Rx)
为真时,
Rx”“
将导致类型不匹配。很抱歉,我尝试从手机编辑,格式设置完全无效,但每次执行时都会出现“类型不匹配”错误。是的,我刚刚修复了它。我必须将xRg更改为变量而不是范围,以便函数可以接受参数。现在尝试更新的代码。为什么有“不做任何事情”的块?反转条件并移除冗余的
Else
。。以及外部条件下的冗余
Else
。。。请注意,
iError(Rx)
为真时,
Rx”“
将导致类型不匹配。很抱歉,我尝试从手机编辑,但格式完全丢失