excel - 在工作簿中找不到电子表格,即使该电子表格存在
问题描述
我有一小段代码:
NombreLibro = Application.GetOpenFilename()
Set Libro = Workbooks.Open(NombreLibro, , False)
If Val(Application.Version) > 15 Then 'I tried this but it doesn't solve the problem
Libro.AutoSaveOn = False
End If
With Libro
For i = 1 To .Worksheets.Count
If .Worksheets(i).CodeName = "Sheet1" Then 'HERE I HAVE THE PROBLEM
(doing something)
End If
Next i
End With
即使工作簿实际上具有“Sheet1”,有时“if”也是错误的。但是,如果我再次运行它,在代码中添加一个停止以检查发生了什么,那么这段代码将按预期工作。
我正在从公司网站下载工作簿并立即运行代码。我的电脑中有 OneDrive。所以我想知道 OneDrive 是否正忙于上传文件,然后 Excel 无法正确访问它?
你有什么建议我可以尝试?
编辑:
根据 VBasic2008 的建议(请参阅他/她的回答),我对代码进行了一些更改,但它一直失败。然后我添加了一个调试 MsgBox:
For Each ws In Libro.Worksheets
MsgBox "CodeName: " & ws.CodeName & vbLf _
& "Name: " & ws.Name & vbLf & "Libro: " & Libro.Name 'I added this
If ws.CodeName = wsCodeName Then
wasFound = True
Exit For ' The worksheet is found, no need to loop anymore.
End If
Next ws
结果(显示在 MsgBox 中):
代号:'空白!!!
名称:SheetName '正确
Libro: LibroName '正确
Excel 中是否存在与 CodeNames 相关的错误?
EDIT2:(解决方法)
我从公司网站下载文件,网站上的数据在表格上,然后转换器将其下载为 Excel 格式。
我认为下载的文件不是Excel格式并且CodeName没有填写。当 Excel 打开它,然后打开 VBA 编辑器时,Excel 会使用标准名称填写 CodeName。
就我而言,由于新下载的文件只有一张,我可以使用以下解决方法:
For Each ws In Libro.Worksheets
If ws.CodeName = wsCodeName Or ws.CodeName = "" Then
wasFound = True
Exit For
End If
Next ws
这将在第一次处理文件ws.CodeName = ""
和下一次时起作用ws.CodeName = wsCodename
解决方案
使用工作表代号
Option Explicit
Sub testCodeName()
Const wsCodeName As String = "Sheet1"
' Choose file (workbook, spreadsheet).
Dim NombreLibro As Variant
NombreLibro = Application.GetOpenFilename()
' Validate workbook.
If NombreLibro = False Then
MsgBox "You canceled.", vbExclamation, "Canceled"
Exit Sub
End If
' Open and create a reference to the workbook.
Dim Libro As Workbook: Set Libro = Workbooks.Open(NombreLibro, , False)
' Attempt to find the worksheet.
Dim ws As Worksheet
Dim wasFound As Boolean
For Each ws In Libro.Worksheets
If ws.CodeName = wsCodeName Then
wasFound = True
Exit For ' The worksheet is found, no need to loop anymore.
End If
Next ws
' Validate worksheet.
If Not wasFound Then
MsgBox "Worksheet not found.", vbExclamation, "Not Found"
Exit Sub
End With
' Continue with the code
With ws
' e.g. see if it's true.
MsgBox "Worksheet found:" & vbLf _
& "Name: " & .Name _
& vbLf & "CodeName: " & .CodeName, vbInformation, "Success"
End With
End Sub
推荐阅读
- c++ - Python和C++之间如何相互调用
- python-3.x - 例如获取当前公会ID
- reactjs - 如何使用这些代码将数据放入 MuiDataTable 中?
- google-sheets - SyntaxError:意外的令牌 - Google 表格脚本编辑器
- python - rpy2对R编译使用“类”时出错
- reactjs - 将淡入动画添加到 React 中的列表元素
- python - Plotly:向条形图添加阴影阈值
- java - 使用 JWT 令牌时,spring boot 身份验证返回 null
- go - 使用 resty 库的 Golang 模拟 API 调用
- ruby-on-rails - 如何使用 postgres 从 ruby 查询中删除周末