我目前正在使用VBA宏,该宏从工作表中获取数据并将其复制到另一个。 如果目标工作表不存在,则应创建目标工作表,然后从我的数组中写入数据。
问题:
我有一个功能来测试工作表是否已经存在。
如果是这种情况,我的宏将成功写入我想要的数据。但是,如果工作表不存在,VBA将显示错误,您可以在下面看到。
在列表Workbook.Worksheets中没有这样命名的工作表,但无论如何我都会收到该错误。
这是我的相关代码:
(如果缺少一些东西来理解问题,我也可以填写缺少的部分)
DataTemplate
在主Sub中,我使用了以下代码:
Function sheetExists(sheetToFind As String) As Boolean
Dim Sheet As Worksheet
For Each Sheet In Worksheets
If sheetToFind = Sheet.Name Then
sheetExists = True
Exit Function
End If
Next Sheet
sheetExists = False
End Function
确切的错误:
1004无法将工作表重命名为与另一个工作表,参考对象库或Visual Basic引用的工作簿相同的名称
首先它执行成功,但是在我手动删除工作表之后,发生了错误。
感谢您的帮助:)
答案 0 :(得分:0)
指定要查看的工作簿:
/**
* a not so fancy way of failing asap, on first failing link in the control chain
* @return true if valid, false if not
*/
def isValid(): Boolean = {
val lst = List(
isValidForEmptyDF() _,
isValidForFoo() _,
isValidForBar() _
)
!lst.exists(!_()) // and fail asap ...
}
def isValidForEmptyDF()(): Boolean = {
val specsAreMatched: Boolean = true
try {
if (df.rdd.isEmpty) {
msg = "the file: " + uri + " is empty"
!specsAreMatched
} else {
specsAreMatched
}
} catch {
case jle: java.lang.UnsupportedOperationException => {
msg = msg + jle.getMessage
return false
}
case e: Exception => {
msg = msg + e.getMessage()
return false
}
}
}
也并非必须必须 For Each Sheet In ThisWorkbook.Sheets
而不是Sheets
,因为Worksheets
仅包含工作表,而Worksheets
也包含图表等。所以我们也必须检查这些名称!
(Sheets
必须为Sheet
)
您可以使功能更灵活:
Dim Sheet As Object
因此您可以称之为:
Function sheetExists(sheetToFind As String, Optional InWorkbook As Workbook) As Boolean
If InWorkbook Is Nothing Then Set InWorkbook = ThisWorkbook
Dim Sheet As Object
For Each Sheet In InWorkbook.Sheets
If sheetToFind = Sheet.Name Then
sheetExists = True
Exit Function
End If
Next Sheet
sheetExists = False
End Function
默认使用sheetExists("SheetName")
,或者ThisWorkbook
指定一个特定的工作簿。或者,您可以使用
sheetExists("SheetName", Workbooks("MyWorkbook"))
如果工作簿中有很多工作表,则可能会更快一些。