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