什么原因导致Microsoft excel错误“删除记录:从/xl/workbook.xml部分命名范围(工作簿)”

时间:2015-04-15 13:45:28

标签: excel vba excel-vba

我有一个大的Microsoft Excel文件,在我办公室的用户之间共享。该文件有一个宏和一组数据验证。该文件在每三个月的最后两周使用。该文件在圣诞节前完美运行,但是,我们在3月份遇到了错误。文件打开时出现以下错误 Error

点击“是”后,出现以下内容 enter image description here

宏的代码是:

 Sub Update()

 'Declaring Variables.
  Dim Number_Rows As Long
  Dim Oppt As String
  Dim Array_Oppt() As String
  Dim Rows_Array As Integer

 'Stops screen refreshing to save time.
  Application.ScreenUpdating = False

 'removing any data validation and conditional formatting
  Sheet1.Activate
  Cells.Select
  Selection.Validation.Delete
  Selection.FormatConditions.Delete


 'Assigning value to array.
  Rows_Array = 0
  ReDim Preserve Array_Oppt(Rows_Array)


 'Moving "Other" rows to the end of the data
  Sheet1.Select
  Selection.AutoFilter Field:=23, Criteria1:= _
  "OTHER"

  Range("A2", Cells(Rows.Count,       "A").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells(1, 1).Select
 Selection.EntireRow.Select
 Range(Selection, Selection.End(xlDown)).SpecialCells(xlCellTypeVisible).Select
 Selection.Copy
 Sheet8.Select
 Sheet8.Range("A1").Select
 ActiveSheet.Paste
 Sheet1.Select
 Range("A2", Cells(Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells(1, 1).Select
 Selection.EntireRow.Select
 Range(Selection, Selection.End(xlDown)).SpecialCells(xlCellTypeVisible).Select
 Selection.Delete Shift:=xlUp
 Selection.AutoFilter

 Number_Rows = Application.WorksheetFunction.CountA(Range("A:A"))
 Sheet8.Select
 Selection.Cut
 Sheet1.Activate
 Range("A" & Number_Rows + 1).Select
 ActiveSheet.Paste

 'Counting number of rows.
  Number_Rows = Application.WorksheetFunction.CountA(Range("A:A"))

  'Loop to check if oppt if unit or non unit deal. Checks if oppt is in array and adds oppt if not.
 'Calculates total revenue per opp.
  For i = 2 To Number_Rows

  Oppt = Range("I" & i)

'In array already.
If UBound(Filter(Array_Oppt, Oppt)) >= 0 Then

    'Non Unit deal in the array already. Deletes line and shifts row up as well as i up.
    If Range("W" & i) = "OTHER" Then
    Rows(i).Select
    Selection.Delete Shift:=xlUp
    Number_Rows = Number_Rows - 1
    i = i - 1

    'Unit deal in the array already.
    Else
    Range("J" & i) = ""
    End If

'Not in array so needs to be added.
Else
Range("J" & i) = Application.WorksheetFunction.SumIf(Range("I:I"), Oppt, Range("J:J"))

    If Range("W" & i) = "OTHER" Then

    Range(Cells(i, 19), Cells(i, 26)) = ""

    Else
    End If

'Redefines the size of the array factoring in new added row.
ReDim Preserve Array_Oppt(Rows_Array)
Array_Oppt(Rows_Array) = Oppt
Rows_Array = Rows_Array + 1
End If

Next


'Adds blank column for business manager.
 Columns("H:H").Select
 Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
 Range("H1") = "Business Manager"


 'Updates the titles of the last columns in  file
  Range("AB1") = Date - 2
  Range("AC1") = Date - 1
  Range("AD1") = "Today"
  Range("AE1") = "Focus List"
  Range("AF1") = "% Chance"
  Range("AG1") = "Allocation Status"
  Range("AH1") = "New PO Date"
  Range("AI1") = Date - 3
  Range("AJ1") = Date - 4
  Range("AK1") = Date - 5
  Range("AL1") = Date - 6
  Range("AM1") = Date - 7
  Range("AN1") = Date - 8
  Range("AO1") = Date - 9
  Range("AP1") = Date - 10
  Range("AQ1") = "Partner Grouping"
  Range("AR1") = "VNX Models"
  Range("AS1") = "Commit + X"
  Range("AT1") = "Country"
  Range("AU1") = "Theater"


  'Moves to Sheet2 and copies Upside X column B to the end (column AV) for the purpose of VLookup. Then returns to Sheet1.
Sheet2.Activate
Sheet2.Columns("B:B").Select
Application.CutCopyMode = False
Selection.Copy
Sheet2.Columns("AV:AV").Select
ActiveSheet.Paste
Sheet1.Activate


'Loop to add Linked status; and to complete VLookups from yesterday.
 For i = 2 To Number_Rows

'If to check linked status
If Range("L" & i) = "" Then
Range("M" & i) = "Not Linked"

Else
Range("M" & i) = "Linked"
End If


'Vlookups
On Error Resume Next
Err.Clear
'Vlookup to add business manager
Sheet1.Range("H" & i) = Application.VLookup(Sheet1.Range("G" & i), Sheet3.Range("A:B"), 2, False)
'Vlookup to add comments from 2 days ago to column AB
Sheet1.Range("AB" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 20, False)
'Vlookup to add comments from yesterday to column AC
Sheet1.Range("AC" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 21, False)
'Vlookup to add data from Focus List column
Sheet1.Range("AE" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 22, False)
'Vlookup to add data from % Chance column
Sheet1.Range("AF" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 23, False)
'Vlookup to add data from Allocation Status column
Sheet1.Range("AG" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 24, False)
'Vlookup to add data from New PO Date column
Sheet1.Range("AH" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 25, False)
'Vlookup to add data from 3 days ago to column AI
Sheet1.Range("AI" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 19, False)
'Vlookup to add data from 4 days ago to column AJ
Sheet1.Range("AJ" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 26, False)
'Vlookup to add data from 5 days ago to column AK
Sheet1.Range("AK" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 27, False)
'Vlookup to add data from 6 days ago to column AL
Sheet1.Range("AL" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 28, False)
'Vlookup to add data from 7 days ago to column AM
Sheet1.Range("AM" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 29, False)
'Vlookup to add data from 8 days ago to column AN
Sheet1.Range("AN" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 30, False)
'Vlookup to add data from 9 days ago to column AO
Sheet1.Range("AO" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 31, False)
'Vlookup to add data from 10 days ago to column AP
Sheet1.Range("AP" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AR"), 32, False)
'Vlookup to add data to VNX Models column AR from VNX Models sheet 5 using Item Number column
Sheet1.Range("AR" & i) = Application.VLookup(Sheet1.Range("W" & i), Sheet5.Range("A:B"), 2, False)
'Vlookup to add data to Upside X column B
Sheet1.Range("B" & i) = Application.VLookup(Sheet1.Range("J" & i), Sheet2.Range("J:AV"), 39, False)
'Vlookup to add  Country to Country column AT based on Mapping Table sheet 4
Sheet1.Range("AT" & i) = Application.VLookup(Sheet1.Range("G" & i), Sheet4.Range("A:B"), 2, False)
'Vlookup to add Theater to Theater column AU based on Mapping Table sheet 4
Sheet1.Range("AU" & i) = Application.VLookup(Sheet1.Range("G" & i), Sheet4.Range("A:C"), 3, False)

If Err.Number = 0 Then
Else
End If


Next



 'Adding Formula for Commit + X Column AS for Conf Call Analysis file
  Range("AS2").Formula =     "=IF(C2=""Commit"",""Commit+X"",IF(B2=""X"",""Commit+X"",""""))"
  Range("AS2").Select
  Selection.AutoFill Destination:=Range("AS2:AS" & Number_Rows)




  '***********FORMATTING BELOW**************


 'Format Revenue column K - no decimal, 1,000 seperator.
  Columns("K:K").Select
  Selection.NumberFormat = "#,##0"

 'Format Forecast Close Date column P
  Columns("P:P").Select
  Selection.NumberFormat = "d/m/yyyy"

 'Format Focus List column AE
  Columns("AE:AE").Select
  Selection.NumberFormat = "d/m/yyyy"

 'Format % Chance column AF
  Columns("AF:AF").Select
  Selection.NumberFormat = "0%"

 'Format cells with Dates as titles to dd-mm rather than long date
  Range("AB1:AC1").Select
  Selection.NumberFormat = "d-mmm"
  Range("AI1:AP1").Select
  Selection.NumberFormat = "d-mmm"


 'Add Data Validation to Allocation Status column
  Columns("AG:AG").Select
  With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=_Allocation"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With


 'Sorting by Description A-Z, Business Manager A-Z and Revenue $ Largest to    Smallest
  Sheet1.Sort.SortFields.Clear
  Sheet1.Sort.SortFields.Add Key:=Range("C2:C" & Number_Rows _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Sheet1.Sort.SortFields.Add Key:=Range("H2:H" & Number_Rows _
    ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Sheet1.Sort.SortFields.Add Key:=Range("K2:K" & Number_Rows _
    ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With Sheet1.Sort
    .SetRange Range("A1:AU" & Number_Rows)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With


 'Hide Columns Quarter AA,Primary Partner OO, Reporting Product Type TT, Product Line VV, Opportunity Source Code QQ
 Columns("A:A").Select
 Selection.EntireColumn.Hidden = True
 Columns("O:O").Select
 Selection.EntireColumn.Hidden = True
 Columns("T:T").Select
 Selection.EntireColumn.Hidden = True
 Columns("Q:Q").Select
 Selection.EntireColumn.Hidden = True
 Columns("V:V").Select
 Selection.EntireColumn.Hidden = True


 'Colours Today column AD yellow
  Columns("AD:AD").Select
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With


 'Colours Allocation Status column AG blue
  Columns("AG:AG").Select
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 15773696
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With


  'Bold Headings in row 1
   Rows("1:1").Select
   Selection.Font.Bold = True


 'Adding Conditional Formatting Order Number column J, to highlight all duplicate values so that all oppts that have more than one row are red.
  Columns("J:J").Select
  Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
    .Color = -16383844
    .TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .Color = 13551615
    .TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False



 'Adding last updated date
  Sheet3.Range("J1") = Date


 'Allows screen to refresh at the end
  Application.ScreenUpdating = True


 'Msgbox to advise when macro is complete.
  MsgBox ("File is now updated.")


  End Sub

我已经找到了许多解决方法,然而,这些会降低我们的工作效率,并且错误会在当天​​晚些时候重新出现。有人能告诉我这个问题的可能原因是什么?

1 个答案:

答案 0 :(得分:6)

为避免冗长的评论部分,我们昨晚继续聊天。它比预期更快。他在下面提供了definedName块。

尽管我看到有许多事情可能/没有贡献,但它看起来最像是共享视图中的断开关系。它是一个共享的工作簿,位于网络驱动器上,从外观上看,有6台不同的机器都存储了一些个人视图数据。语法都看起来没问题,因此在没有看到所有工作表* .xml文件的情况下,它可能位于<definedName><customWorkbookViews> / <customSheetViews>节点之一,这些节点都基于GUID关联。由于excel是在运行时生成的,因此失去控制权很容易。

关闭“审核标签”&gt;“共享工作簿”&gt;“高级”标签中的“过滤器设置”,在“包含在个人视图中”标题下,将从工作表中删除所有.wvu个命名节点。 xml,以及来自sheet * .xml的*View(s)个节点,并防止它们重新出现。这将解决问题,或将候选者减少到一个用户定义,以及一个系统定义的范围。有可能是最近的一次豁免会导致一些文件没有更新,从而导致关系破裂。

缺点:只能保存一个视图状态,因此您将在打开文件时看到最后一个用户格式/过滤器更改。

希望它能真正解决它!如果没有,我们将再进行一轮。

customSheetView Class MSDN

customWorkbookView Class MSDN

UserBView MSDN (The strangely formatted Z_GUID part)

customSheetViewClass doc声明GUID“应对应于customWorkbookView ”,其中customWorkbookView只需要包含全局唯一GUID的名称(我知道但是它在文档中是多余的) 。如果未通过“Shall”要求,将导致“已删除的记录:/xl/workbook.xml/部分(工作簿)中的命名范围”修复消息。

'EOQ TRACKER - MARCH 20TH V2.xlsm\workbook.xls - definedNames
    <definedNames> 
        <definedName name="_Allocation">'6'!$A$2:$A$25</definedName> 
        <definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">'1'!$A:$AV</definedName> 
        <definedName name="Z_02EBD829_B457_4EED_8A23_48BD791D2A90_.wvu.FilterData" localSheetId="0" hidden="1">'1'!$A$1:$AU$5396</definedName> 
        <definedName name="Z_5038F31E_F522_4C27_8172_A37A2E0A913D_.wvu.FilterData" localSheetId="0" hidden="1">'1'!$A:$AV</definedName> 
        <definedName name="Z_6179D930_DC8C_44A7_9B7D_D78327247088_.wvu.Cols" localSheetId="0" hidden="1">'1'!$A:$A,'1'!$O:$O,'1'!$Q:$Q,'1'!$T:$T,'1'!$V:$V</definedName> 
        <definedName name="Z_6179D930_DC8C_44A7_9B7D_D78327247088_.wvu.FilterData" localSheetId="0" hidden="1">'1'!$A$1:$AU$5396</definedName> 
        <definedName name="Z_7736F281_6E25_4779_AF1F_AC145F2EB4E9_.wvu.FilterData" localSheetId="0" hidden="1">'1'!$A$1:$AU$5396</definedName>
        <definedName name="Z_A2BCDFEA_821A_444D_B1F8_3659E07AD9AC_.wvu.Cols" localSheetId="0" hidden="1">'1'!$A:$A,'1'!$O:$O,'1'!$Q:$Q,'1'!$T:$T,'1'!$V:$V</definedName>
        <definedName name="Z_A2BCDFEA_821A_444D_B1F8_3659E07AD9AC_.wvu.FilterData" localSheetId="0" hidden="1">'1'!$A:$AV</definedName> 
        <definedName name="Z_A2BCDFEA_821A_444D_B1F8_3659E07AD9AC_.wvu.Rows" localSheetId="0" hidden="1">'1'!:$1048576</definedName> 
        <definedName name="Z_AC1AB890_7D16_45DD_B4FB_13CB8F92D4C2_.wvu.Cols" localSheetId="0" hidden="1">'1'!$A:$A,'1'!$O:$O,'1'!$Q:$Q,'1'!$T:$T,'1'!$V:$V</definedName>
        <definedName name="Z_AC1AB890_7D16_45DD_B4FB_13CB8F92D4C2_.wvu.FilterData" localSheetId="0" hidden="1">'1'!$A:$AV</definedName> 
    </definedNames>