2017-01-09 5 views
0

Я хочу импортировать некоторую ячейку данных из книги A в WorkBook B., что я делаю, я использовал application.inputbbox для установки значения. проблема заключается в том, когда я нажимаю «Отмена» на поле ввода.Игнорировать ошибку во время выполнения 1004

Ошибка выполнения 1004 на этой линии. Set xRng1 = .Range(.Cells(addStartRow, 2), .Cells(addEndRow, 12))

Мой вопрос в том, как я могу отменить входной блок без всплывающего окна ошибки. что я знаю, это можно сделать с помощью предложения on error. Я не знаю, где поставить заявление

Вот мой код.

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 
+0

Просто выйдите, если оба значения строки не числовой –

+0

ОК, затем числовое (целое число!) И отличное от нуля? –

ответ

3

Как заявил Уильямс в @ Тим комментариях, все, что вам нужно сделать, это обрабатывать то, что происходит с переменными при нажатии кнопки отмены на Input Box

Добавьте это в ваш код,

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 
Смежные вопросы