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