2015-01-05 4 views
2
  1. 는 버튼을 제출 정의 폼
  2. 추가 텍스트 상자와 콤보
  3. 추가를 만든
  4. 클릭은 스프레드 시트에 데이터를 추가한다 제출하면
이 잘못 제가 말씀 드리 지요과 내가 읽고에서

VBA 입력 사용자 정의 폼 데이터가 올바르게

ActiveCell.Value = TextBox3.Text 
ActiveCell.Offset(0, 1).Select 
ActiveCell.Value = ComboBox1.Text 
ActiveCell.Offset(1, -1).Select 

이 작동하지만 I've been told I shouldn't use the .select keyword when possible. 코드를 재사용 할 수 있도록 변수를 만들어야한다는 것을 읽었습니다. 전문 개발자가이 코드를 작성하는 방법은 적은 코드로 작성할 수 있습니까? select를 사용하지 않고 activecell 오프셋을 어떻게 참조 할 수 있습니까?

+4

가능한 중복 (http://stackoverflow.com/questions/10714251/how- [엑셀 VBA 매크로의 선택 사용하지 않는 방법] to-avoid-using-select-in-excel-vba-macros) –

+0

잘못된 것은 아닙니다! 매크로를 기록하고 그대로 사용하십시오. 그것은 당신을 위해 작동하고, 그러므로, 그것은 괜찮습니다. 그것은 정말로 프로그래밍이 아니지만 왜 신경을 씁니까? 또한 적은 수의 라인이 그 자체로 좋거나 나쁘지 않고 단지 적은 수입니다. 읽을 수 있으면 OK입니다. –

+0

질문에 대답하기 위해서 우리는 다음을 알아야합니다 :'TextBox3'을 덤프하기를 원하는 셀,'ComboBox1'을 덤프하기를 원하는 셀 (TextBox3 셀에서'Offset (0, 1)'처럼 보임)) 그리고'Offset (1, -1)'셀을 가지고 무엇을하려 하는가. (편집 : 신경 쓰지 마라. 다음 빈 줄에 항목을 추가한다.) – Chrismas007

답변

8

난 당신이 다른 컬럼 그냥 문자 참조를 변경하려는 경우 당신이 열 B에서 열 A TextBox3ComboBox1을 원하는 가정입니다.

Sub OnClick() 'whatever your current sub is called. 

    Dim LastRow As Long, ws As Worksheet 

    Set ws = Sheets("Name of Sheet where data is going") 

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 'Finds the last blank row 

    ws.Range("A" & LastRow).Value = TextBox3.Text 'Adds the TextBox3 into Col A & Last Blank Row 
    ws.Range("B" & LastRow).Value = ComboBox1.Text 'Adds the ComboBox1 into Col B & Last Blank Row 

End Sub 

당신은 Offset() 사용하는 방법하려면 다음의

Sub OnClickwithOffset() 'whatever your current sub is called. 

    Dim LastRow As Long, ws As Worksheet 

    Set ws = Sheets("Name of Sheet where data is going") 

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 'Finds the last blank row 

    ws.Range("A" & LastRow).Value = TextBox3.Text 'Adds the TextBox3 into Col A & Last Blank Row 
    ws.Range("A" & LastRow).Offset(0, 1).Value = ComboBox1.Text 'Adds the ComboBox1 into next cell to the right of TextBox3 data. 

End Sub 
0

ActiveCell을 사용하지 않으려는 주요 이유는 코드가 실행되는 동안 사용자가 다른 셀을 선택하면 예기치 않은 결과가 발생할 수 있기 때문입니다.

컨트롤의 내용을 항상 같은 셀에 쓰는 것이 목적이라면 Range 유형의 변수를 정의하고 해당 변수를 기준으로 오프셋을 설정하면됩니다.

예컨대 :

Dim myCell as Range 

Set myCell = ThisWorkbook.Sheets(1).Range("C4") 
myCell.Value = TextBox3.Text 
myCell.Offset(0, 1).Value = ComboBox1.Text 

'[...] 
+0

이것은 마지막 줄에서 전가하는 작업을 완수하지 못한다. – Chrismas007

+0

그의 작업은 마지막 행에 입력하는 것이 어디입니까? – silentsurfer

+0

그의'ActiveCell.Offset (1, -1) .Select' 코드가 그의 의도임을 나타냅니다. 특정 줄에 입력하려면 다음 줄에 초점을 설정하십시오. – Chrismas007

관련 문제