[ VBA - for,if,case ]

 

1. For문

    1. 반복문이 필요할 경우 For문을 이용한다.

    2. 범례 : For Each [개체 변수]  In [컬렉션 개체]

                      ~~

                      [ Exit For ]

                  Next [개체 변수]

 

    3. 컬렉션 개체

        - 여기에서의 전체는 셀수 있는 개체(영어로 Collection) 또는 varinat형 변수가 들어간다.
        - 컬렉션 : 하나 둘씩 세어서 모을 수 있는 개체이다.

        - 대표적인 컬렉션에는 셀(cells), 영역(range 또는 areas), 시트(sheets), 워크북(workbooks),

           윈도우(windows), 도형(shapes), 페이지(pages), 차트(charts), 테두리(borders) 등이 있다.

           당연히 하나 둘씩 셀 수 없는 덩어리, 예를 들면 수식, 서식, 색깔, 크기 등등은 들어갈 수 없다. 

 

    4. 기본 예문

        - For Each rngC In Selection

           : 선택한 전체 영역(Slelection)의 각 셀(rngC)을 윗그림과 같이 좌에서 우로,

             위에서 아래로 순환. 선택한 셀이 10 개이면 10번을 반복할 것이고,

             1개의 셀만의 선택하였다면 한 번만 반복할 것이다. 

        - Dim rngC As Range  'rngC를 영역(range)으로 정의
           For Each rngC In Range("A1:A5")

           : 선택한 전체 영역(A1:A5)의 각 셀(rngC)을 순환. A1:A5는 총 5개의 셀이므로 5회를 반복한다.

        - Dim wkSht As WorkSheet   'wkSht를 시트로 정의
           For Each wkSht In ActiveWorkbook.WorkSheets

          : 현재 파일내에 있는 모든시트(WorkSheets)의 각 시트(wkSht)를 순환. 시트 개수만큼 반복

        - Dim shp As Shape  'shp를 도형으로 정의
           For Each shp In ActiveSheet.Shapes

          : 현재 시트에 있는 전체 도형(Shapes)의 각 도형(shp)을 순환. 시트내의 도형 개수만큼 반복

 

   5. 사용예문

       - For 카운터 = 시작번호 to 끝번호 [ Step 간격 ]

                 ~

          Next [카운터]

       - Dim WS As Worksheet

          For Each WS In Activeworkbook.Worksheets

                ~

          Next WS

       - For Each ran In Range("A1:B6")

               ran.Value = i

                ~

          Next

    9. 참고 URL : http://blog.naver.com/rosa0189/60149221111

 

 

 

'VBA (기본) > 참고 URL' 카테고리의 다른 글

참고 URL  (0) 2017.08.01
Posted by 농부지기
,

[ VBA. Cell 선택 - Addrress ]

 

1. 정의

    - 현재 선택되어 있는 Cell의 절대주소를 얻어온다.

 

2. 범례

    - strAddress = Selection.Address(rowabsolute:=False, columnabsolute:=False)

'VBA (기본) > Cell 선택' 카테고리의 다른 글

VBA. Cell 선택 - End  (0) 2017.08.31
VBA. Cell 선택 - SpecialCells  (0) 2017.08.31
VBA. Cell 선택  (0) 2017.08.31
Posted by 농부지기
,

[ VBA. Cell 선택 - End ]

 

1. 정의

 

2. 범례

    - Range("D8").End(xlUp).Select
    - Range("D8").End(xlDown).Select
    - Range("D8").End(xlToLeft).Select
    - Range("D8").End(xlToRight).Select

 

3. 속성

    - xlLeft : 1,  xlToRight : 2,   xlUp : 3,   xlDown : 4

 

    - xlUp        : 위쪽    끝 (단축키 : <ctrl> +  ↑ )

                     : 선택된 위치(Cell)를 기준으로  위로 올라가면서 값이 존재 하는 Cell을 찾는 방식

    - xlDown   : 아래쪽 끝 (단축키 : <ctrl> +  ↓ )

                     : 선택된 위치(Cell)를 기준으로  아래로 내려가면서 값이 존재 하는 Cell을 찾는 방식

   - xlToLeft    : 왼쪽    끝 (단축키 : <ctrl> +  ← )

                     : 선택된 위치(Cell)를 기준으로   왼쪽으로 가면서 값이 존재 하는 Cell을 찾는 방식

   - xlToRight : 오른쪽 끝 (단축키 : <ctrl> +  → )

                     : 선택된 위치(Cell)를 기준으로  오른쪽으로 오면서 값이 존재 하는 Cell을 찾는 방식

 

4. 예문

    - Range(Range("E2"), Range("E2").End(xlDown)).Select

    - Range("A65536").End(xlUp).Offset(1, 0).Select

       : A열 맨 마지막에서 위로 올라가면서 값이 존재 하는 Cell을 찾고, Offset(1,0)으로 바로 아래 Cell을 선택

    - 아래 4개 문장은 동일하게 동작

       Cells(Rows.Count, "A").End(3)(2).Select

       Cells(Rows.Count,   1).End(3).Cells(2,1).Select
       Cells(Rows.Count,   1).End(3)(2,1).Select
       Cells(Rows.Count,   1).End(3)(2).Select

      : Y축 모든 Row에서, A열을 기준으로   값이 존재 하는 맨 마지막 Cell을 찾고, 그 바로 아래 Cell을 선택

'VBA (기본) > Cell 선택' 카테고리의 다른 글

VBA. Cell 선택 - Addrress  (0) 2017.08.31
VBA. Cell 선택 - SpecialCells  (0) 2017.08.31
VBA. Cell 선택  (0) 2017.08.31
Posted by 농부지기
,

[ VBA. Cell 선택 - SpecialCells ]

 

1. 정의 

    - cell을 선택 시 특정조건에 맞는 Cell값을 기준으로 선택 한다.


2. 범례

    - expression.SpecialCells(Type, Value)

    - Columns("A").SpecialCells(XlSpecialCellsValue).Select

 

3. XlCellType 상수

     xlCellTypeAllFormatConditions.         -4172       모든 서식의 셀
     xlCellTypeAllValidation.                     -4174       유효성 조건이 있는 셀
     xlCellTypeBlanks.                             4              빈 셀
     xlCellTypeComments.                       -4144       메모가 들어 있는 셀
     xlCellTypeConstants.                       2               상수가 들어 있는 셀
     xlCellTypeFormulas.                        -4123        수식이 들어 있는 셀
     xlCellTypeLastCell.                          11             사용된 범위의 마지막 셀
    xlCellTypeSameFormatConditions.   -4173        같은 서식이 있는 셀
    xlCellTypeSameValidation.               -4175        같은 유효성 조건이 있는 셀
    xlCellTypeVisible.                             12             보이는 모든 셀

 

4. XlSpecialCellsValue

    - Value : Constants 

       16        xlErrors           :

       4          xlLogical         : 빈셀만 선택

       2          xlTextValues   : 공백을 제외한 숫자,문자 선택

       1          xlNumbers      : 숫자 선택

 

5. 예문

    Columns("A").SpecialCells(2).Select

    Range("A1:G10").SpecialCells(2).Select

    Set rngMyRange = Worksheets("Sheet7").Cells.SpecialCells(xlCellTypeFormulas)

 

6. 설명

     - SpecialCells(Type, Value) : arg가 2개 일 때는 Type, Value이고

     - SpecialCells(Value)           : arg가 1개 일 때는 Value만 이다.

 

 

 

'VBA (기본) > Cell 선택' 카테고리의 다른 글

VBA. Cell 선택 - Addrress  (0) 2017.08.31
VBA. Cell 선택 - End  (0) 2017.08.31
VBA. Cell 선택  (0) 2017.08.31
Posted by 농부지기
,

[ VBA. Cell 선택 ]

 

1. 정의

    - 특정위치의 Cell을 일정범위만큼 선택 한다.

 

2. 절대위치 선택 - 예문

    1. 정의

        - Cell의 좌표를 Sheet의 맨 왼쪽 상단꼭지점을 기준으로 위치를 기준으로 시작 좌표가 설정된다.

    2. Range("A3:A5").Select

    3. 아래 4개의 문장은 모두 동일하게 수행 됨

       Range("A1:B2").Select

       Range("A1", "B2").Select

       Range("A1:A2", "B1:B2").Select

       Range("B2", "A1").Select

   4. Range("A:C").Select : A~C열  Select

       Range("1:10").Select : 1행~10행 Select

   4. Cells(5).Select

       Cells(5,1).Select

 

3. 상대위치 선택 - 예문

    1. 정의

        - Cell의 기본좌표(절대위치)는 Sheet의 맨 왼족 상단 꼭지점이며 (0,0)이 된다.

        - 개발을 하다 보면  특정위치(상대위치), 선택되어 있는 위치를 기준(0,0)으로 위치를 이동해야 되는 경우가 있다.

        - 이때 '특정위치(상대위치), 선택되어 있는 위치'를 기준(0, 0)으로 다시 X,Y index가 설정 되도록 할 수 있다. 

          이를 상대위치라 한다.

 

    2. ActiveCell.Range("A3:A5").Select

    3. ActiveCell.Offset(1, 3).Range("A1:A4").Select

    4. ActiveCell.Offset(-1, -2).Range("A1:A8").Select

    5. Range("B3").Range("A2:C4").Select

    6. Selection.Offset(1, 0).Select

 

    7. Range("C2:D3").Cells(2).Select

    8. Range("C2:D3").Cells(5).Select

 

2. Range

    1. 예문 : Range("A3:A5").Select

        - Cell A3 ~ A5 까지 선택한다.

    2. 예문 : Cells(5,1).Select

        - Cells index 기본 : A1=1, A2=2, A3=3.....

        - Cell(행,렬), Cell (X, Y) 좌표가 적용 되어  E1 Cell을 선택 한다.

 

3. Activecell

    1. Activecell - Cell 하나만 Focus위치 시

        - Sheet에서 focus가 위치되어 있는 cell의 위치를 기준(0, 0)으로 좌표(cell index)가 설정된다.

        - 눈에 보이는 X측(A,B,C..), Y측(1,2,3...)의 좌표가 아니고 focus가 위치 되어 있는 cell을 기준으로

           X,Y좌표가 신규로 설정되어 Range()함수가 수행된다.

 

    2. Activecell - Cell 여러개 선택 시

        - cell 하나에만 focus가 있는 경우에는 위와 같이 좌표를 (0,0)으로 보면 되는데

           여러CELL을 선택 한 상태에서 ActiveCell를 수행하면 이상하게(?)좌표(Y,X)가 설정된다.

           사실 이상하게 설정되는게 아니고 Cell을 여러게 설정되어도 자세히 보면 여러Cell중에서

           하나의 cell만 Focus가 위치되어 있다.

           이 Cell을 기준으로 좌표(Cell Index)가 설정 된다.

 

3. Offset(Y,X)

    1. Range는 좌표가 ("XY:XY")로 되어 있는데 OffSet의 좌표(인자)는 (Y,X)로 되어 있다.

    2. ActiveCell를 기준으로 Offset좌표 (Y,X)만큼 이동 후

        이동된 좌표가 다시 (0, 0) 이 되고, Range()함수를 수행한다.

    3. Offset(1, 3) : ActiveCell을 기준 -> Y : 아래로 1칸,   X : 오른쪽으로 3칸 이동하여 기준 좌표가 된다.

    4. Offset(-1, -2) : ActiveCell을 기준 -> Y : 위로 1칸,   X : 왼족쪽으로 2칸 이동하여 기준 좌표가 된다.

 

3. Range("XY")

    1. Range("B3").Range("A2:C4")

    2. 앞쪽 Range의 좌표는 절대위치를 기준으로 시작되고,

        뒤쪽 Range의 좌표는 앞쪽 Range에서 선택된 좌표를 기준(0,0)(상대위치)으로 Cell Index가 시작 된다.

 

3. Selection.Offset(Y,X).Select

    1. 예문 : Selection.Offset(1, 0).Select

    2. Cell을 하나만 선택하고 있는 경우

        - 선택되어 있는 Cell을 기준으로 좌표가 시작(0,0)되고, Offset(Y,X)만큼 이동 후 선택 한다.

    3. Cell를 여러개 선택하고 있는 경우

        - 선택되어 있는 여러 Cell중에 맨 왼쪽 꼭지점이 좌표의 시작(0,0)이 된다.

          이 좌표(0,0)(상대좌표)를 기준으로 Offset(Y,X)좌표만큼 이동 후 선택한다.

           ** 중요 : 이때 선택이 한 Cell만 되는게 아니고 

                         처음 10개의 Cell를 선택하고 있었다면 이동후에도 10개의 Cell이 선택되어 진다.

 

3.  Range(좌표).Cells(index).Select

     1. Cells index 기본 : A1=1, A2=2, A3=3.....

         Range설정 후 Cells index 

              - 선택영역안에서 상대적으로 index가 설정되며

              - 만약, 이 영역을 넘어가는 index가 존재 시 아래쪽으로 index가 연속적으로 부여 된다.

                (아래 3. 예문 참조)

     2. 예문 : Range("C2:D3").Cells(2).Select

         - Cells(2) 는 X 좌표 2번째 Cells를 지칭한다.

           이때, 앞에 Range가 존재 하면 이 Range에 설정된 기준안에서 index가 새로 설정 된다.

           그래서 위 예문의 기준으로 Range("A1:B2")의 영역시 선택되고, 이 선택된 영역을 기준으로

           index가 설정되어  Cells(2)가 적용되면 D2 가 선택된다.

    3. 예문 : Range("C2:D3").Cells(5).Select

         - 이때 Cells의 index는 C2=1, D2=2,     C3=3, D3=4 이다.  이때 index 5부터가 이슈다.

            index 5부터는 선택된 영역 하단으로 해서 부여 된다.

            그래서, C4=5, D4=6,   C5=7, D5=8  ... 과 같이 index가 부여 된다.

         - 그래서 위 문장은 최종적으로 -> C4가 선택 된다.

'VBA (기본) > Cell 선택' 카테고리의 다른 글

VBA. Cell 선택 - Addrress  (0) 2017.08.31
VBA. Cell 선택 - End  (0) 2017.08.31
VBA. Cell 선택 - SpecialCells  (0) 2017.08.31
Posted by 농부지기
,

[ Nexacro-Grid. format ]

 

1. 정의

    - Grid를 개발하다 보면 dynamic하고 컬럼 추가/삭제를 하는 경우가 발생한다.

       이때 화면 open시점에 적용되어 가지고 있던 grid format을 알고 싶은 경우에 얻을 수 있다.

 

2. 예제 2)

    - 정의 : grid 현재 format 얻기

    - this.grd_name.getCurFormatString(true);

 

3. 응용예제)

    - 화면이 open될때  공통함수인 gfn_formOnload()함수에서  화면에 Grid 모두

       초기 format을 가지고 있다가 개발자는 언제든지 그 값을 가져다 사용할 수 도 있다.

    - 즉, gfn_formOnload()에서 모든 재귀 호출을 통해 모든component를 찾아 다니면서

      grid인 경우  this.grd_name.orgformatstring = objTarget.formats;

예제 1)

    - 정의 : grid 초기 format 얻기

    - var sOrgGridFormat = this.grd_name.orgformatstring;

    ....

    - var this.grd_name.set_formats(sOrgGridFormat );

'Nexacro-Grid > Grid' 카테고리의 다른 글

Nexacro.Grid - 간단 Tip 목록  (0) 2019.05.03
Nexacro.Grid - cell 좌표  (3) 2018.01.16
nexacro.Grid cell drag & drop  (0) 2017.03.30
Grid.sort 개발중  (0) 2017.02.24
Nexacro Grid - 한컬럼에 여러줄 보여주기  (0) 2017.01.22
Posted by 농부지기
,

[ Nexacro-FrameWork1. step9. 주요 소스]

 

 

1. FarmerMDIFrame.xadl 소스 

   

 

2. globalvars.xml

    

 

3. loginFrame.xfdl

   

 

4. leftMenuFrame.xfdl 소스

  

 

5. tabFrame.xfdl

   

 

6. topFrame.xfdl

   

 

7. workMain.xfdl

   
Posted by 농부지기
,

 

 

[ Nexacro-FrameWork1. step5.업무중 Frame hidden처리 ]

 

1. 정의
   . 업무도중 업무화면을 최대한 크게 보기 위해서 top frame, bottom Frame등을
     hidden처리 하고 싶은 경우가 존재 한다.

2. 개발방법
   . topFrame, bottomFrame hidden 처리
   . topFrame만 개발하고, bottomFrame은 과제

3. ADL applicaiton  script 수정
   1. application 변수 추가
this.av_topFrame;
  
   2. this.application_onloadingglobalvariables 에 한줄 추가
this.av_topFrame    = this.av_mainFrame.vStartFrameSet.vMainFrameSet.topFrame;


4. topFrame.xfdl 수정
   1. 버튼 하나 추가, Event하나 추가
      . id    : btn_control
      . Event : fn_control
      . Text  : 숨기기
      . position : 맨 오른쪽 하단
     
   2. script

this.fn_control = function(obj:Button,  e:nexacro.ClickEventInfo)
{
 var sText = this.btn_control.text;
 
 if (sText == "숨기기"){
  //(topFrame, 업무FrameSet, bottomFrame)
  //topFrame(11)을 한 이유는 '보여주기'버튼이 보이도록 하기 위함.
  //현재 개발은 일반button이지만 실 프로젝트에서는 'image'를 이용해서  숨기기/보여주기를 해야 됨
  application.av_allFrame.set_separatesize("11,*,50");
  this.btn_control.set_top(0);
  this.btn_control.set_text("보여주기");
 }else{
  application.av_allFrame.set_separatesize("50,*,50");
  this.btn_control.set_top(28);
  this.btn_control.set_text("숨기기");
 }
}

 

Posted by 농부지기
,

 

[ Nexacro-FrameWork1. step4.Frame에서 업무화면 함수호출 ]

 

1. 정의
   1. frame단에서 업무화면의 함수를 호출 하는 경우가 존재 한다.
      좋은 예로,  tabpage에서 [x]를 눌러 화면을 닫을 수 있는데
      만약, 화면에서 변경된 자료가 존재 할 경우는 닫지 않는 경우가 발생한다.
      이때 tabpage를 먼저 delete하고 화면을 받으려 하다고  자료 변경건으로
      화면을 닫지 못할 경우에 tabpage는 삭제 되고, 화면이 닫혀진 문제가 발생한다.
     
   2. 이런경우 개발방법은 화면에 존재하는 함수를 호출하여 화면을 닫을 수 있는지 검사하고
      닫을 수 있는 경우에만 tabpage도 삭제 한다.
     
2. tab.xfdl
   1. 업무화면.함수 호출
   2. button 1개, Event 1개 생성
      . id    : btn_fnCall
      . Event : btn_fnCall_onclick1
   3. btn_fnCall_onclick1 script
this.btn_fnCall_onclick1 = function(obj:Button,  e:nexacro.ClickEventInfo)
{
 application.afn_callFormFunction("fn_setOutEditBox", "top에서 호출");
}

3. ADL application script
   1. function 1개 생성
   2. script
this.afn_callFormFunction = function(sFuncNm, sArg){
 this.av_mdiFrameSet[application.gv_activeMenuId].form.fn_callFormFunction(sFuncNm, sArg);
}

4. workMain.xfdl 화면
   1. function 1개 생성
   2. 화면 호출함수가
   2. script
//application(frame)에서 업무화면의 함수를 호출하고 싶을 경우에 사용되는 function
this.fn_callFormFunction = function(sFuncNm, sArg){
 return eval("this.div_work." + sFuncNm).call(this.div_work, sArg);
}

5. commonCode.xfdl 화면
   1. edit box 1개, function 1개 추가
   2. Edit box
      . id : edt_out
      Funciton : fn_setOutEditBox()
   3. script
this.fn_setOutEditBox = function(args){
 this.edt_out.set_value(args);
 return true;
}

 

Posted by 농부지기
,

[ Nexacro-FrameWork1. step3.메뉴와 업무화면간 parameter 연동 ]

 

 

1. tabFrame.xfdl 화면
   1. 정의 : 화면을 open시 gds_menu.param 컬럼에 존재 하는 값을 업무화면에서 받아 사용하기
   2. 기존 fn_menuOpen() 함수 변경 (이미 존재)
      . 추가 script
        newChild.biz_param    = sParam;
      . 추가 위치
        newChild.biz_menuId   = sMenuId; -> script의 다음줄
2. workMain.xfdl 화면
   1. 기존 fn_onload()함수 변경 (이미 존재)
      . 추가 script
        this.fv_param  = this.getOwnerFrame().biz_param;
      . 추가 위치
        this.fv_menuId = this.getOwnerFrame().biz_menuId; -> script의 다음줄
   2. 2개 함수 생성
      . fn_getParam()  : 업무화면에서 호출되어 param 값을 넘겨줄 function
      . fn_getMenuId() : 업무화면에서 호출되어 menuId값을 넘겨줄 function
   3. script
  
//업무화면에서 parameter값을 얻고 싶을 경우 호출되는 function
this.fn_getParam = function(){
 return this.fv_param;
}
//업무화면에서 menuid를 얻고 싶을 경우 호출되는 function
this.fn_getMenuId = function(){
 return this.fv_menuId;
}

3. commonCode.xfdl 화면
   1. 정의 : 업무화면에서 menu에서 넘겨준 param값을 확인하기
   2. Event 1개 생성
      . fn_onload
   3. script

this.fn_onload = function(obj:Form, e:nexacro.LoadEventInfo)
{
 trace(this.parent.fn_getParam());
}

Posted by 농부지기
,