2014-12-30 2 views
0

Excel Userform의 값을 시트에 붙여 넣으 려합니다. 값은 사용자 폼 내부에 넣는 것에 따라 다른 시트에 붙여 넣을 수 있습니다.Userform에서 Excel 시트로 값 붙여 넣기

내가 여기까지 온 :

Private Sub Lagginarenda_Click() 
Sheets("KategoriComboBox").Range("B2").Value = TextBoxFragestallare.Value 
End Sub 

KategoriComboBox 당신의 이름을 선택할 수있는 사용자 정의 폼 드롭 다운 목록은이 목록에 포함 된 동일한 값이 비슷한 엑셀 시트가 있습니다..

TextBoxFragestallare은 값을 쓸 수있는 TextBox입니다. 이 값 나는 셀 B2의 내부에 사용자 정의 폼 내부에서 선택하는 시트에 붙여 넣기를 원합니다. 그것이 말하는 때문에

강령은 늘 일 "bound- 런타임 오류에서 인덱스를 '9'"내가 여기까지 와서 관리해야


: 나는

Private Sub Lagginarende_Click() 

Dim emptyRow As Long 

'Aktiverar sheet 
Sheets("Byggkonstruktion").Activate 

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

'Överför information 
Cells(emptyRow, 1).Value = TextBoxLopnummer.Value 
Cells(emptyRow, 2).Value = TextBoxFragestallare.Value 
Cells(emptyRow, 3).Value = TextBoxMottagare.Value 
Cells(emptyRow, 4).Value = TextBoxDatum.Value 
Cells(emptyRow, 5).Value = TextBoxFraga.Value 
Cells(emptyRow, 8).Value = TextBoxSvar.Value 
If KanBesvaraFraganJa.Value = True Then Cells(emptyRow, 6).Value = KanBesvaraFraganJa.Caption Else Cells(emptyRow, 6).Value = KanBesvaraFraganNej.Caption 

Unload Me 
End Sub 

유일한 문제가 이제는 시트 ("Byggkonstruktion") 대신에을 활성화하면 userform에있는 드롭 다운 목록의 값을 사용할 수 있습니까? 그것은 당신이 나타납니다

+0

KategoriComboBox에 드롭 다운 목록 또는 시트가 있습니까? 드롭 다운 목록에서 ComboBox를 의미합니까? –

답변

0

아래의 Sub이 적합합니다. Range을 적합하게 인증해야하며 엄격히 필요하지 않으면 Select 또는 Activate을 사용하지 않는 것이 좋습니다. 1) ComboBox 사전을 사용하여, 2) ComboBox에서 선택한 값이 당신이 원하는 있는지 확인하여 채우기 때문에, 3) 워크 시트가 존재하는지 확인 KategoriComboBox.Value을 사용할 수 있습니다 : 당신이해야

ActiveWorkbook에서 사용하거나 적절하게 선택하려고합니다.

Private Sub Lagginarende_Click() 
    Dim emptyRow As Long 

    'Aktiverar sheet 
    Dim ws As Worksheet 
    Set ws = ActiveWorkbook.Sheets(KategoriComboBox.Value) 
    'Sheets("Byggkonstruktion").Activate 

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

    'Överför information 
    ws.Cells(emptyRow, 1).Value = TextBoxLopnummer.Value 
    ws.Cells(emptyRow, 2).Value = TextBoxFragestallare.Value 
    ws.Cells(emptyRow, 3).Value = TextBoxMottagare.Value 
    ws.Cells(emptyRow, 4).Value = TextBoxDatum.Value 
    ws.Cells(emptyRow, 5).Value = TextBoxFraga.Value 
    ws.Cells(emptyRow, 8).Value = TextBoxSvar.Value 
    If KanBesvaraFraganJa.Value = True Then ws.Cells(emptyRow, 6).Value = KanBesvaraFraganJa.Caption Else ws.Cells(emptyRow, 6).Value = KanBesvaraFraganNej.Caption 

    Unload Me 
End Sub 
+0

안녕하세요, Sancho 님, 늦게 대응하여 죄송합니다. 지금 코드가 잘 작동하므로 코드를 변경했습니다. 한 가지는, 유일한 것은 내가 내 이전으로 변경하고 당신은 다음과 같습니다.' 'Aktiverar 시트 희미한 WS 워크 시트로 설정 WS의 =의 ActiveWorkbook.Sheets (KategoriComboBox.Value) '시트 ("Byggkonstruktion")이 활성화 'emptyRow를 결정하십시오. emptyRow = WorksheetFunction.CountA (ws.Range ("A : A")) + 1 'emptyRow = WorksheetFunction.CountA (범위 ("A : A")) + 1' 이것이 왜 더 나은 해결책이 될까요? 감사. 이것은 더 나은 솔루션이 왜 * - '개인 서브 KategoriComboBox_Change() 시트 (KategoriComboBox.Text) .Activate 끝 Sub' – Joneskvist

+0

, 나는 여전히 당신의 코드를 실행하는 관리하려면이 조각이 필요합니다 * Range의 조건을 만족하고 불필요한 'Select'사용을 피합니다. *이 스 니펫이 여전히 필요합니다 ... * 안됩니다. 나열된 3 단계를 엄격하게 준수하는지 확인하십시오. 디버거, 시계 및 직접 실행 창을 사용하여 현재 진행중인 작업을 볼 수 있습니다. – Joneskvist

+0

@Joneskvist : 내가 얘기를 깜빡 했네요 –

0

은 원하는 : 내가 제대로 질문을 이해한다면

Private Sub Lagginarenda_Click() 
Sheets(KategoriComboBox.Value).Range("B2").Value = TextBoxFragestallare.Value 
End Sub 
+0

안녕하세요,이 기능을 사용할 수 없습니다. 'Sheets (KategoriComboBox.Value) .Activate'? – Joneskvist

1

, 당신은 사용자가 드롭 다운 컨트롤을 통해 특정 시트 이름을 선택하고 그들이이 시트에 입력 한 텍스트를 붙여 넣을 수 있도록하려면 셀 'B2'.

그래서 당신의 설정은 다음과 같이 보일 수 있습니다 Demo application for pasting on selected sheet

Enter text

다음

Text is pasted on selected sheet

은 당신이 이것을 달성 할 수있는 방법은 다음과 같습니다 (당신이 cbxSheet라는 콤보라는 텍스트 상자가 있다고 가정 txbText 및 사용자 정의 폼의 btnCopyTextToSelectedSheet라는 명령 단추)

Option Explicit 

Private Sub UserForm_Initialize() 

    Dim wksCurrentSheet As Worksheet 

    'Add all available sheet names to dropdown box 
    For Each wksCurrentSheet In Worksheets 
     cbxSheet.AddItem wksCurrentSheet.Name 
    Next wksCurrentSheet 

End Sub 

Private Sub btnCopyTextToSelectedSheet_Click() 

    Dim strText As String 
    Dim strSheetName As String 
    Dim wksDestination As Worksheet 

    'Read sheet name from dropdown box 
    strSheetName = cbxSheet.Value 

    'Try to get sheet with the defined name 
    Set wksDestination = Worksheets(strSheetName) 
    'If there is no sheet with this name you will receive 
    'an 'Index out of bound' (9) runtime error 

    'Get text from textbox 
    strText = txbText.Text 

    'Write to cell in destination worksheet 
    wksDestination.Activate  'Not needed, just to let the user see 
          'that the copying really happens :) 
    wksDestination.Range("B2").Value = strText 

    'Unload form (makes sure the UserForm_Initialize sub is called on 
    '    each use of the form) 
    Unload Me 

End Sub 

샘플을 여기에 올렸습니다 : https://dl.dropboxusercontent.com/u/40951326/SheetSelectionExample.xlsm

희망 사항을 통해 원하는 것을 얻을 수 있기를 바랍니다.

+0

안녕하세요, 사용자 정의 폼에있는 드롭 다운 메뉴에서 선택한 시트 만 활성화하고 싶습니다. 이건'Sheets (KategoriComboBox.Value) .Activate'에 대한 이상한 이유입니다. 어떤 단서가 있습니까? 시간 내 주셔서 감사합니다. – Joneskvist

+0

@ Joneskvist - "실용하지 못함": 어떤 일이 발생했는지 정확하게 설명하십시오. –

+0

안녕, 나는 이렇게했다, 지금 그것을 해결하기 위해 관리 : '개인 서브 KategoriComboBox_Change() 시트 (KategoriComboBox.Text) .Activate 끝 Sub' 난 단지 새로운 개인 서브를 만드는 데 필요한 및 ComboBox에서 선택한 시트를 활성화합니다. – Joneskvist

0

내 질문에 대한 대답은 다음과 같다 :

Private Sub KategoriComboBox_Change() 

    Sheets(KategoriComboBox.Text).Activate 

End Sub 

그것은 당신이 콤보 상자에서 선택한 것과 동일한 이름을 가진 시트를 활성화하는 것이 그것을 무엇.

+0

잘 작동하지 않는다면! 왜 당신이 전에 일했는지 작동하지 않았던 것이 묻혔다는 것에 대한 질문. 귀하의 답변에 따라, 당신은 [이 답변] (http://stackoverflow.com/a/27704110/2707864)에서 포인트 3을 잃어 버렸을 수도 있습니다. 엄격하게 필요할 때는'Activate '만 사용해야합니다. Activate로 접근하는 것이 최선은 아니지만 여전히 효과적 일 수 있습니다. –

+0

나는 내가 한 일을하는 것 외에 다른 접근법을 추천합니까? 귀하의 솔루션을 시도했지만 원하는 시트에 값을 붙여 넣지 않았습니다. 시간 내 주셔서 감사합니다. – Joneskvist

+0

예. 제안을 따르는 것이 좋습니다. 내가 게시 한 코드를 시도하고 그 값이 실제로 붙여 넣기되었지만 다른 워크 시트에 있으면 포인트 2가 누락되었을 가능성이 있습니다 (또는 같은 이름을 가진 워크 시트가있는 다른 ActiveWorkbook이있을 수 있습니다. 다시 말하지만, 값 붙여 넣기 이외의 다른 이유로 대상 워크 시트를 활성화해야하는 경우가 아니면 –

관련 문제