2017-12-20 10 views
0

MS Access에서 일부 코드를 작성 중이므로 사용자가 Excel 통합 문서의 워크 시트를 선택해야 할 때까지 작업을 수행해야합니다. 나는이 워크 시트의 이름이 무엇인지 또는 어느 위치에 놓여 있는지 모른다.MS Access : Excel 통합 문서에서 워크 시트 선택

나는 사용자에게 모든 시트 이름을 포함하는 목록 상자가있는 양식 (모달 양식)을 보여주는 솔루션에 대해 생각하고있었습니다. ' 사용자가 양식 중 하나를 클릭하면 양식이 A1 : J10 범위를 표시합니다 (사용자가 올바른 하나의 워크 시트를 선택할 수 있음). 선택한 워크 시트를 확인한 후 워크 시트 개체로 반환합니다.

개체 변수를 양식에 전달할 때까지 모든 것이 훌륭했습니다. openArgs에서는 문자열 만 전달할 수 있습니다. 나는 심지어이 형식을 열 수있는 클래스에 대해서 생각해 보았지만 여전히 오브젝트 매개 변수를 전달하는 것은 행운이 아닙니다.

전역 변수/공용 변수를 피하려고합니다.

아이디어가 있으십니까?

+0

"양식"을 언급 할 때, 액세스 양식을 의미합니까? 물론 –

+0

입니다. 내가 아는 유일한 것은 :) – mtz

답변

0

개체가 wsObj라고 가정하면 wsObj를 사용할 수 없습니다. Name?
또한 wsObj를 살펴보십시오. CodeName도 흥미로울 수 있습니다.

+0

object.name보다는 오브젝트 버전에 대해 생각하고있었습니다. 제가 대상을 가지고있을 때 나는 올바른 것을 가지고 있기 때문입니다. 통합 문서가 더 이상 열리지 않으면 상위 개체와 더 많은 변수가 있어야합니다. 내 방식대로하는 것이 거의 불가능하다고 생각합니다. – mtz

0

폼 모듈에서 속성을 개체로 선언 한 다음로드되면 해당 속성을 설정할 수 있습니다. 그래서 폼 모듈에서

Option Explicit 
Private myObj as object 
Property Set DesiredWorksheet(o as object) 
set myobj = o 
End 

다음 코드

Load myform 
    set myform.desiredworksheet = wsObj 
    myform.show 

아에서, 미안 해요 기록 된 엑셀 액세스하지!

Docmd.openform f 
f.desiredworksheet = ws.obj 
docmd.openform f, windowmode:=acdialog 

객체 사이에 값을 보낼 수있는 많은 가능성이있다

+0

Seariously? 나는 폼에서 속성을 사용할 수 있는지 몰랐다. 그러나 실제로 그것은 수업입니다. 전에이 정보에 결코 도달하지 마십시오. 나는 그것을 시도 할 것이다 :) 암시를위한 고맙습니다. 많은 것을 배우고 ... – mtz

+0

Ok. 나는 당신의 솔루션을 시도 할 수있었습니다. 그것은 작동하지만 BUT가 있습니다. 'docmd.openform' 명령으로 폼을 열 때, 열려있는 폼이 그 일을 할 때까지 코드가 실행을 멈추게하는'windowmode : = acDialog'를 사용할 수 있습니다. 'Dim f를 Form_SheetSelection set f = New Form_SheetSelection'으로 사용할 때이 객체를로드하거나 언로드 할 수 없다고 말합니다 (오류 361).그리고'Load'를 생략하면 폼이 열리고, 모든 것을 수행하고, 내가 호출 한 곳으로 돌아갑니다. – mtz

+0

아, 죄송하지만 엑셀이 아니라 엑셀을 쓰고있었습니다 !!! –

0

작동해야한다. 글로벌 사용

)는 액세스 VBA를 모듈에 바르

Global yourvariable As String 

당신은 변형, 싱글 등을 사용할 수있는 몇 가지 다른 값을 필요로하는 경우값을 저장하려면 윈도우 등록 를 사용

B) :

SaveSetting "yourprojectname", "Settings", "yourvariable", yourvalue 

검색하려면를 값 :

retvalue = GetSetting("yourprojectname", "Settings", "yourvariable", "your_default_value_if_not_exist") 

C) 폼 열기 명령 절차에 OpenArg를 사용

DoCmd.OpenForm "stDocName", acNormal, "filter_if_needed", "stlinkcriteria", acFormEdit, acWindowNormal, "arguments_forOpenArgs" 
만약 VARS 및 값, 예와 체인을 사용하여 하나 개 이상의 값을 보낼 수있는 세 가지 가능한 솔루션

Private Sub Form_Open(cancel as integer) 
your_args=Me.OpenArgs 

대상 폼

: 나 "파이프"를 사용하는 본 예에서

myvar_mutiple="name=John Doe|address=Rua del Percebe 34|location=Madrid|phone=34 91 1234567" 

(각 "SP의 취득이와

splitvar=Split(myvar_multiple,"|") 

: 키 1) 문자에 AltGr 키가 각 VAR을 분리 = 대상 절차에 대한 다음 값 는 각 쌍을 분할 필요 litvar ""name = John Doe "와 같은 요소 "= "을 사용하여 다시 분할하여 변수 값을 얻습니다. 각 값에 대해 결과를 로컬 변수에 재 할당 할 수 있습니다. 전체 코드 예제 : 내가 "여러 바르"이 코드를 사용

if me.OpenArgs<>"" then 
    splitvar=Split(me.OpenArgs,"|") 
    for x=0 to ubound(splitvar) 
     tmpsplit=Split(splitvar(x),"=") 
     paramvars=tmpsplit(0) 
     paramvalue=tmpsplit(1) 
     select case paramvars 
     case "name" 
      stname=paramvalue 
     case "address" 
      straddress=paramvalue 
     case "location" 
      strlocation=paramvalue 
     case "phone" 
      strphone=paramvalue 
     end select 
    next 
end if 

몇 가지 권장 사항 : 은 - 항상 낮은 케이스 변수를 사용하거나 변경이 :

paramvars=tmpsplit(0) 

paramvars=lcase(tmpsplit(0)) 

- "="값을 사용해야 할 경우 다른 대체 문자로 변경하거나 왼쪽의 첫 번째 "="양식을 검색 할 수 있습니다 (이 솔루션 대신 Split을 사용합니다)

paramvars=trim(lcase(left(splitvar(x),len(splitvar(x))-(len(splitvar(x))-instr(splitvar(x),"="))-1))) 
  • 당신이 어떤 값을 보낼 수 및 대상 코드를 변환 할 수 있음을 기억하십시오. 이 예제에서는 문자열 만 사용하므로 cLng 또는 cInt 등을 사용할 수 있습니다.

솔루션에서 Excel에서 시트를 Excel로 선택하는 것이 더 좋은 대안이라고 생각합니다.

+0

감사합니다. OpenArgs를 사용하면 아주 익숙합니다. 괴롭힘을당한 아빠가 쓴 해결책에 대해 나는 꿈꿨다. – mtz