我正在尝试将单元格的公式设置为if公式,该公式使用工作簿中现有工作表中的数据。但是,无论何时尝试引用工作表,我都会看到一个文件对话框,该对话框打开,查找工作表的路径。下面你会找到我的代码,它循环遍历工作簿中的所有现有工作表,并在找到匹配时将其与工作表名称进行比较,它存储当前和前几周的工作表代码名称。一旦它有这些我有一个if语句,试图访问这些表并比较值。正是在这一点上,我得到了文件对话框。任何想法或建议将不胜感激。谢谢。对不起格式问题,我会尽快纠正。
sheetName = CStr(Year(Now)) & " eDR FW" & CStr(Format(Date, "ww")) & "_2"
lastWeekName = CStr(Year(Now)) & " eDR FW" & CStr(Format(Date, "ww") - 1) & "_2"
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = sheetName Then
sheetName = ws.CodeName
ElseIf ws.Name = lastWeekName Then
lastWeekName = ws.CodeName
End If
Next
rowRange = colLetter & "2:" & colLetter & CStr(sheetRowCount)
lineofBalance = "=IFERROR(IF(INDEX('" & lastWeekName & "'!$A$2:$W$10000,MATCH(A2,'" & sheetName & "'!$A$2:$A$10000,0),6)=F2,F2,CONCATENATE(""Updated: ""&F2)),CONCATENATE(""New: ""&F2))"
答案 0 :(得分:0)
要完成这项工作,您需要做的就是将ws.Codename
更改为ws.Name
。
.Codename
属性仅包含最初创建工作表时的第一个名称(很可能是" Sheet32"),而不是工作表的当前名称。它 CAN 可以更改,但除非您真的打算更改它,否则很可能会保持不变。然后,具有错误工作表名称的公式将打开对话框以尝试查找该特定工作表的引用。
Excel的公式旨在使用当前工作表名称而不是代号。我可以看到使用.Codename
的唯一有用的方法是,如果您想确保始终使用特定工作表(在VBA内),即使工作表的名称在某些时候(由您自己或用户)更改)。