2016-06-27 3 views
1

내가 VBA에서 일하고 있어요 - Excel을 2016 내가 다른 시트 및 삽입에 다음 빈 행을 한 장에서 호출 정의 폼에서 입력을 찾기 위해 노력하고'객체의 범위는'실패 - 사용자 정의 폼

가치. 그러나 런타임 오류 - 'Range of Object'_Worksheet Failed가 계속 발생합니다. 양식은 다른 양식에서 호출됩니다.

다양한 솔루션을 시도했지만 아무 것도 작동하지 않는 것 같습니다.

나는 다른 곳에서 거의 동일한 코드를 사용하고 있는데, 폼이 호출되고 값이 같은 시트에 삽입 될 때 작동하기 때문에 다른 시트에 액세스해야한다는 결론을 내렸다.

그것은이 라인에 실패

ActiveWorkbook.Worksheets("Suppliers").Range("A" & NextRow) = SupplierName 

내가 사용하고 코드는 다음과 같습니다.

Private Sub addSupplierConfirm_Click() 

'Initialise variables 
Dim SupplierName As String 

'Assign variables 
SupplierName = addSupplierName.Value 

If (SupplierName = "") Then 
    MsgBox ("Please enter a supplier name") 
    Exit Sub 
End If 

'Find next row on supplier sheet add supplier name 

NextRow = ActiveWorkbook.Worksheets("Suppliers").Range("A" & Rows.Count).End(xlUp).Row + 1 
ActiveWorkbook.Worksheets("Suppliers").Range("A" & NextRow) = SupplierName 

Application.ScreenUpdating = False 

'Sort Suppliers 
ActiveWorkbook.Worksheets("Suppliers").ListObjects("tbl_suppliers").Sort.SortFields. _ 
    Clear 
ActiveWorkbook.Worksheets("Suppliers").ListObjects("tbl_suppliers").Sort.SortFields. _ 
    Add Key:=Range("tbl_suppliers[[#All],[Suppliers]]"), SortOn:=xlSortOnValues, _ 
    Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("Suppliers").ListObjects("tbl_suppliers").Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

'Activate home page 
Sheets("Expenses").Activate 
Range("A1").Select 

Application.ScreenUpdating = True 

'Unload form 
addSupplierName.Value = "" 
UfAddSupplier.Hide 

End Sub 

미리 감사드립니다.

+0

안녕하세요, 감사합니다. 'NextRow'가 양수이고'Suppliers'가 선행/후행 공백과 함께 존재하는지 확인했습니다. 이제이 런타임 오류가 발생했습니다. "Object 'Range'의 'Value2'메서드가 실패했습니다." 값이 테이블의 맨 아래에 추가되고 있지만 런타임 오류로 인해 나머지 코드가 실행되지 않는 것으로 추측됩니다. –

+0

'ThisWorkbook.Worksheets ("Suppliers"). Range ("A"& NextRow) .Value2 = SupplierName'을 사용하여 제안한 의견에서 이전에 'Value2'를 추가했습니다. 해당 코드에서 코드가 실패합니다. –

+0

'addSupplierName.Value'는 입력 값과 동일한 값을 반환합니다. 어쨌든 도움을 주셔서 감사합니다. 다른 해결책을 찾아야 할 것 같습니다. –

답변

0

양식이 아직 표시되어있는 동안에는 시트에 액세스 할 수 없습니다. 단지 시트에 액세스하기 전에 당신의 sub에서 조금 더 UfAddSupplier.Hide를 이동하고 의도 한대로 모든 것이 작동합니다 : 답장을

Private Sub addSupplierConfirm_Click() 

'Initialise variables 
Dim SupplierName As String 

'Assign variables 
SupplierName = addSupplierName.Value 

If (SupplierName = "") Then 
    MsgBox ("Please enter a supplier name") 
    Exit Sub 
End If 

UfAddSupplier.Hide 

'Find next row on supplier sheet add supplier name 

NextRow = ActiveWorkbook.Worksheets("Suppliers").Range("A" & Rows.Count).End(xlUp).Row + 1 
ActiveWorkbook.Worksheets("Suppliers").Range("A" & NextRow) = SupplierName 
... 
... 
... 
+0

여전히 같은 오류가 발생합니다. 자체 폼 (초기 사용자 폼에서 호출하지 않음)에서 userform을 실행하면 시트에 액세스하기 전에 폼을 숨길 필요없이 잘 작동합니다. 초기 userform이 활성화 된 상태로 문제가 될 수 있습니까? –

+0

물론. ** No **'UserForm' (양식이 모덜리스로 표시되지 않은 경우)은 시트에 액세스하는 동안 표시 될 수 있습니다. – Ralph

+0

마지막으로 작동하도록했습니다! 당신의 솔루션은 정확했다. 원래의 userform을 먼저 숨기고 새로운 것을로드하기보다 먼저로드해야했다. 도와 주셔서 감사합니다! –