Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 检查其他工作簿是否包含具有特定名称的工作表_Excel_Vba - Fatal编程技术网

Excel 检查其他工作簿是否包含具有特定名称的工作表

Excel 检查其他工作簿是否包含具有特定名称的工作表,excel,vba,Excel,Vba,我想创建一个宏来检查工作簿是否包含具有特定名称的工作表。 以下是我目前能做的最好的: Function IsSheetExist(Year As Integer, Month As Integer) As Boolean Dim sht As Worksheet Dim shtName As String 'creat the target sheetname (201901 / 201902 / 201903 / ... / 201912) If Month < 10 Then

我想创建一个宏来检查工作簿是否包含具有特定名称的工作表。 以下是我目前能做的最好的:

Function IsSheetExist(Year As Integer, Month As Integer) As Boolean
Dim sht As Worksheet
Dim shtName As String

'creat the target sheetname (201901 / 201902 / 201903 / ... / 201912)
If Month < 10 Then
    shtName = Year & "0" & Month
Else
    shtName = Year & Month
End If

'Cells(1,1) is the folderPath and Cells(4,1) is the fileName
Set wb = Workbooks.Open(Cells(1, 1) & "/" & Cells(4, 1))

For Each sht In wb.Worksheets
    If sht.Name = shtName Then
        IsSheetExist = True
        Exit Function
    End If
Next sht
IsSheetExist = False
MsgBox ("It seems that the sheet [" + shtName + "] is not present in the workbook - " + Cells(4, 1))
End Function
函数IsSheetExist(年为整数,月为整数)为布尔值
将sht变暗为工作表
作为字符串的Dim shtName
'创建目标sheetname(201901/201902/201903/../201912)
如果月份<10,则
shtName=年、“0”和月
其他的
shtName=年和月
如果结束
'单元格(1,1)是文件夹路径,单元格(4,1)是文件名
设置wb=工作簿。打开(单元格(1,1)和“/”单元格(4,1))
对于wb.工作表中的每个sht
如果sht.Name=shtName,则
IsSheetExist=True
退出功能
如果结束
下一步
IsSheetExist=False
MsgBox(“工作表[“+shtName+”]似乎不在工作簿中-“+单元格(4,1))
端函数
这段代码还不起作用,但如果有人帮助,它会起作用吗


PS:我不想打开工作簿目标,只需检查其工作表名称

当您分配CheckSheetExist=True时,您需要将其更改为函数名,以便它实际返回

因此,请使用:

IsSheetExist = True 
(分配的位置相同=False)

[虽然我倾向于在输入“for each sht…”循环之前将其赋值为false,但在这里这并不重要]

在这里运行,工作正常。现在,我将包括

wb.Close saveChanges :=False

就在两个潜在退出点之前,否则下次运行时,如果wb未关闭,您将得到一个1004错误

此函数更简单

Function WorkSheetExists(ByVal wb As Workbook, ByVal strName As String) As Boolean
   On Error Resume Next
   WorkSheetExists = Not wb.Worksheets(strName) Is Nothing
End Function

谢谢,我刚刚编辑了我的帖子,这是一个复制/过去的错误,但不是我发布的原因。我甚至会打开文件
ReadOnly:=True
,因为它不能保存任何更改。签出好消息PEH-ReadOnly:=True是避免意外更改的一个很好的方法!皮带和支架!这是个好主意,谢谢大家。如果你打开这个世界book您应该在以下时间后关闭它:
wb.close SaveChanges:=False
。我觉得您的代码很好,到底是什么问题?有错误吗?谢谢ᴇʜ您找到了解决方案!因为我没有在打开工作簿后关闭工作簿,所以以下操作将搜索刚打开但没有此信息的工作簿中的以下工作簿的路径和文件名。然后使用绝对引用,如
ThisWorkbook.Worksheets(“Sheet1”).Range(“A1”)
而不仅仅是
范围(“A1”)
避免代码出现奇怪的行为。强烈建议告诉VBA工作簿和工作表中的每个区域、单元格、列、行等对象,否则Excel会猜测它是哪一个,并选择具有foucs的对象,这可能是错误的。好的,很高兴知道,我会这样做。