当我在休息模式下运行时,我的代码正常工作,但是当我正常运行时它不起作用!
为什么?!
这里是:
Sub ImportBHA()
'Variables
Dim Fullpath As String
Dim oBHA As String 'Opened BHA
Dim nRange As Integer 'Name Range
Dim nRows As Integer 'Name Rows
Dim SheetName As String 'Bitsheet Name
Dim BookName As String 'Workbook Name
'Initialization
BookName = ActiveWorkbook.Name
SheetName = ActiveSheet.Name
'Application.ScreenUpdating = False
'Dialog
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Select the BHA Report"
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx", 1
.Show
Fullpath = .SelectedItems.Item(1)
End With
If InStr(Fullpath, ".xls") = 0 Then
Exit Sub
End If
'Open, Tab & Copy
Workbooks.Open Fullpath
oBHA = ActiveWorkbook.Name
nRange = Workbooks(oBHA).Sheets("BHAReport").Range("C900").End(xlUp).Row
'Create Temporary Worksheet
'Workbooks(BookName).Sheets.Add(After:=Workbooks(BookName).Sheets(Workbooks(BookName).Sheets.Count)).Name = "Temp"
'BHA Name
Workbooks(oBHA).Sheets("BHAReport").Range("I4").Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ60").PasteSpecial xlPasteValues
'Tools Names
Workbooks(oBHA).Sheets("BHAReport").Range("D9:D" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
'nRows = Workbooks(BookName).Worksheets(SheetName).Range("AZ65:AZ138").Cells.SpecialCells(xlCellTypeConstants).Count
For I = 65 To (65 + nRange) Step 2
ActiveSheet.Range("C" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Serials
Workbooks(oBHA).Sheets("BHAReport").Range("F9:F" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange) Step 2
ActiveSheet.Range("J" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Max OD
Workbooks(oBHA).Sheets("BHAReport").Range("H9:H" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange) Step 2
ActiveSheet.Range("N" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools OD/ID
Workbooks(oBHA).Sheets("BHAReport").Range("G9:G" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange)
ActiveSheet.Range("Q" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Gender
Workbooks(oBHA).Sheets("BHAReport").Range("K9:K" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange)
ActiveSheet.Range("S" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Connection Size
Workbooks(oBHA).Sheets("BHAReport").Range("I9:I" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange)
ActiveSheet.Range("T" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Connection Type
Workbooks(oBHA).Sheets("BHAReport").Range("J9:J" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange)
ActiveSheet.Range("W" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Cum. Lengths
Workbooks(oBHA).Sheets("BHAReport").Range("N9:N" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange)
ActiveSheet.Range("Z" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Tools Weights to Temp
Workbooks(oBHA).Sheets("BHAReport").Range("O9:O" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
For I = 65 To (65 + nRange)
ActiveSheet.Range("AC" & I) = ActiveSheet.Range("AZ" & I)
Next I
'Close BHA Sheet
Workbooks(oBHA).Close savechanges:=False
'Application.ScreenUpdating = True
End Sub
它有点长,但它是由Schlumberger专有软件“导入”excel电子表格报告中生成的数据。
代码将报表单中的一些值复制到他自己的底孔装配表中!
下面是一个示例,说明如何开始修改代码以正确引用Workbooks和Worksheet对象。
wb
=工作簿上的工作表,您将从中运行宏
ib
=导入书中的表格,您将从中导入值
将wb
设置为值所在的工作表时,您需要更新工作表名称。现在,它设置在Destination Sheet
。
一旦执行此操作,您只需要为其余代码引用wb
和ib
。因此,当提到ib
BHARReport
表上的范围时,只需使用ib.Range("....")
,类似地为您的主要书籍,wb.Range("....")
对于特定示例,您可以减少以下内容:
Workbooks(oBHA).Sheets("BHAReport").Range("D9:D" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
至:
ib.Range("D9:D" & LRow).Copy
wb.Range("AZ65").PasteSpecial xlPasteValues
从而显着更容易遵循代码。这使得解码代码变得更加容易,因为您可以实际关注正在发生的事情。
Option Explicit
Sub ImportBHA()
Dim wb As Worksheet, ib As Worksheet
Dim LRow As Long, Fullpath as String
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Select the BHA Report"
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx", 1
.Show
Fullpath = .SelectedItems.Item(1)
If .SelectedItems.Count < 1 Then Exit Sub
End With
'Make sure the sheet names are correct here
Set wb = ThisWorkbook.Sheets("Destination Sheet")
Set ib = Workbooks.Open(Fullpath).Sheets("BHARReport")
LRow = ib.Range("C" & ib.Rows.Count).End(xlUp).Offset(1).Row
wb.Range("Az60").Value = ib.Range("I4").Value
ib.Range("D9:D" & LRow).Copy
wb.Range("AZ65").PasteSpecial xlPasteValues