2016-06-08 2 views
0

현재 입력 시트, 프로세스, 출력 및 입력 시트에 표시된 값과 프로세스 시트의 다양한 상점을 사용하는 매크로가 3 장 있습니다. 문제는 사용자가 입력 페이지의 매크로에 연결된 제출 버튼을 누르면 출력 시트를 표시하기 전에 시트가 프로세스 시트로 전환된다는 것입니다. 내가 매크로 모두에서 제거 할 때마다Worksheet.Select 화면 전환 VBA

Worksheets("Process").Select 

그러나 범위를 벗어난 미친 듯이 간다 :이 때문에이 코드 줄의 것을 이해합니다. 시트를 실제로 시각적으로 이동하지 않고 시트를 선택할 수있는 방법이 있습니까? 그 일을하기 위해 매크로가 필요하고 간단히 출력 시트를 표시해야합니다. 미리 감사드립니다!

+0

참조 (http://stackoverflow.com/questions/10714251/how-to-avoid-using을 변경 선택를 사용 avoide합니다 -select-in-excel-vba-macros)를 사용하여 목표를 달성하기위한 select 및 activate에 의존하는 방법을 배웁니다. – Jeeped

답변

1

@Jeeped가 언급 했으므로 SelectActivate을 사용하지 말고 참조를 한정하는 것이 안전합니다.

예를 들어 Range("A1").Value을 사용하면 현재 활성 워크 시트의 A1 셀 값을 가져올 수 있지만 사용자가 해당 시트를 활성화하지 않았거나 다른 proc이 뷰를 이동 한 경우 어떻게됩니까? 잠재적으로 워크 시트에서 셀 A1의 값을 얻을 수 있습니다.

워크 시트에 대한 참조를 만든 다음 활성 워크 시트를 변경할 필요가없고 범위 값의 출처에 대한 모호성이없는 방식으로 모든 워크 시트를 보내는 것이 가장 좋습니다. 예를 들어

: -

Option Explicit 
Dim WkSht_I As Worksheet 'Input 
Dim WkSht_P As Worksheet 'Process 
Dim WkSht_O As Worksheet 'Output 

Public Sub Sample() 
Set WkSht_I = ThisWorkbook.Worksheets("Input") 
Set WkSht_P = ThisWorkbook.Worksheets("Process") 
Set WkSht_O = ThisWorkbook.Worksheets("Output") 

MsgBox "Input A1 = " & WkSht_I.Range("A1").Value 
MsgBox "Process A1 = " & WkSht_P.Range("A1").Value 
MsgBox "Output A1 = " & WkSht_O.Range("A1").Value 

Set WkSht_O = Nothing 
Set WkSht_P = Nothing 
Set WkSht_I = Nothing 
End Sub 

은 안전하고 명확해야한다이 방법으로 절차를 변환하고, 다른 사람 또는 작업중인하면서 콘텐츠를 표시하는 당신은 단 한 번 활성 시트를 설정할 수 있습니다.

0

@ 게리의 방법은 여러 워크 시트로 작업 할 때 가장 좋은 방법입니다.

당신이 두 개의 시트를 사용하는 경우에는 내가

With Worksheets("Process") 
    Debug.Print .Range("A1") 
    Debug.Print Range("A1") 
End With 

공지 사항 를 추천하기 위하여려고하고있다 (당신이 activesheet 및 대상 시트를 고려) "." 범위 앞입니다.

"." 그것을 말하면

함께 의 일부임을 나타내고, .Range는 ("A1")는 워크 ("프로세스")와 동일하다. 범위 ("A1")

초 범위 때문에 ("A1")에는 "이 없습니다." 그것은 activesheet가

그러나 때를 그 다음 넣어이 동일합니다 프로세스 경우 심지어는 와 엔드

내부의 Activesheet.Range ("B1")로 동일 이외의 워크 시트를 선택하면 활성 시트가 ​​변경되므로 출력이 달라집니다.

이것은 activesheet [엑셀 VBA 매크로에 선택의 사용을 피하는 방법]