我有一个大的Microsoft Excel文件,在我办公室的用户之间共享。该文件有一个宏和一组数据验证。该文件在每三个月的最后两周使用。该文件在圣诞节前完美运行,但是,我们在3月份遇到了错误。文件打开时出现以下错误
点击“是”后,出现以下内容
宏的代码是:
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
我已经找到了许多解决方法,然而,这些会降低我们的工作效率,并且错误会在当天晚些时候重新出现。有人能告诉我这个问题的可能原因是什么?
答案 0 :(得分:6)
为避免冗长的评论部分,我们昨晚继续聊天。它比预期更快。他在下面提供了definedName块。
尽管我看到有许多事情可能/没有贡献,但它看起来最像是共享视图中的断开关系。它是一个共享的工作簿,位于网络驱动器上,从外观上看,有6台不同的机器都存储了一些个人视图数据。语法都看起来没问题,因此在没有看到所有工作表* .xml文件的情况下,它可能位于<definedName>
和<customWorkbookViews>
/ <customSheetViews>
节点之一,这些节点都基于GUID关联。由于excel是在运行时生成的,因此失去控制权很容易。
关闭“审核标签”&gt;“共享工作簿”&gt;“高级”标签中的“过滤器设置”,在“包含在个人视图中”标题下,将从工作表中删除所有的.wvu
个命名节点。 xml,以及来自sheet * .xml的*View(s)
个节点,并防止它们重新出现。这将解决问题,或将候选者减少到一个用户定义,以及一个系统定义的范围。有可能是最近的一次豁免会导致一些文件没有更新,从而导致关系破裂。
缺点:只能保存一个视图状态,因此您将在打开文件时看到最后一个用户格式/过滤器更改。
希望它能真正解决它!如果没有,我们将再进行一轮。
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>