Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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,当我加载电子表格时,我总是遇到这个错误。它让我修复它,这会剥离所有的验证器。该文件另存为xlsm Excel在“”中发现不可读的内容。是否希望恢复此工作簿的内容。如果信任此工作簿的源,请单击“是” 您必须单击“是”,否则将无法加载。然后我得到了这个错误。 “Excel能够通过删除或修复不可读的内容来打开文件 已删除功能:从/xl/worksheets/sheet1.xml部分进行数据验证” 我对此一无所知,这真的很烦人。如果有人有任何建议,我将不胜感激。谢谢 James当我在“数据验证”对话框中

当我加载电子表格时,我总是遇到这个错误。它让我修复它,这会剥离所有的验证器。该文件另存为xlsm

Excel在“”中发现不可读的内容。是否希望恢复此工作簿的内容。如果信任此工作簿的源,请单击“是”

您必须单击“是”,否则将无法加载。然后我得到了这个错误。 “Excel能够通过删除或修复不可读的内容来打开文件 已删除功能:从/xl/worksheets/sheet1.xml部分进行数据验证”

我对此一无所知,这真的很烦人。如果有人有任何建议,我将不胜感激。谢谢
James

当我在“数据验证”对话框中定义了一个很长的数据验证列表时,我遇到了这个错误(尽管我现在无法复制它)。如果对话框中的列表很长,请尝试将列表移动到某个范围,然后引用该范围。

我的工作簿也遇到了同样的问题。我发现这个链接最有帮助-

虽然被接受的答案最终会为我解决这个问题(重建工作簿),但这将花费大量时间清除sortfields最终解决了我的问题。

Sub clearSortFields()
Dim ws as worksheet
ThisWorkbook.Activate
For Each ws In Worksheets
    ws.Sort.SortFields.Clear
Next ws
End Sub

这就是我修复它所做的,我在工作簿中另一张工作表的一列中填写了我想要的内容,然后引用了该工作表。我制作了工作表名称,我引用了SheetName中的列表(请在此处输入您的工作表名称),A2:A19引用了参考工作表中的那些单元格。如果需要,也可以更轻松地编辑列表

子测试()
工作表(“表1”)。激活
使用rng.Validation
.删除
.Add类型:=xlValidateList,AlertStyle:=xlValidAlertStop,运算符:=_
xlBetween,Formula1:=“=SheetName!$A$2:$A$19”'将SheetName和范围替换为您的
以

通过删除验证单元格并再次在打开工作簿时运行代码以重新验证,结束Sub
,可以解决此问题

Sub RemValidation()
Dim ARows As Variant
Dim i As Double
ARows = Split("C3,C4,C5,C6,C14,C19,C20,C25,F4", ",")

For i = 0 To UBound(ARows)
ThisWorkbook.Sheets("WO").Range(ARows(i)).Validation.Delete
Next

End Sub

这个问题已经过时了,但仍有人在寻找解决这个问题的办法。 当我打开包含使用VBA代码创建的数据验证列表的工作簿时,我遇到了相同的问题。在此基础上,我添加了代码片段,以在关闭工作簿时删除数据验证列表:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
   For Each ws In ThisWorkbook.Worksheets
      On Error Resume Next
      ws.Cells.SpecialCells(xlCellTypeAllValidation).Validation.Delete
      On Error GoTo 0
   Next ws
End Sub

如图所示,我使用VBA代码创建了具有有序和唯一值的数据验证列表,并将其添加到A列的单元格中


非常感谢您的建议,您能描述一下数据验证列表的长度吗。我现在正在使用vba生成我的所有验证器,因为我已经放弃使用excel菜单上的标准数据验证器。这种验证会创建一个下拉列表,类似于:ActiveCell.validation.Add Type:=xlValidateList,Formula1:=“tester1,tester2,tester3”…听起来正是我使用的。我将如何使用范围来代替?你有一些示例代码吗?这听起来很有希望。ActiveCell.Validation.Add类型:=xlValidateList,Formula1:=“=Sheet1!D1:D4”或ActiveCell.Validation.Add类型:=xlValidateList,Formula1:=”=rngValidation”。在第二部分中,“rngValidation”是一个命名范围。如果这样做没有意义,那就开始用谷歌来增加你对数据验证的基本理解吧。我似乎陷入了困境。我的选择器是一个函数,所以我给它传递一个范围。范围大小发生变化,因此无法命名。我之前将该范围解析为一个列表以使其工作。我尝试将字符串传递给函数s=”“”=Data!AA1:AA17”“,并使用公式1:=s,但这只会显示字符串。