AutoHotkey는 스크립트 파일(*.ahk)을 작성한 뒤 그 스크립트를 더블클릭해서 바로 실행하는 방식으로 사용합니다.
즉, AutoHotkey 프로그램 자체로는 아무런 인터페이스가 없으며, 아무 에디터로 스크립트 파일을 작성해서 *.ahk로 저장한 뒤 필요할 때 더블클릭해서 사용하면 됩니다.
-> editor 설치로 거기서 작업
시작 : F5
사이사이 return을 넣어주여야함 동작의 끝을 표시하기 위한 것(기능 구분), 안넣으면 이상하게 동작할 수 있음, 정지상태 라고 보면 될듯
Gui show 로 시작하자
강좌 : https://pnal.kr/2
> 메시지박스
msgbox [, options, title, text, timeout] // timeout = sec단위 = 3초 = 3
- options
0 : 확인 버튼만 표시
1 : 확인 / 취소
2 : 중단 / 다시시도 / 무시
3 : 예 / 아니오 / 취소
4 : 예 / 아니오
5 : 다시시도 / 취소
6 : 취소 : 다시시도 / 계속
16 : 금지(x) 아이콘
32 : ? 아이콘
48 : 주의(!) 아이콘
64 : 정보(i) 아이콘
262144 : msgbox가 항상 위에 있도록
> 시간을 표시 하는 내장 변수
a_hour, a_min, a_Sec
> 핫키(단축키), 핫스트링 사용 (영어만 가능) , 상태표시줄에서 exit를 눌러야 꺼짐
단축키 :: {} // ex) enter::
btn:: // 이렇게 쓰면 enter누르거나 버튼 누를때 밑에 코드 실행
a & b :: // a 누른 상태에서 b 누른 경우
::문자열:: {} // ex) :*:iu:: , iu누르자마자 실행
ctrl : ^
shift : +
alt : !
windows : #
> GUI 사용하기
Gui, show, x위치 y위치 w너비 h높이, 타이틀 //ex) Gui, show, w300 h400, hi
GuiClose: ExitApp // 닫기했을때 스크립트 종료해주는 부분으로 필수로 작성해서 넣을 것
Gui, Add, 사용할 기능, 옵션,이름
- 사용할 기능 : text, button, edit, checkbox, combobox, dropdownlist, listbox
1. button
Gui, Add, button, 옵션, 이름
* 옵션에 gvar 쓰고후 밑에 var: 서브루틴 쓰면 버튼 클릭시 var라는 서브루틴으로 간다 라는 의미
2. text
Gui, Add, text, 옵션,이름
* 옵션 ex) x30 y5 w120 h20 vA
3. edit : 사용자로부터 받는 입력값 ,
3. Gui, Add, Edit, 옵션, 초기 값
* 옵션에 변수선언 : v반복횟수
4. check box
Gui, Add, checkbox, 옵션, 이름
* 옵션에 checked : 초기값이 체크 , 체크되면 1 아니면0이 v변수에 담김
5. combo box
Gui, Add, combobox, 옵션, 항목1|항목2..
* 높이(h)를 크게 설정 1개당20(999 넣어도 자동으로 맞춰짐), 옵션에 choose1 하면 초기값이 1번 , 변수이름="항목1"
6. dropdownlist
Gui, Add, dropdownist, 옵션, 항목1|항목2..
* combobox랑 같은 색만 다름 (검정)
7. listbox
Gui, Add, listbox, 옵션,, 항목1|항목2.
* v변수, g변수 둘다 사용해서 코드짤수 있음, 리스트박스 모두 지우기 : SendMessage, 0x184, , ,listbox1
함수 사용법 : ex) 이름이 시작이라는 버튼을 누를때 : button시작: {}
변수초기화 : 매크로시작 :=true
프로그램 종료 : ExitApp
> GUI 업데이트
GUI, submit, nohide
* gui의 내용을 가져와라 라는 의미 , 하나의 공식
GuiControl, SubCommand, ControlID [, Value]
- subcommand : 속성을 바꿀 경우 바꿀 속성을 입력
- controlID : 변형할 컨트롤의 v레이블
- value : subcommand 매개변수를 적어주었다면 속성값을, 적지 않았다면 컨트롤의 내용을 바꿔줌
focus, disable, enable, hide, show, delete, choose 등 여러가지 사용 가능
ex. 비활성 : GuiControl, Disable, 컨트롤의 v레이블 , 참고로 만들때 옵션에 disabled 쓰면 비활성화 상태로 나옴
활성 : GuiControl, enable, 컨트롤의 v레이블
- 내용을 바꿔주는 guicontrol
Guicontrol , , 컨트롤의 v레이블, 내용 , 버튼이름, 텍스트 등을 바꿀수 있고 리스트박스는 항목이 추가됨
* gui창 옵션 변경 , gui 맨위에 써줘야 작동함
Gui, +option1 -option2 ...
- option
+AlwaysOnTop : GUI창이 항상 위에 있도록 합니다.
-Border : GUI창의 테두리를 제거합니다.
-Caption : GUI창의 캡션을 제거합니다. (캡션은 타이틀바를 포함하는 부분입니다.)
+Resize : GUI창의 모서리를 잡고 크기를 조절할 수 있습니다.
+ToolWindow : 타이틀 바가 좁아지고, 최대화/최소화 버튼이 나타나지 않고 스타일이 조금 변경됩니다. 창은 항상 위에 있게 되며 작업 표시줄에 아이콘이 표시되지 않습니다.
> 좌표 설정
coordmode, targettype [, relativeto]
- targettype
pixel : PixelGetColor, PixelSearch, ImageSearch 명령어에서 적용
mouse : MouseGetPos, MouseClick, MouseMove 등 마우스 관련 명령어에서 적용
- relativeto
screen : 스크린좌표 (모니터기준 절대좌표)
relative : 상대 좌표
client : 위에 url 부분밑에부터 시작되는 좌표, 잘 안씀
* 따로 coordmode를 사용하지 않는다면 default는 상대좌표
* relativeto 생략하고 targettype만 쓴다면 default는 screen
- 특정 좌표 알아내는 법
바로가기 버튼 중 메모장에 돋보기 그려져있는거 선택하면 Active Window Info 창이 뜸 (Windows 검색에서 Window Spy를 쳐도 나옵니다)
> 이미지 찾기
ImageSearch, (찾은이미지) x좌표변수, (찾은이미지) y좌표변수, 찾기 x시작점, 찾기 y시작점, 찾기 x끝점, 찾기 y끝점, 옵션+파일위치+파일명
= ImageSearch, x 좌표변수, y좌표변수, 0,0, A_screenwidth, A_screenheight, 옵션+파일위치+파일명
- 이미지는 24비트 bmp 파일로 저장, png도 가능
- ImageSearch는 ErrorLevel을 반환함, 찾은 경우 0, 못찾은경우 1, 오류인 경우 2
- *50 은 정확도를 의미 , 높을수록 정확도가 떨어짐 (30~50 이 적당)
- %A_scriptDir%경로 : 스크립트가있는 경로, 사진이 스크립트와 같이 있는경우 %A_scriptDir%\사진이름 하면된다(아닐 경우 절대경로 기입), 절대 경로인 경우 경로에 공백 불가
> 픽셀 서치 (사용 방법은 이미지서치와 같음)
PixelSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ColorID [, Variation, Mode]
- ColorID : 찾을 색상 값을 16진수로 기입, RGB가 아닌 BGR로 써야함
(window spy에서 ABCDEF로 나온다면 0xEFCDAB라고 써줘야 함)
- mode : RGB라고 쓰면 RGB그대로 써줄수 있음, 앞에 0x만 붙이면 됨
Fast라고 쓰면 빨리 서치 가능
- errorlevel 사용가능, colorID 기입시 0x 반드시 기입!
> 픽셀 색 얻기
PixelGetColor, OutputVar, X, Y [, Mode]
- (X,Y)에 있는 코드를 OutputVar 변수에 담음
- mode
Alt : 만약 색상을 가져오지 못하는 경우 대체 방법으로 검색합니다.
Slow : 대체 방법들이 모두 실패하는 경우 전체화면 프로그램에서도 검색합니다.
RGB : OutputVar에 담기는 색상 코드가 BGR이 아닌 RGB로 담깁니다.
* slow와 alt를 같이 쓰면안됨
> send과 sleep
send : send, {기능+옵션}
마우스와 키보드를 입력할 수있는 명령어임
ex) send, {a} , 단순 문자도 가능
send, ^{C}
send, {enter}
* ! + ^ # 등 뭐든 그대로 출력하고 싶으면 sendRaw
* {A down}. {A up} 으로 눌렀을때, 떼졌을때를 따로따로 설정할 수 있다
* 방향키는 Up / Right / Left / Down이며, 넘버 패드는 Numpad(기호명)식입니다.
* 한영키는 {VK15}입니다.
* 조합키는 !a나 !{a}의 꼴 모두 허용합니다. 다만 말씀드렸다싶이 !A나 !{A}는 되지 않습니다. (조합시 무조건 소문자로)
* 키 이름 뒤에 숫자를 적어서 여러번 누르는 것을 구현할 수 있습니다 (Send, {A 5}는 A를 5번 누릅니다.)
- 키보드 control
GetKeyState("키이름" [,"T"])
1:누르상태/켠상태, 0:뗀상태/끝상태
KeyWait, a // a키 떼기를 기다림
KeyWait, a, D // a키 누르기 기다림
KeyWait, a, D T3 // 3초 타임아웃
- sleep
sleep : sleep, 대기시간(msec 단위)
> 마우스 컨트롤
- 마우스 움직이기
mousemove, X, Y [,speed, relative]
X,Y : 이동할 좌표
speed : 0~100 속도조절
relative : R을 쓰게되면 지정한 좌표 체계를 무시하고 현재 마우스 기준으로 함
- 마우스 클릭하기
mouseClick [, WhichButton, X, Y, ClickCount, Speed, DownOrUp, Relative]
WhichButton : left, right, middle 좌클릭, 우클릭, 가운데 클릭
X,Y : 좌표
clickcount : 클릭 횟수
* speed는 default가 2이고, 0은 즉시 이동
* WhichButton은 각각 L,R,M 으로 써도 동작함
* MouseClick의 모든 파라미터를 생략하면 Send, {LButton}과 동일
click 2 : 더블클릭
click down : 누른상태
click up right : 우측버튼 떼기
- 마우스 좌표 가져오기
mousegetpos [, OutputVarX, OutputVarY]
OutputVarX : 현재 마우스의 x좌표가 담김
OutputVarY : 현재 마우스의 y좌표가 담김
- 드레그 : MouseClickDrag, left, 0,0, 10,10
> 외부 프로그램 실행
Run, Target [, WorkingDir, Options, OutputVarPID] // 거의 첫번째 매개변수까지 사용
- target : 실행할 대상
외부 파일 : 파일의 경로
특정 사이트 : 인터넷 주소
> 비활성 창에 키입력 보내기
ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText] // 보통 wintitle 까지 씀 (띄어쓰기 하나까지 똑같이 써야함)
- Wintitle : 상단 타이틀바 이름 (프로그램 구분할 때)
- control : classNN 적으면 됨
- ClassNN : 프로그램 가리키지만 프로그램 내 요소를 가리킬 수 있음 (ex, 체크박스, 텍스트, 버튼 등), 이 것들을 컨트롤이라고 하는데 컨트롤에 주어진 이름이 classNN
ex) chk3 클릭해줘, edit2에 글씨 써줘 , winspy에 나와있음
- keys : 보낼 키 (send처럼 사용)
- wintitle : wintitle 적으면 됨
ControlClick [, Control-or-Pos, WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText]
보통 ControlClick [, Control-or-Pos, WinTitle, , , , Options] 이렇게 씀
- Control-or-Pos : classNN 쓰거나 클릭할 좌표의 상대좌표 기입 (ex . X1003 Y487)
- options : NA 기입 , 사용자의 물리적 마우스 클릭과 별도로 분리되기 때문에 마우스클릭이 의도한 대로 되지 않으면 넣기
ControlSetText [, Control, NewText, WinTitle, WinText, ExcludeTitle, ExcludeText]
보통 ControlSetText [, Control, NewText, WinTitle]
- control : 바꿀 글씨가 있는 컨트롤의 classNN
- newtext : 바꿀 글씨
> 반복문
Loop: Loop,반복횟수 {}
while(조건) {}
for key, value in 문자열이름 // key는 하나씩 증가하는 값
*탈출은 break, 반복분 2개 탈출하고 싶을땐 break, 2
> if 사용법
if(조건) {} else if {} else {}
ex)
국어:=95, 이름:="송민석", 숫자=3, 확장자:="exe"
if 국어 between 90.5 and 99.9 ;사이에 [not] between A and B
msgbox 잘했어요
if 이름 between 김현수 and 유재석
msgbox 유재석보다 빠른이름
if 숫자 is integer ;is [not] integer/float/number/digit/xdigit/alpha/upper/lower/alnum/space/time
msgbox 정수
if 확장자 in exe,bat,com ;일치 [not] in A,B,C,...
msgbox 실행파일
if 이름 contains 송,김 ;포함 [not] contains A,B,C,...
msgbox 송 또는 김 포함
> 서브 루틴
goto, 레이블 // 서브루틴 호출
gosub, 레이블 // 서브루틴 호출 후 다시 돌아옴 , 조이 R
레이블명: , ex) 70번째 줄에 label 이라는 레이블이 있다면, 70번쨰줄 이라고 부를 수도 있지만 label 이라고 부를 수 도 있다
** 되도록이면 쓰지 않는 것을 추천, 다른 간결한 코드로 대체 가능
> 주어진 문자열 내 특정 문자열이 있는지 알아내기
IfInString, Var, SearchString // else 사용 가능
{
// 참일경우
}
var : 찾아질 문자열이 담긴 변수의 이름(전체문장). %기호는 쓰지 말아야합니다.
SearchString : 찾을 문자열. 따옴표는 쓰지 않아야합니다.
- 특정 문자열이 없는지 알아냄
IfNotInString, Var, SearchString
> 문자열 컨트롤
- 길이 갯수 반환
strlen() // 문자열은 ""로 감싸기
- 문자열 잘라서 가져오기
SubStr(String, StartingPos [, Length])
string : 문자열이 담긴 변수명
StartingPos : 잘라낼 문자열의 시작위치 (글자수) , 0 부터 시작 안함 주의! , -사용 가능 (ex. -1 = 맨끝글자)
Length : 잘라낼 문자열의 길이. 쓰지 않으면 문자열의 끝까지 잘라냅니다.
- 문자열 자르기
StrSplit("빨강/노랑/파랑", "/") , s[1]→빨강, s[2]→노랑, s[3]→파랑 s.MaxIndex()→3
- 배열 만들기
- 기본 배열
obj : = [ "value1" , "value2", "value3"]
obj : = Array ( "value1", "value2", "value3")
추가 : obj.Insertat(1,"imavalue") , index 1번자리에 추가하겠다
붙이기 : obj.push("imcome","metoo")
제거 : obj.removeat(1) , index 1번자리 지우겠다
출력 : MsgBox,% obj[1]
마지막 값 출력 : MsgBox, % obj.pop()
배열 길이 : obj.length()
- 연관 배열
testArray := {thiskey : "thisvalue"}
msgbox, % testArray.thiskey -> thisvalue 나옴
testArray := object("thiskey" ,"thisvalue")
msgbox, % testArray.thiskey -> thisvalue 나옴 , 위에꺼랑 같은 거임
** 특이하게도 배열처럼 적은 순서대로나오는게 아니라 내림차순으로 sort되서 출력됨
- 정수 소수점 자르기
floor(변수)
- 문자열 끊어서 읽어오기
Loop, Parse, InputVar [, Delimiters, OmitChars]
Loop, Parse를 한 구문으로 외워두세요.
InputVar : 문장이 담긴 변수를 써줍니다. 변수를 쓰는 칸이기 때문에 %기호를 쓰지 않습니다.
Delimiters : 어떤 문자열로 구분할 지 적어줍니다.
ex) var := "동해물과 백두산이 마르고 닳도록"
Loop, Parse, var, %A_Space% , 내장변수 A_space = 스페이스바로 입력한 공백을 의미
MsgBox, %A_LoopField% , 내장변수 A_loopfield = 구분된 문자열이 담기는 일종의 출력 변수
> 파일을 다루는 명령어
- 파일 생성
FileAppend [, Text, Filename, Encoding]
text : 작성할 내용
filename : 파일의 경로를 포함한 텍스트 파일의 이름입니다.(default 상대경로) 경로에 해당 파일이 없다면 파일을 생성합니다.
Encoding: 작성 할 문자의 인코딩입니다. 보통 생략하는 경우가 많으나, 특정 문자가 깨질 시 UTF-16이나 UTF-8 등을 써주시면 됩니다.
- 파일 삭제
FileDelete, FilePattern
FilePattern : 삭제 파일의 패턴 , FilePattern 매개변수에는 파일의 경로를 써주시면 되고, 와일드 카드를 뜻하는 *를 이용하여 특정 규칙의 파일만 지울 수 있습니다.
- 파일 읽기
FileRead, OutputVar, Filename
OutputVar : 파일의 내용이 담길 출력 변수입니다.
FileName : 읽어올 파일의 경로입니다.
- [ErrorLevel에 따른 FileRead 성공 여부]
0: 정상적으로 읽어온 상태
1: 파일이 없는 상태
2: 읽기 권한이 없거나 잠겨있는 상태
3: 메모리 부족
- 파일 한줄만 읽기
FileReadLine, OutputVar, Filename, LineNum
OutputVar : 특정 줄의 내용이 담길 출력 변수입니다.
FileName : 읽어올 텍스트 파일의 경로입니다.
LineNum : 몇 번째 줄을 읽어올 지 정할 수 있습니다.
- [ErrorLevel에 따른 FileReadLine 성공 여부]
0: 성공.
1: 해당하는 줄을 읽을 수 없음.
여기까지의 모든 GUI ex
Gui, add, text, x30 y5 w120 h20, 매크로 프로그램
Gui, add, text, x60 y25 w50 h20 vA, 준비
Gui, add, text, x60 y50 h20 w50 vB, 0회
Gui, add, text, x60 y80 h20 w50 vC, 0회
Gui, add, button, x20 y110 w110 h20, 시작
Gui, add, button, x20 y140 w110 h20, 종료
Gui, show
매크로시작 := false
return
Button시작:
{
Gui, submit, NoHide
Guicontrol, ,A, 시작
매크로시작 := true
클리어횟수 := 0
못찾은횟수 := 0
CoordMode, pixel, screen
CoordMode, mouse, screen
Loop
{
ImageSearch, ffX,ffY,0,0,A_Screenwidth, A_screenheight, *30 C:\Users\이주한\Documents\AutoHotkey\sample.bmp
if (ErrorLevel = 0)
{
send {Click %ffX% %ffY%}
sleep, 1500
클리어횟수 := 클리어횟수 +1
Gui, submit, nohide
GuiControl, , B, %클리어횟수% 회
}
if (ErrorLevel = 1)
{
못찾은횟수 := 못찾은횟수 +1
Sleep, 1500
Gui, submit, nohide
GuiControl, , C, %못찾은횟수% 회
}
if(매크로시작 = false)
{
break
}
}
}
return
Button종료:
{
매크로시작:= false
ExitApp
}
return
> 함수사용
함수이름() {}
함수 안에서 쓰인 return은 반환
** 정규식을 맨 마지막에 구글에 검색해서 알아보기
> 엑셀 사용하기
- 엑셀 생성
Xl := ComObjCreate("Excel.Application") ;handle
Xl.Visible := True ;by default excel sheets are invisible
Xl.Workbooks.Add ;add a new workbook
- 엑셀 불러오기
Indexpath:= A_WorkingDir . "\autosample.xlsx"
IndexExcel := ComObjCreate("Excel.Application") // 오브젝트생성
IndexExcel.Workbooks.Open(Indexpath) // 엑셀열기
IndexExcel.Visible:=true // 육안으로 보이게할지 설정
- 값 입력 & 불러오기
Xl.range("A1").value := 값
Xl.range("A1:B12").value := 값
Xl.range("A:A").value := 값 // A열 전체
Xl.Sheets("폴더별목차").Range("B1").Value
* 값 불러올때 A1 ~ A12 가져오고 싶다하면 반복문 사용해서 가져와야함
- 값 지우기
Xl.ActiveSheet.Range("B:B").Delete
- 행 삭제
selection_row := oWorkbook.activesheet.Application.Selection.Row
oWorkbook.activesheet.Range( selection_row ":" selection_row ).Delete[-4162]
oWorkbook.activesheet.Application.Selection.Delete[-4162] // 내역 및 칸까지 없애기 (행은 아님)
- 반복문 사용 법
1) value := 1
while (Xl.Range("A" . A_Index).Value = "") {
Xl.Range("A" . A_Index).Value := value
}
2) Row := "2"
Columns := Object(1,"z",2,"B",3,"C",4,"D",5,"E",6,"F",7,"G",8,"H",9,"I",10,"J",11,"K",12,"L",13,"M",14,"N",15,"O",16,"P",17,"Q") ;array of column letters
For Key, Value In Columns
XL.Range(Value . Row).Value := value // 특이하게도 (Value . Row) 이부분에 있는 띄어쓰기를 안쓰면 오류뜸, A2 B2 이렇게 찍히는 부분
=> Xl.range("B" . 1).value = 값 // B1에 값을 넣어라라는 뜻, 위에는 이걸 반복문으로 응용한 것
- 값 복사하기
Xl.Range("A:A").Copy // 클립보드에 복사됨 , 1만줄짜리도 복사 붙여넣기 됨
Xl.Range("B:B").PasteSpecial(-4163) // 붙여넣기 , -4163은 상수로 인거 같음
Xl.CutCopyMode := False // 선택해제 , 복사하면 셀 선택되니까
- 시트 복사
Xl.Cells.Select
Xl.Selection.Copy
Xl.Sheets("폴더이동").Select
Xl.ActiveSheet.Paste
- 다른 파일에 넣기
(앞에 기존 파일과 새파일 만들고)
Xl2.range(row2).copy // row2는 셀 적어주면 됨
Xl3.range("B1").PasteSpecial(-4163)
- 형식 바꾸기
Xl.Range("A:A").NumberFormat := "@" // 형식을 텍스트로 바꿔라
- 저장하기
Xl_Workbook := Xl.Workbooks.Open(파일 경로)
Xl_Workbook.Save()
- 다른 이름으로 저장 (test2라는 이름으로 저장)
Xl.ActiveWorkbook.SaveAs(A_WorkingDir . "\test2.xlsx" ) ;
- 엑셀 종료
Xl.ActiveWorkBook.Close
Xl.Quit
- 셀 꾸미기
Xl.Range( "A1:A3").Interior.ColorIndex := 19 // 사실 이거밖에 안쓸 듯함
Xl.Range( "A3").Borders(8).LineStyle := 1
Xl.Range( "A3").Borders(8).Weight := 2
Xl.Range( "A3").Font.Bold := 1
Xl.Range( "A3").Font.ColorIndex := 19
- 색상표
Auto 0
Black 1
White 2
Red 3
Bright Green 4
Blue 5
Yellow 6
Pink 7
Turquoise 8
Dark Red 9
Green 10
Dark Blue 11
Dark Yellow 12
Violet 13
Teal 14
Grey 25 15
Grey 50 16
- 열 넓이 조절
Xl.Columns("A").ColumnWidth := 40
- 수식 넣기
Xl.Range( "H3").Formula := "=SUM(A1:A2)"
- 시트 추가
Xl.Sheets.Add
Xl.Sheets("Sheet1").Select
- vlookup 중복 될때
=INDEX($C$3:$C$4940,MATCH(A3&B3,$A$3:$A$4940&$B$3:$B$4940,0))
//index(얻고 싶은데이터, match(비교값1&비교값2,비교값1있는열&비교값2있는열,비교값없으면 0))
- autofilter 거는법
Xl2.range("A:A").autofilter(1,"a") // a열 에서 문자 a로 필터링한다
Xl2.range("A:C").autofilter(2,"a") // a~c 열에서 2번째인 b열을 문자 a로 필터링한다
Xl2.range("A:C").autofilter(1,"a")
Xl2.range("A:C").autofilter(2,"b") // A~C 열에서 A열은 a로 필터링하고, b열은 b로 필터링한다
- 셀 병합 & 셀 분리
XL_Merge_Cells(Xl2,RG:="E:F",Warn:=1,Merge:=0) // merge = 0 이면 셀 분리, 1이면 셀 합체
XL_Merge_Cells(PXL,RG,warn=0,Merge=0) ;default is unmerge and warn off
{
PXL.Application.DisplayAlerts := warn ;Warn about unmerge keeping only one cell
PXL.Application.ActiveSheet.Range(RG).MergeCells:=Merge ;set merge for range
(warn=0)?(PXL.Application.DisplayAlerts:=1) ;if warnings were turned off, turn back on
}
- 하이퍼링크 제거
Xl4.Range("M:Q").hyperlinks.Delete
- 열의 마지막 값 구하기 & 열 갯수
xl2.cells(xl2.rows.count, "M").end(-4162).value
xl2.cells(xl2.rows.count, "M").end(-4162).row
'ETC' 카테고리의 다른 글
python 3.x 버전과 2.x 버전 같이 사용하기 (0) | 2022.04.22 |
---|---|
Window 10 설정들이 느리게 로딩되거나 정상 작동이 안될 때 (0) | 2022.02.02 |
SSL "연결이 비공개로 설정되어 있지 않습니다" 해결방법 (0) | 2021.12.21 |
버프에서 request 암호화 되어있을 시 방법 (0) | 2021.12.18 |
회사에서 python 모듈 다운로드 하기 (0) | 2021.11.19 |