Vba 忽略运行时错误1004

Vba 忽略运行时错误1004,vba,excel,Vba,Excel,我想将一些数据单元格从工作簿A导入工作簿B。我要做的是使用application.inputbbox来输入值。问题是当我在输入框上单击“取消”时 此行出现运行时错误1004。Set xRng1= .Range(.Cells(addStartRow,2),.Cells(addandrow,12)) 我的问题是如何单击取消输入框而不出现错误弹出窗口。我所知道的是,它可以通过将放在错误语句上来完成。我不知道该把声明放在哪里 这是我的密码 Private Sub importbr_Click() D

我想将一些数据单元格从工作簿A导入工作簿B。我要做的是使用application.inputbbox来输入值。问题是当我在输入框上单击“取消”时

此行出现运行时错误1004。
Set xRng1=
.Range(.Cells(addStartRow,2),.Cells(addandrow,12))

我的问题是如何单击取消输入框而不出现错误弹出窗口。我所知道的是,它可以通过将
放在错误
语句上来完成。我不知道该把声明放在哪里

这是我的密码

Private Sub importbr_Click()


Dim xWb As Workbook
Dim xAddWb As Workbook
Dim xRng1 As Range
Dim xRng2 As Range
Set xWb = Application.ActiveWorkbook

Dim xTitleId As String
    Dim addStartRow As Integer
    Dim addEndRow As Integer
    Dim pastevalue As Integer


xTitleId = "Select BR file"
With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "C:\New"
    .Filters.Clear
    .Filters.Add "Excel 2007-13", "*.xlsx; *.xlsm; *.xlsa"
    .AllowMultiSelect = False
    .Show

    If .SelectedItems.Count > 0 Then
        Application.Workbooks.Open .SelectedItems(1)

        Set xAddWb = Application.ActiveWorkbook

        addStartRow = Application.InputBox(prompt:="Type Start row", Title:=xTitleId, Default:="200", Type:=1)
            addEndRow = Application.InputBox(prompt:="Type End row", Title:=xTitleId, Default:="500", Type:=1)
            With xAddWb.Sheets(1) 'change the index as needed
                Set xRng1 = .Range(.Cells(addStartRow, 2), .Cells(addEndRow, 12))


            End With

        xWb.Activate
        Set xRng2 = Cells(5, 1)



        xRng1.Copy xRng2


        xAddWb.Close False
    End If
End With

End Sub

正如@Tim Williams在评论中所述,当您在
输入框中单击“取消”时,您所需要做的就是处理变量发生的情况

将此添加到您的代码中

If addStartRow > 0 And addEndRow > 0 Then
        Set xRng1 = .Range(.Cells(addStartRow, 2), .Cells(addEndRow, 12))
Else
        GoTo eExit
End If
完整的代码

Dim xWb As Workbook
Dim xAddWb As Workbook
Dim xRng1 As Range
Dim xRng2 As Range
Set xWb = Application.ActiveWorkbook

Dim xTitleId As String
    Dim addStartRow As Integer
    Dim addEndRow As Integer
    Dim pastevalue As Integer


xTitleId = "Select BR file"
With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "C:\New"
    .Filters.Clear
    .Filters.Add "Excel 2007-13", "*.xlsx; *.xlsm; *.xlsa"
    .AllowMultiSelect = False
    .Show

    If .SelectedItems.Count > 0 Then
    Application.Workbooks.Open .SelectedItems(1)

    Set xAddWb = Application.ActiveWorkbook

    addStartRow = Application.InputBox(Prompt:="Type Start row", Title:=xTitleId, Default:="200", Type:=1)
        addEndRow = Application.InputBox(Prompt:="Type End row", Title:=xTitleId, Default:="500", Type:=1)
        If addStartRow > 0 And addEndRow > 0 Then
            With xAddWb.Sheets(1) 'change the index as needed
               Set xRng1 = .Range(.Cells(addStartRow, 2), .Cells(addEndRow, 12))
            End With
            xWb.Activate
            Set xRng2 = Cells(5, 1)

            xRng1.Copy xRng2
        End If
    xAddWb.Close False
End If

End With

正如@Tim Williams在评论中所述,当您在
输入框中单击“取消”时,您所需要做的就是处理变量发生的情况

将此添加到您的代码中

If addStartRow > 0 And addEndRow > 0 Then
        Set xRng1 = .Range(.Cells(addStartRow, 2), .Cells(addEndRow, 12))
Else
        GoTo eExit
End If
完整的代码

Dim xWb As Workbook
Dim xAddWb As Workbook
Dim xRng1 As Range
Dim xRng2 As Range
Set xWb = Application.ActiveWorkbook

Dim xTitleId As String
    Dim addStartRow As Integer
    Dim addEndRow As Integer
    Dim pastevalue As Integer


xTitleId = "Select BR file"
With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "C:\New"
    .Filters.Clear
    .Filters.Add "Excel 2007-13", "*.xlsx; *.xlsm; *.xlsa"
    .AllowMultiSelect = False
    .Show

    If .SelectedItems.Count > 0 Then
    Application.Workbooks.Open .SelectedItems(1)

    Set xAddWb = Application.ActiveWorkbook

    addStartRow = Application.InputBox(Prompt:="Type Start row", Title:=xTitleId, Default:="200", Type:=1)
        addEndRow = Application.InputBox(Prompt:="Type End row", Title:=xTitleId, Default:="500", Type:=1)
        If addStartRow > 0 And addEndRow > 0 Then
            With xAddWb.Sheets(1) 'change the index as needed
               Set xRng1 = .Range(.Cells(addStartRow, 2), .Cells(addEndRow, 12))
            End With
            xWb.Activate
            Set xRng2 = Cells(5, 1)

            xRng1.Copy xRng2
        End If
    xAddWb.Close False
End If

End With

如果两行值都不是numericOK,则退出数值(整数!)和非零?如果两行值都不是numericOK,则退出数值(整数!)和非零?