2014-07-11 6 views
0

나는 여기에 몇 가지 코드를 가지고있다, 그러나 나는 다음과 같은 오류 얻을 : 코딩 오류 - 엑셀 VBA

Run-time error 1004

Application-defined or object-defined error

그래서 희망 누군가가 나를 내가 뭘 잘못 알아내는 데 도움이 할 수 있습니다. ...이 모든 여전히 아주 새로운 내 사용자 정의 폼 나는 두 페이지 사용자 정의 폼을

수행 할 작업을

, 그것은 다중를 사용합니다.

모든 사용자가 '메인'이라는 첫 번째 페이지의 세부 정보를 입력하길 원합니다. 이 양식에는 옵션 단추 질문이 있습니다 : "고객이 오늘 제품에 대해 질문 했습니까?"

이 질문에 대한 대답이 '아니오'이면 양식을 명령 단추를 클릭 한 후에 워크 시트에 관련 정보를 보내야합니다.

이 질문에 대한 대답이 '예'인 경우 양식은 자동으로 사용자를 '추가'페이지로 보내야합니다. 사용자가이 페이지를 완료하고이 두 번째 페이지에서 명령 단추를 누르면 폼은 두 페이지의 정보를 워크 시트의 같은 행으로 보냅니다.

'엑스트라'페이지

의 명령 버튼의 '메인'페이지

Private Sub CommandButton1_Click() 

Dim emptyRow As Long 

Dim closeForm As Boolean 

'The form should close, unless ProductEnquiryYes is true 
closeForm = True 

'Determine emptyRow 
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 


'Did customer ask about product? 
If ProductEnquiryYes.Value = True Then 
Me.MultiPage1.Value = 1 
closeForm = False 
Cells(emptyRow, 20).Value = 1 
End If 

If ProductEnquiryNo.Value = True Then 
    Cells(emptyRow, 21).Value = 1 
End If 

'Balance Enquiry 
If BalanceEnquiry.Value = True Then 
    Cells(emptyRow, 23).Value = 1 
End If 

'Close Userform 
If closeForm Then Unload Me 

End Sub 

에 명령 단추에 대한 나의 코드

Private Sub CommandButton2_Click() 'If this checkbox is True, send value of 1 to the worksheet If CAOpen.Value = True Then Cells(emptyRow, 63).Value = 1 End If Unload Me End Sub 

명령 단추는 첫 번째 페이지에서 작동하며 값을 올바르게 워크 시트에 반환합니다. 그러나 두 번째 페이지의 명령 단추가 올바르지 않아 그 이유를 알 수 없습니다. 아마 명백한 것이므로 용서해주십시오. 내가 디버그에 충돌 할 때

, 그것은 특별히 노란색으로 강조되는이 라인 : 도움을

Cells(emptyRow, 63).Value = 1 

감사합니다!

답변

2

사실 나는 오류가 당신이

Private Sub CommandButton2_Click() 

'If this checkbox is True, send value of 1 to the worksheet 
If CAOpen.Value = True Then 
    Cells(emptyRow, 63).Value = 1 
End If 

Unload Me 

End Sub 

emptyRow를 사용하지만, 초기화되지 않은이라고 생각! CommandButton1_Click에 은 그렇게 emptyRow 글로벌 아니라, 지역 변수

Dim emptyRow As Long 

있습니다.

Private Sub CommandButton2_Click() 

Dim emptyRow As Long 
'Determine emptyRow 
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 


'If this checkbox is True, send value of 1 to the worksheet 
If CAOpen.Value = True Then 
    Cells(emptyRow, 63).Value = 1 
End If 

Unload Me 

End Sub 

당신은 더 엄격 할 Option Explicit 옵션을 사용할 수 있습니다

당신은 다시와 emptyRow를 다시 계산해야합니다.

+0

안녕하세요 smagnan - 우수합니다. 감사합니다. 이제 사용자 폼이 작동합니다.그러나 두 번째 명령 단추에서 값을 같은 * 행으로 이동합니다. 이제 값은 아래의 빈 행으로 이동합니다. 어떤 아이디어? –

+0

@AliLumsden은 "같은 행"을 의미하지 않습니다. 빈 행 위의 행을 의미하는 경우 Offset 함수를 사용할 수 있습니다. http://msdn.microsoft.com/en-us/library /office/ff840060%28v=office.15%29.aspx처럼 :'Cells (emptyRow, 63) .Offset (-1,0) .Value = 1' ... 아니면 원하는 것을 얻지 못했습니다. – smagnan

+0

참고 : 위의 내용이 귀하의 마지막 의견에 응답하지 않은 경우 귀하는 답변을 수락 된 것으로 확인하고이 특정 문제에 대한 자세한 내용과 함께 새로운 질문을 할 수 있습니다. 의견에 해결책을 설명하는 것이 쉽지 않기 때문에 미래의 사용자에게 도움이 될 것입니다. theese는 두 가지 다른 질문입니다. – smagnan