失败@通过正常模式运行代码

问题描述 投票:-1回答:1

当我在休息模式下运行时,我的代码正常工作,但是当我正常运行时它不起作用!

为什么?!

这里是:

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电子表格报告中生成的数据。

代码将报表单中的一些值复制到他自己的底孔装配表中!

excel-vba
1个回答
0
投票

下面是一个示例,说明如何开始修改代码以正确引用Workbooks和Worksheet对象。

wb =工作簿上的工作表,您将从中运行宏 ib =导入书中的表格,您将从中导入值


wb设置为值所在的工作表时,您需要更新工作表名称。现在,它设置在Destination Sheet

一旦执行此操作,您只需要为其余代码引用wbib。因此,当提到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
© www.soinside.com 2019 - 2024. All rights reserved.