VBA代码挂起Excel

VBA代码挂起Excel,vba,excel,Vba,Excel,我编写了一个代码来获取文件中的原始数据,并根据报告的“日期”汇总数据,然后根据“日期”值将汇总数据复制到目标工作簿中 当我试图运行此代码时。它在一个文件中工作正常,但在另一个文件中挂起。当我试图调试它时,我无法遵循代码流。它突然破裂了。你能帮我解决这个问题吗 Option Explicit Sub file_select() Dim RequiredFileName As Variant, i As Integer Dim targetWorkbook As Workbook ' making

我编写了一个代码来获取文件中的原始数据,并根据报告的“日期”汇总数据,然后根据“日期”值将汇总数据复制到目标工作簿中

当我试图运行此代码时。它在一个文件中工作正常,但在另一个文件中挂起。当我试图调试它时,我无法遵循代码流。它突然破裂了。你能帮我解决这个问题吗

Option Explicit
Sub file_select()
Dim RequiredFileName As Variant, i As Integer
Dim targetWorkbook As Workbook
' making weak assumption that active workbook is the target
Set targetWorkbook = Application.ActiveWorkbook
'RequiredFileName = "c:\myfiles\test.xls"
On Error GoTo EndNow
RequiredFileName = Application.GetOpenFilename(FileFilter:="ALL Files (*.*), *.*", Title:="Get File", MultiSelect:=True)
For i = 1 To UBound(RequiredFileName)
    MsgBox RequiredFileName(i), , GetFileName(CStr(RequiredFileName(i)))
Next i
For i = 1 To UBound(RequiredFileName)
    Call ProcessOpenFile(RequiredFileName(i), targetWorkbook)
Next i
EndNow: End Sub

Function GetFileName(filespec As String)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
GetFileName = fso.GetFileName(filespec)
End Function

Sub ProcessOpenFile(RequiredFileName, targetWorkbook As Workbook)
Dim RequiredWorkbook As Workbook
'Dim targetWorkbook As Workbook
' get the required workbook
Set RequiredWorkbook = Application.Workbooks.Open(RequiredFileName)

Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets("Summary_NV")
Dim RequiredSheet As Worksheet
Set RequiredSheet = RequiredWorkbook.Sheets(1)        'here assumed that source workbook consists only of one sheet i.e., is the required sheet.
RequiredWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
RequiredWorkbook.Sheets(Sheets.Count).Select
RequiredWorkbook.Sheets(Sheets.Count).Name = "SUMMARY" & Sheets.Count
Call Sort_Before(RequiredWorkbook)        'sorting the required file data according to date.

If RequiredSheet.Name = "EVDO_SC_Summary" Then
    Call ProcessEVDO(RequiredSheet)        'get the summary of report
    Call Sort_After(RequiredWorkbook)        ' sort the summary according to date
    Call DateChange(RequiredWorkbook)        'changing date format
ElseIf RequiredSheet.Name = "CDMAVoice_SC_Summary" Then
    Call ProcessVoice(RequiredSheet)
    Call Sort_After(RequiredWorkbook)
    Call DateChange(RequiredWorkbook)
ElseIf RequiredSheet.Name = "CDMAData_SC_Summary" Then
    Call ProcessData(RequiredSheet)
    Call Sort_After(RequiredWorkbook)
    Call DateChange(RequiredWorkbook)
End If

Dim iRow As Integer
Dim LastRow_Req As Integer
Dim LastRow_Tar As Integer
Dim LastCol_Req As Integer
LastRow_Req = RequiredWorkbook.Sheets(Sheets.Count).Cells(Rows.Count, 1).End(xlUp).Row        'last row summary data
LastCol_Req = RequiredWorkbook.Sheets(Sheets.Count).Cells(1, Columns.Count).End(xlToLeft).Column        'last column of summary data
LastRow_Tar = targetSheet.Cells(Rows.Count, 1).End(xlUp).Row        'last row of target sheet used
RequiredWorkbook.Sheets(Sheets.Count).Range("B1").Resize(LastRow_Req, LastCol_Req - 1).Select        'selecting summary data for copying
Selection.Copy

If targetSheet.Cells(LastRow_Tar, 1).Value < RequiredWorkbook.Sheets(Sheets.Count).Range("A1").Value Then        'if date entered in target sheet last cell is less
    If RequiredWorkbook.Sheets(1).Name = "EVDO_SC_Summary" Then        'then the summary report date
        targetSheet.Activate
        Cells(LastRow_Tar + 1, 16).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                      :=False, Transpose:=False
        Cells(LastRow_Tar + 1, 1).Select
        Call Date_update(RequiredWorkbook, targetWorkbook, LastRow_Tar + 1, 1)
    ElseIf RequiredWorkbook.Sheets(1).Name = "CDMAVoice_SC_Summary" Then
        targetSheet.Activate
        Cells(LastRow_Tar + 1, 2).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                      :=False, Transpose:=False
        Cells(LastRow_Tar + 1, 1).Select
        Call Date_update(RequiredWorkbook, targetWorkbook, LastRow_Tar + 1, 1)
    ElseIf RequiredWorkbook.Sheets(1).Name = "CDMAData_SC_Summary" Then
        targetSheet.Activate
        Cells(LastRow_Tar + 1, 9).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                      :=False, Transpose:=False
        Cells(LastRow_Tar + 1, 1).Select
        Call Date_update(RequiredWorkbook, targetWorkbook, LastRow_Tar + 1, 1)
    End If
End If

For iRow = targetSheet.Range("A12").Row To LastRow_Tar
    RequiredWorkbook.Activate
    If targetSheet.Cells(iRow, 1).Value < RequiredWorkbook.Sheets(Sheets.Count).Range("A1").Value Then
        GoTo A
    ElseIf targetSheet.Cells(iRow, 1).Value = RequiredWorkbook.Sheets(Sheets.Count).Range("A1").Value Then
        If RequiredWorkbook.Sheets(1).Name = "EVDO_SC_Summary" Then
            targetSheet.Activate
            Cells(iRow, 16).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                          :=False, Transpose:=False
            Cells(iRow, 1).Select
            Call Date_update(RequiredWorkbook, targetWorkbook, iRow, 1)
            Exit For
        ElseIf RequiredWorkbook.Sheets(1).Name = "CDMAVoice_SC_Summary" Then
            targetSheet.Activate
            Cells(iRow, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                          :=False, Transpose:=False
            Cells(iRow, 1).Select
            Call Date_update(RequiredWorkbook, targetWorkbook, iRow, 1)
            Exit For
        ElseIf RequiredWorkbook.Sheets(1).Name = "CDMAData_SC_Summary" Then
            targetSheet.Activate
            Cells(iRow, 9).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                          :=False, Transpose:=False
            Cells(iRow, 1).Select
            Call Date_update(RequiredWorkbook, targetWorkbook, iRow, 1)
            Exit For
        End If
    ElseIf targetSheet.Cells(iRow, 1).Value > RequiredWorkbook.Sheets(Sheets.Count).Range("A1").Value Then
        If RequiredWorkbook.Sheets(1).Name = "EVDO_SC_Summary" Then
            targetSheet.Activate
            Cells(iRow, 16).Select
            Selection.Insert Shift:=xlDown
            Exit For
            Cells(iRow, 1).Select
            Call Date_update(RequiredWorkbook, targetWorkbook, iRow, 1)
        ElseIf RequiredWorkbook.Sheets(1).Name = "CDMAVoice_SC_Summary" Then
            targetSheet.Activate
            Cells(iRow, 2).Select
            Selection.Insert Shift:=xlDown
            Cells(iRow, 1).Select
            Call Date_update(RequiredWorkbook, targetWorkbook, iRow, 1)
            Exit For
        ElseIf RequiredWorkbook.Sheets(1).Name = "CDMAData_SC_Summary" Then
            targetSheet.Activate
            Cells(iRow, 9).Select
            Selection.Insert Shift:=xlDown
            Cells(iRow, 1).Select
            Call Date_update(RequiredWorkbook, targetWorkbook, iRow, 1)
            Exit For
        End If
    End If
A:     Next
RequiredWorkbook.Close savechanges:=False
End Sub
选项显式
子文件_select()
Dim RequiredFileName作为变量,i作为整数
将targetWorkbook设置为工作簿
'对活动工作簿是目标的假设较弱
设置targetWorkbook=Application.ActiveWorkbook
'RequiredFileName=“c:\myfiles\test.xls”
关于错误转到EndNow
RequiredFileName=Application.GetOpenFilename(文件过滤器:=“所有文件(*.*),***”,标题:=“获取文件”,多选:=True)
对于i=1到UBound(RequiredFileName)
MsgBox RequiredFileName(i)、GetFileName(CStr(RequiredFileName(i)))
接下来我
对于i=1到UBound(RequiredFileName)
调用ProcessOpenFile(RequiredFileName(i),targetWorkbook)
接下来我
EndNow:结束Sub
函数GetFileName(文件规格为字符串)
作为对象的Dim fso
设置fso=CreateObject(“Scripting.FileSystemObject”)
GetFileName=fso.GetFileName(filespec)
端函数
子进程OpenFile(必需文件名,目标工作簿为工作簿)
将所需工作簿设置为工作簿
'将targetWorkbook设置为工作簿
'获取所需的工作簿
设置RequiredWorkbook=Application.Workbooks.Open(RequiredFileName)
将目标工作表变暗为工作表
设置targetSheet=targetWorkbook.Worksheets(“摘要”)
将所需图纸作为工作表进行标注
设置RequiredSheet=RequiredWorkbook.Sheets(1)”此处假设源工作簿仅包含一张工作表,即为所需工作表。
RequiredWorkbook.Sheets.Add After:=工作表(Sheets.Count)
所需工作簿。工作表(工作表。计数)。选择
所需工作簿.Sheets(Sheets.Count).Name=“SUMMARY”和Sheets.Count
在(RequiredWorkbook)根据日期对所需文件数据进行排序之前调用Sort_。
如果需要Sheet.Name=“EVDO\U SC\U Summary”,则
调用ProcessEVDO(RequiredSheet)'获取报告摘要
在(RequiredWorkbook)“根据日期对摘要排序”之后调用Sort_
调用DateChange(RequiredWorkbook)更改日期格式
ElseIf RequiredSheet.Name=“CDMAVoice\u SC\u Summary”然后
呼叫处理语音(必填页)
在(必需工作簿)之后调用Sort\u
调用日期更改(必填工作簿)
ElseIf RequiredSheet.Name=“CDMAData\u SC\u Summary”然后
调用ProcessData(RequiredSheet)
在(必需工作簿)之后调用Sort\u
调用日期更改(必填工作簿)
如果结束
Dim iRow作为整数
Dim LastRow_Req为整数
Dim LastRow_Tar作为整数
Dim LastCol_Req为整数
LastRow_Req=RequiredWorkbook.Sheets(Sheets.Count).单元格(Rows.Count,1).结束(xlUp).行的最后一行摘要数据
LastCol_Req=RequiredWorkbook.Sheets(Sheets.Count).单元格(1,Columns.Count).结束(xlToLeft).列'汇总数据的最后一列
LastRow_Tar=targetSheet.Cells(Rows.Count,1).End(xlUp).Row'使用的目标工作表的最后一行
所需工作簿。工作表(Sheets.Count)。范围(“B1”)。调整大小(LastRow\u Req,LastCol\u Req-1)。选择“选择要复制的摘要数据”
选择,复制
如果targetSheet.Cells(LastRow_Tar,1).Value