2013-09-28 3 views
0

다른 통합 문서간에 데이터 복사본을 만들려고합니다. 통합 문서의 이름은 사용자가 파일 이름을 선택할 수있는 옵션이 주어지기 때문에 무작위 적으로 발생 했으므로 코드에 통합 문서 세트를 만들었습니다. 내 프로그램에 서브 루틴을 포함 시켰을 때 서브 스크립트가 범위를 벗어났습니다.서브 스크립트의 서브 스크립트 범위를 벗어남 오류

서브 루틴이 내 통합 정의를 계속 이해하는 방법에 대한 아이디어가 있으십니까? 당신은 WBWB2 글로벌을해야

Option Explicit 
Sub testwe() 
Dim wb As Workbook, wb2 As Workbook, vFile As Variant 
Set wb = ActiveWorkbook 

vFile = Application.GetOpenFilename("Excel-files,*.xls", _ 
    1, "Select One File To Open", , False) 
'if the user didn't select a file, exit sub 
If TypeName(vFile) = "Boolean" Then Exit Sub 
Workbooks.Open vFile 
Set wb2 = ActiveWorkbook 'set the opened file as wb2 

Call test123 
End Sub 

sub test123() 
wb.Worksheets("Sheet1").Range("A1") = wb2.Worksheets("Sheet1").Range("B1") 
End Sub 
+0

Clear as mud. : – dotNET

+0

어디에서 test123에 대해'wb'와'wb2'를 선언합니까?'Option Explicit'을 설정하지 않고 코드를 실행하면'Object Required' 오류가 발생합니다. 또한'wb2'에 워크 시트가 있습니다 'Sheet1'? –

+0

@DougGlancy 당신 말이 맞아요, 내가 다시 한 번 내가 명시된 런타임 오류를 보여준 코드를 시도 .. 종류의 이상한. 나는 wb2 Sheet1을 가지고 확신합니다 – user1204868

답변

1

:

내 코드는 확실히 제 1 서브 뒤에 근거를 이해하지 못하는 경우 단순화

Dim wb As Workbook, wb2 As Workbook 

Sub testwe() 
    Set wb = ActiveWorkbook 

    vFile = Application.GetOpenFilename("Excel-files,*.xls", _ 
     1, "Select One File To Open", , False) 
    'if the user didn't select a file, exit sub 
    If TypeName(vFile) = "Boolean" Then Exit Sub 
    Workbooks.Open vFile 
    Set wb2 = ActiveWorkbook 'set the opened file as wb2 
    Call test123 
End Sub 

Sub test123() 
    wb.Sheets("Sheet1").Range("A1") = wb2.Sheets("Sheet1").Range("B1") 
End Sub 

EDIT # 1 :

rsion은 Doug의 제안을 사용합니다.

Sub testwe() 
    Dim wb As Workbook, wb2 As Workbook 
    Set wb = ActiveWorkbook 
    vFile = Application.GetOpenFilename("Excel-files,*.xls", _ 
     1, "Select One File To Open", , False) 
    'if the user didn't select a file, exit sub 
    If TypeName(vFile) = "Boolean" Then Exit Sub 
    Workbooks.Open vFile 
    Set wb2 = ActiveWorkbook 'set the opened file as wb2 
    Call test123(wb, wb2) 
End Sub 

Sub test123(wb As Workbook, wb2 As Workbook) 
    wb.Sheets("Sheet1").Range("A1") = wb2.Sheets("Sheet1").Range("B1") 
End Sub 
+0

고맙습니다! 전 세계적으로 설정하는 것에 대해 배웠습니다. – user1204868

+2

그건 나쁘군요. 조언. 필요하지 않으면 전역 변수를 사용하지 말고, 워크 북을 변수로 서브 루틴에 전달하고, 원래의 'subscript out of range'질문에 응답하지 않습니다. –

+1

안녕하세요 Doug : 그것들을 매개 변수로 전달하는 것은 좋은 생각입니다. 나는 그것을 고려하지 않았습니다 ..... 범위 밖의 첨자는 "Sheet1"v.s.을 나타냅니다. "시트 1"철자 문제. –

관련 문제