2012-03-27 2 views
0

동료를위한 매크로를 만들고 있습니다. 그들은 매일 파일을 받고 특정 정보를 다른 통합 문서로 복사해야합니다. 매크로는 복사를 처리하는 것입니다. 나는 복사 할 파일을 알 수 있도록 현재 열려있는 통합 문서 목록이 들어있는 콤보 상자 팝업이있는 사용자 양식을 원합니다. 거기에서 선택한 선택이 그 선택으로 통합 문서 변수를 설정하도록 어떻게 설정합니까?통합 문서 변수를 Userform Combobox에서 설정하십시오.

난 할 노력하고있어입니다 : 아래

Sub CopySub() 

Dim wb As Workbook 

UserForm1.Show 

Set wb = Workbooks(ComboBox1.Value) 
....Rest of Copy and Paste Code 

사용자 정의 폼에 대한 코드입니다 :

당신의 코드가 지금은 작동하지 않습니다
Private Sub OK_Click() 
'Take user selection and continue copy and paste code 
UserForm1.Hide 
End Sub 

Private Sub Cancel_Click() 
'Cancel everything, end all code 
End 
End Sub 


Private Sub UserForm_Activate() 

    'Populate list box with names of open workbooks. 

    Dim wb As Workbook 

    For Each wb In Workbooks 

    ComboBox1.AddItem wb.Name 

    Next wb 

End Sub 

답변

0

CopySub 때문에 무엇을 알고하지 않습니다 \ 어디 ComboBox1입니다. 또한 사용자가 취소 단추를 누르지 않고 양식의 X를 클릭하여 닫거나 통합 문서를 선택하지 않고 [확인] 단추를 클릭하면 CopySub이 계속 실행됩니다.

양식 정보를 얻는 데는 몇 가지 다른 방법이 있습니다. 현재 코드에서 가장 간단한 방법은 ComboBox1을 올바르게 참조하고 간단한 테스트를 추가하는 것입니다.

Sub CopySub() 
    Dim wb As Workbook 

    UserForm1.Show 
    If UserForm1.ComboBox1.Value = "" Then 
     Exit Sub 
    End If 

    Set wb = Workbooks(UserForm1.ComboBox1.Value) 
    ' rest of code goes here 

End Sub 

매크로는 더 빠르고 쉽게 실행할 수있는 방법입니다. 양식의 유일한 것은 통합 문서 선택을위한 콤보 상자이고 사용자는 키보드 바로 가기 또는 메뉴에서 매크로를 시작할 것이므로 매크로를 사용하여 활성 통합 문서에서 매크로를 실행할지 묻는 것이 좋습니다. 예를 클릭하면 드롭 다운 상자를 클릭하고 통합 문서를 선택한 다음 확인을 클릭하는 것보다 훨씬 빠릅니다.

Sub CopySub() 
    Dim wb As Workbook 

    If MsgBox("Do you want to run the macro on '" & ActiveWorkbook.Name & "'?", vbQuestion + vbYesNo) = vbYes Then 
     Set wb = ActiveWorkbook 
    Else 
     UserForm1.Show 
     If UserForm1.ComboBox1.Value = "" Then 
     Exit Sub 
     End If 
     Set wb = Workbooks(UserForm1.ComboBox1.Value) 
    End If 

    ' rest of code goes here 

End Sub 
+0

덕분에 귀하의 회신, 나는 실제로 문제를 파악 당신이 말했던 것입니다, 저는 글로벌 변수가 필요했습니다. 내 수정 사항은 아래에 있습니다. 매크로가 실행되는 통합 문서가 activeworkbook이 될 것이기 때문에 통합 문서를 요청하기 위해이 단계를 만들어야했지만 사용자가 복사 할 통합 문서를 선택하는 방법이 필요했습니다. – postelrich

+0

나는 8 시간이 지난 후에 나의 대답을 게시 할 것이다. :) – postelrich

+0

@riotburn, 나는 그것이 사실일지도 모른다라고 생각하고 있었다. 그러나 만일 그렇지 않은 경우에 대비하여, 나는 내가 계속 전진 할 것이고, 그것을 언급 할 것이다라고 생각했다. :-) – mischab1

0

더 검색 후 나는 답을 발견하고, mischab 지적 무엇을 내 사용자 정의 폼이 서브 루틴과 통신 할 수있는 방법이 없었습니다, 그래서 내가 전역 변수를 작성하지 않은 등의 동일.

Public wb1 As String 

Sub CopySub() 

Dim wbCAR As Workbook 

UserForm1.Show 

Set wbCAR = Workbooks(wb1) 
....Rest of code 

등으로 정의 폼 코드를 설정하여 : : 나는 같은 전체 통합 문서의 범위와 변수를 선언하여이 문제를 해결

Private Sub OK_Click() 
wb1 = ComboBox1.Value 
UserForm1.Hide 
End Sub 

Private Sub Cancel_Click() 
Unload Me 
End 
End Sub 


Private Sub UserForm_Activate() 

    'Populate list box with names of open workbooks. 
    Dim wb As Workbook 
    For Each wb In Workbooks 
    ComboBox1.AddItem wb.Name 
    Next wb 

End Sub