|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 액세스 버전(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)) |
|