Vba 关闭并重新打开工作簿,然后是SaveAs.prn

Vba 关闭并重新打开工作簿,然后是SaveAs.prn,vba,excel,Vba,Excel,我一直在忙着为新工作簿中的数据库创建排序代码。 此工作簿的Sheet2需要以“Sheet2.prn”的形式保存在工作簿旁边。我成功地做到了这一点,但今天我需要在Sheet2中添加两列,现在由于某种原因,将文件重新保存为.prn的最后一步不再起作用。我真的不知道我做错了什么,因为我很确定我没有对代码的最后部分做任何更改 这是我的代码: Option Explicit Sub RowCount()

我一直在忙着为新工作簿中的数据库创建排序代码。 此工作簿的Sheet2需要以“Sheet2.prn”的形式保存在工作簿旁边。我成功地做到了这一点,但今天我需要在Sheet2中添加两列,现在由于某种原因,将文件重新保存为.prn的最后一步不再起作用。我真的不知道我做错了什么,因为我很确定我没有对代码的最后部分做任何更改

这是我的代码:

Option Explicit
Sub RowCount()                                                                                                                   
Dim Oldstatusbar As Boolean                                                                                                  
Dim DOF As Integer, Counter As Integer                                                                                       
Dim CurrentMin As Long, StartRow As Long, StartColumn As Long                                                                
Dim OutputColumn As Long, OutputRow As Long, InputValue As Long
Dim Borehole As String, Start_Row As String, End_Row As String, Output As String, FolderPath As String                       
Dim CurrentName As String
Dim rng As RANGE, Cell As RANGE, brh As RANGE, Undef1 As RANGE, Undef2 As RANGE                                              
Dim r1 As RANGE, r2 As RANGE, r3 As RANGE, r4 As RANGE, r5 As RANGE, r6 As RANGE, r7 As RANGE, r8 As RANGE, r9 As RANGE
Dim r10 As RANGE, r11 As RANGE, r12 As RANGE, r13 As RANGE
Dim wbMain As Workbook, wbWellsRowCount As Workbook                                                                          
Dim wsLog As Worksheet, wsSheet1 As Worksheet, wsSheet2 As Worksheet                                                         
Dim HCdatabase2 As Variant                                                                                                   

Oldstatusbar = Application.DisplayStatusBar                                                                                  



Set wbMain = Workbooks("HCdatabase2.xlsm")                                                                                   
Set wsLog = wbMain.Sheets("Log")                                                                                             
FolderPath = ThisWorkbook.Path                                                                                               

DOF = 1                                                                                                                      
Counter = 1                                                                                                                  

wsLog.Select                                                                                                                 
StartColumn = 1                                                                                                              
StartRow = 1                                                                                                                 
wsLog.Cells(StartRow + DOF, StartColumn).End(xlDown).Select                                                                  

Set rng = wsLog.RANGE(wsLog.Cells(StartRow + DOF, StartColumn), wsLog.Cells(StartRow + DOF, StartColumn).End(xlDown))        
CurrentName = wsLog.Cells(StartRow + DOF, StartColumn).Value                                                                 
CurrentMin = Cells(StartRow + DOF, StartColumn).Row                                                                          


Set wbWellsRowCount = Workbooks.Add                                                                                          
wbWellsRowCount.SaveAs FolderPath & "\wbWellsRowCount.xls"                                                                   


Set wsSheet1 = wbWellsRowCount.Sheets("Sheet1")                                                                              
wsSheet1.Select                                                                                                              
OutputColumn = 1                                                                                                             
OutputRow = DOF + 1                                                                                                          
wsSheet1.Cells(OutputRow, OutputColumn).Value = CurrentName                                                                  
wsSheet1.Cells(OutputRow, OutputColumn + 1).Value = CurrentMin                                                               

wsSheet1.Cells(1, 1).Name = "Borehole"                                                                                       
wsSheet1.Cells(1, 2).Name = "Start_Row"                                                                                      
wsSheet1.Cells(1, 3).Name = "End_Row"                                                                                        
wsSheet1.Cells(1, 4).Name = "Output"                                                                                         

ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)                                                                
Set wsSheet2 = wbWellsRowCount.Sheets("Sheet2")                                                                              



  Set r1 = Workbooks("HCdatabase2.xlsm").Worksheets("Log").RANGE("A:A")                                                            
  Set r2 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("A:A")                                                      
  Set r3 = Workbooks("HCdatabase2.xlsm").Worksheets("Log").RANGE("J:J")                                                            
  Set r4 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("B:B")                                                      
  Set r5 = Workbooks("HCdatabase2.xlsm").Worksheets("Log").RANGE("M:M")                                                            
  Set r6 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("C:C")                                                      
  Set r7 = Workbooks("HCdatabase2.xlsm").Worksheets("Log").RANGE("AC:AC")                                                          
  Set r8 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("D:D")                                                      
  Set r9 = Workbooks("HCdatabase2.xlsm").Worksheets("Log").RANGE("AF:AF")                                                          
  Set r10 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("E:E")                                                     
  Set r11 = Workbooks("HCdatabase2.xlsm").Worksheets("Log").RANGE("D:D")                                                           
  Set r12 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("F:F")                                                     
  Set r13 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").RANGE("G:G")                                                     

  r1.Copy    r2                                                                                                                       
  r3.Copy r4                                                                                                                       
  r5.Copy                                                                                                                          
  r6.PasteSpecial Paste:=xlPasteValues                                                                                             
  r7.Copy r8                                                                                                                       
  r9.Copy                                                                                                                          
 r10.PasteSpecial Paste:=xlPasteValues                                                                                            
 r11.Copy r12
 r11.Copy r13
 Application.CutCopyMode =   False                                                                                                  



 With wbWellsRowCount.Sheets("Sheet2")                                                                                            
    With .RANGE("A2", .Cells(.Rows.Count, 1).End(xlUp))                                                                      
        .Offset(.Rows.Count).Value = .Value                                                                                  
        .Offset(.Rows.Count, 1).Value = .Offset(, 3).Value                                                                   
        .Offset(.Rows.Count, 4).Value = .Offset(, 4).Value                                                                   
        .Offset(.Rows.Count, 5).Value = .Offset(, 5).Value                                                                   
        .Offset(.Rows.Count, 6).Value = .Offset(, 6).Value                                                                   

        .Offset(, 4).ClearContents                                                                                           
        .Offset(, 3).EntireColumn.Delete                                                                                     

        With .Offset(, 1).Resize(2 * .Rows.Count)                                                                            
            If WorksheetFunction.CountBlank(.Cells) > 0 Then .SpecialCells(XlCellType.xlCellTypeBlanks).EntireRow.Delete     
        End With
    End With

    With .RANGE("A2", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 7)                                                         
        .Sort key1:=.Cells(1, 1), order1:=xlAscending, key2:=.Cells(1, 2), order2:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal 
    End With
End With



 Set Undef1 = Workbooks("wbWellsRowCount.xls").Worksheets("Sheet2").UsedRange                                                     

 On Error Resume   Next                                                                                                             

 InputValue = -999                                                                                                                
 For Each Cell In Undef1                                                                                                          
If IsEmpty(Cell) Then                                                                                                            
 Cell.Value = InputValue                                                                                                          
 End If                                                                                                                           
 Next                                                                                                                             



 On Error Resume     Next                                                                                                              

For Each Cell In r12                                                                                                             
If (Cell) Then                                                                                                                   
Cell.Value = Left(Cell.Value, 2)                                                                                                 
End If                                                                                                                           
Next                                                                                                                             

Columns("A:F").HorizontalAlignment = xlRight                                                                                     
Columns("A:F").AutoFit                                                                                                           
 Columns("E").ColumnWidth = 9                                                                                                     



 For Each Cell In rng                                                                                                             

If Cell.Value <> CurrentName Then                                                                                             

    wsSheet1.Cells(OutputRow, OutputColumn + 2).Value = Cell.Row - 1                                                         
    CurrentName = Cell.Value                                                                                                 
    CurrentMin = Cell.Row                                                                                                    
    OutputRow = OutputRow + 1                                                                                                
    wsSheet1.Cells(OutputRow, OutputColumn).Value = CurrentName                                                              
    wsSheet1.Cells(OutputRow, OutputColumn + 1).Value = CurrentMin                                                           

    wsSheet1.Cells(Counter + DOF, "D").Value = Counter                                                                       
    Counter = Counter + 1                                                                                                    
End If                                                                                                                       

 Next Cell                                                                                                                   
 Set Cell = rng.End(xlDown)                                                                                                  
 wsSheet1.Cells(OutputRow, OutputColumn + 2).Value = Cell.Row                                                                
 wsSheet1.Cells(Counter + DOF, "D").Value = Counter                                                                          


wbWellsRowCount.Close True                                                                                                   
wbWellsRowCount.Open
'wbWellsRowCount.Open FolderPath & "\wbWellsRowCount.xls"                                                                    
wbWellsRowCount.Worksheets("Sheet2").SaveAs Filename:="HCShowDatabase.prn", FileFormat:=xlTextPrinter                        
Workbooks("HCShowDatabase.prn").Close True                                                                                   
wbMain.Activate                                                                                                              
RANGE("A1").Select                                                                                                           
ActiveWindow.ScrollRow = RANGE("A1").Row                                                                                     

Application.ScreenUpdating = True                                                                                            
Application.DisplayStatusBar = Oldstatusbar                                                                                  
End Sub                                                                                                                          
选项显式
子行计数()
将Oldstatusbar设置为布尔值
Dim DOF为整数,计数器为整数
Dim Current Min尽可能长,StartRow尽可能长,StartColumn尽可能长
Dim OutputColumn为Long,OutputRow为Long,INPUTPUTVALUE为Long
将钻孔尺寸标注为字符串,起始行为字符串,结束行为字符串,输出为字符串,文件夹路径为字符串
将CurrentName设置为字符串
Dim rng As RANGE、Cell As RANGE、brh As RANGE、Undef1 As RANGE、Undef2 As RANGE
调光r1为量程,r2为量程,r3为量程,r4为量程,r5为量程,r6为量程,r7为量程,r8为量程,r9为量程
将r10作为量程,r11作为量程,r12作为量程,r13作为量程
将wbMain设置为工作簿,wbWellsRowCount设置为工作簿
将wsLog设置为工作表、wsSheet1设置为工作表、wsSheet2设置为工作表
Dim HCdatabase2作为变体
Oldstatusbar=Application.DisplayStatusBar
设置wbMain=工作簿(“HCdatabase2.xlsm”)
设置wsLog=wbMain.Sheets(“日志”)
FolderPath=ThisWorkbook.Path
自由度=1
计数器=1
wsLog.Select
StartColumn=1
StartRow=1
单元格(StartRow+DOF,StartColumn)。结束(xlDown)。选择
设置rng=wsLog.RANGE(wsLog.Cells(StartRow+DOF,StartColumn),wsLog.Cells(StartRow+DOF,StartColumn).End(xlDown))
CurrentName=wsLog.Cells(StartRow+DOF,StartColumn).Value
CurrentMin=单元格(StartRow+DOF,StartColumn)。行
设置wbWellsRowCount=工作簿。添加
wbWellsRowCount.SaveAs FolderPath&“\wbWellsRowCount.xls”
设置wsSheet1=wbWellsRowCount.Sheets(“Sheet1”)
wsSheet1.选择
OutputColumn=1
OutputRow=自由度+1
wsSheet1.Cells(OutputRow,OutputColumn).Value=CurrentName
wsSheet1.单元格(OutputRow,OutputColumn+1)。值=CurrentMin
wsSheet1.Cells(1,1).Name=“钻孔”
wsSheet1.Cells(1,2).Name=“开始行”
wsSheet1.Cells(1,3).Name=“结束行”
wsSheet1.Cells(1,4).Name=“输出”
ActiveWorkbook.Sheets.Add After:=工作表(Worksheets.Count)
设置wsSheet2=wbWellsRowCount.Sheets(“Sheet2”)
设置r1=工作簿(“HCdatabase2.xlsm”)。工作表(“日志”)。范围(“A:A”)
设置r2=工作簿(“wbWellsRowCount.xls”)。工作表(“Sheet2”)。范围(“A:A”)
设置r3=工作簿(“HCdatabase2.xlsm”)。工作表(“日志”)。范围(“J:J”)
设置r4=工作簿(“wbWellsRowCount.xls”)。工作表(“Sheet2”)。范围(“B:B”)
Set r5=工作簿(“HCdatabase2.xlsm”)。工作表(“Log”)。范围(“M:M”)
wbWellsRowCount.Close True   '### DELETE THIS LINE                                                                                        
wbWellsRowCount.Open         '### DELETE THIS LINE
wbWellsRowCount.Worksheets("Sheet2").SaveAs Filename:="HCShowDatabase.prn", FileFormat:=xlTextPrinter                        
Workbooks("HCShowDatabase.prn").Close True