나눔터  
  HOME > 나눔터 > 묻고답하기 > 액세스
액세스
액세스에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 소나플렉스 (sonaflex)

추천:  0
파일:     조회:  792
제목:   폼 이름을 전역 변수로 입력 받아서 여러 개의 폼에서 전역 함수로 컨트롤 하고 싶습니다.
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 액세스 버전(95,97,2000,xp,2003,2007): Microsoft365

* 아래줄에 질문을 작성하세요 >> 


안녕하세요? 좀처럼 해결이 안 되어서 어렵사리 이 곳에서 도움을 구해 봅니다.

구조는 아래와 같습니다.

f_Certificates 라고 하는 폼이 있고 여기는 레코드가 없이 하위 폼(q_AZ_numbering)에만 레코드가 있는데 필드는 등록일자와 만료일자가 있습니다.

f_Certificate 의 상부에는 버튼을 만들어서 그 버튼을 누르면 period bar 가 그려지도록 하는데, 방법은 아래와 같습니다.

f_Certificate 의 하단에는 period bar를 그려서 등록일자로부터 만료일자까지의 선을 하나 그리고 그 바로 밑에 오늘 날짜 혹은 지정한 날짜까지의 정보를 넣습니다.

그런데 이 period bar를 f_Certificates 에만 넣지 않고 다른 비슷한 유형의 폼에도 넣어서 쓰고 싶은데, 그럴러면 모든 폼의 버튼에 입력을 해 줘야 하고 무엇보다도 수정 사항이 있으면 매번 코드 작성기를 열어 바꿔줘야 해서 번거롭습니다.

그래서 아래와 같이 전역 함수를 설정해서 등록 일자, 종료 일자, 상위 폼 정보, 하위 폼 정보를 전역 함수의 변수로 받아서 응용해서 쓰고 싶습니다.

여기서 f_name 이라는 변수를 period_bar라는 전역 함수의 변수로 받아서 f_name.visible, width, left 등으로 해 봤는데 안 됩니다.

ByVal 과 ByRef 이라는 게 있다는데 이것으로 해봐야 하는 것인지, 아니면 다른 방법이 또 있는 것인지 set 이라는 것을 써야 하는지, 도무지 실마리를 찾을 수가 없습니다.

도움 부탁 드립니다.
-----------------------------------
1. 전역 함수
Public Function Period_Bar(d_regi As Date, d_expire As Date, f_name As Form, f_sub_name As Form)

[Forms]![f_Certificates]![y1].Visible = 0
'y1은 f_Certificate 의 textbox

f_name.y2.Visible = 0

If d_expire < Date Then

MsgBox "기간이 만료되었습니다."

Else

[Forms]![f_Certificates]![y1].Visible = False

f_name.y2.Visible = False
f_name.y3.Visible = False
f_name.y4.Visible = False
f_name.y5.Visible = False


Dim MaxWidth As Integer

Dim Years As Integer

Dim Yr_Width As Integer

Dim Days_until As Integer

Dim Duration As Integer

MaxWidth = f_name.Width * 0.9

Years = (d_expire - d_regi) / 365

Yr_Width = MaxWidth / Years

Days_until = (f_name.기준일자 - d_regi)

Duration = (d_expire - d_regi)


f_name.Line66.Left = (f_name.Width - MaxWidth) / 2

f_name.Line71.Left = f_name.Line66.Left

f_name.Line66.Width = MaxWidth

f_name.Line71.Width = f_name.Line66.Width * (Days_until / Duration)


f_name.tb_today.Left = f_name.Line66.Left + ((Date - Forms![f_Certificates]![q_AZ_numbering].Form![등록일자]) / 365) * Yr_Width - 500

f_name.L_today.Left = f_name.Line66.Left + ((Date - Forms![f_Certificates]![q_AZ_numbering].Form![등록일자]) / 365) * Yr_Width


If f_name.기준일자 = Date Then

f_name.tb_Until.Visible = False

f_name.L_until.Visible = False


Else

f_name.tb_Until = f_name.기준일자

f_name.tb_Until.Visible = True

f_name.L_until.Visible = True


f_name.tb_Until.Left = f_name.Line66.Left + ((f_name.기준일자 - Forms![f_Certificates]![q_AZ_numbering].Form![등록일자]) / 365) * Yr_Width - 500

f_name.L_until.Left = f_name.Line66.Left + ((f_name.기준일자 - Forms![f_Certificates]![q_AZ_numbering].Form![등록일자]) / 365) * Yr_Width

End If

f_name.tb_Regi = Forms![f_Certificates]![q_AZ_numbering].Form![등록일자]

f_name.tb_Regi.Left = f_name.Line66.Left - 500

f_name.L_Regi.Left = f_name.Line66.Left


f_name.tb_Expire = Forms![f_Certificates]![q_AZ_numbering].Form![만료일자]

f_name.tb_Expire.Left = f_name.Line66.Left + f_name.Line66.Width - 500

f_name.L_Expire.Left = f_name.Line66.Left + f_name.Line66.Width


f_name.tb_before_percent = f_name.Line71.Width / f_name.Line66.Width

f_name.tb_before_percent.Left = f_name.Line71.Left + f_name.Line71.Width / 2


f_name.tb_after_percent = (f_name.Line66.Width - f_name.Line71.Width) / f_name.Line66.Width

f_name.tb_after_percent.Left = f_name.Line71.Left + f_name.Line71.Width + (f_name.Line66.Width - f_name.Line71.Width) / 2


If Years > 3 Then

f_name.y1.Visible = True

f_name.y1.Left = f_name.Line66.Left + Yr_Width * 1

f_name.y1.Top = f_name.Line66.Top - 350

f_name.y2.Visible = True

f_name.y2.Left = f_name.Line66.Left + Yr_Width * 2

f_name.y2.Top = f_name.Line66.Top - 350

f_name.y3.Visible = True

f_name.y3.Left = f_name.Line66.Left + Yr_Width * 3

f_name.y3.Top = f_name.Line66.Top - 350


Else

f_name.y1.Visible = True

f_name.y1.Left = f_name.Line66.Left + Yr_Width * 1

f_name.y1.Top = f_name.Line66.Top - 350


End If


End If


End Function


2. 버튼에 들어가는 코드

Call Period_Bar(Forms![f_Certificates]![q_AZ_numbering].Form![등록일자], Forms![f_Certificates]![q_AZ_numbering].Form![만료일자], (Forms_f_Certificates), (Forms_q_AZ_numbering))
 
[불량 게시물 신고]  
        
  

작성일 : 2022-06-03(05:47)
최종수정일 : 2022-06-03(05:47)