엑셀 VBA 폴더 여부 확인

학습/엑셀 VBA|2012. 11. 15. 19:38
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
오랫만에 글을 쓰네요

VBA에서 폴더가 있는지 없는지 여부를 알려면!!!!


Dir 기능을 사용하면 된다.


  Dir("폴더 경로",vbDirectroy)   '폴더 경로에 폴더가 있으면! 폴더명을 리턴하고, 없으면 ""값을 리턴한다. 



만약 C:\Err 란 폴더에 파일을 복사하고 싶은데.. 폴더가 있는지 없는지 모르겠다면 아래와 같이 작업하면 된다.


 if (Len(Dir("C:\Err",vbDirectroy)) <= 0 )

'폴더가 없다는 이야기입니다. 폴더를 생성하죠

MkDir("C:\Err")

end if




Dir 펑션은 그저 폴더만 아니라 각종 파일 형태를 확인할 수 있습니다.

뒤에 옵션을 수정해서 사용하시면 됩니다.

옵션은 아래와 같습니다.



 Constant

 설명 
 vbnormal  Default. Specifies files with no attributes.
 vbReadOnly  Specifies read-only files in addition to files with no attributes.
 vbHidden  Specifies hidden files in addition to files with no attributes.
 vbSystem  Specifies system files in addition to files with no attributes.
 vbVolume  Specifies volume label; if any other attribute is specified, vbVolume is ignored.
 vbDirectory  Specifies directories or folders in addition to files with no attributes.
 vbArchive File has changed since last backup.
 vbAlias File has a different name.



더 상세한 내용은 msdn을 참조


http://msdn.microsoft.com/en-us/library/dk008ty4(v=VS.71).aspx



댓글()

엑셀 VBA 속도 향상! (서식계산 옵션 VBA로 변경하기)

학습/엑셀 VBA|2011. 12. 23. 17:11
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
오랫만에 글을 남기네요;;

VBA로 데이터를 자동으로 기록 수정하는 것들을 할 때마다 여러개의 값을 변경하는 경우들이 생깁니다.

그럴 경우에는 FOR문을 막 돌리면서 시트의 데이터를 수정하게 되지요

근데... 문제는 시트에 수식이 걸려져 있을 경우 엄청나게 느려진다는 것입니다!

그럴 경우에는 아래처럼 옵션 변경을 이용하세요.

'함수 시작부분에는...
Application.Calculation = xlCalculationManual

'끝날 때에는
Application.Calculation = xlCalculationAutomatic


위의 내용은 엑셀의 자동 수식 계산을 껏다가 다시 키는 옵션입니다.
이런 옵션을 키면 왜 빨라지느냐?

엑셀에서 수식자동 계산 옵션이 켜져 있을 경우에 
데이터가 하나 변경되게 되면, 거기에 연결된 모든 수식 테이블을 다시 계산하도록 합니다.

그런데.. VBA로 각 값을 하나씩 수만번 되돌리면서 고치고 있다면...
거기에 연결된 수식들도 다시 수만 번 반복하고 있다는 이야기지요;;;

그러니깐 함수를 이용하기 전에 잠시 옵션을 껏다가 다시 키는겁니다.

>ㅁ</ 전 이거 몰라서 매일 옵션을 서식 수동 계산으로 해놓고 쓰고 있었죠;;;

그러다가 실수로 옵션이 변경되면...... WHAT THE FUCK!!!

ㅎㅎ 함수마다 위의 옵션을 붙여놓으면 그런 일은 벌어지지 않겠죠.  :)



댓글()

엑셀 오늘 날짜 기록

학습/엑셀 VBA|2011. 7. 13. 13:44
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

엑셀에서 오늘 날짜를 알고 싶을 때!

=Today() 라고 입력하면 된다.

VBA를 이용해서 오늘 날짜를 기록하고 싶을 때에는 아래와 같은 방법을 쓰면 된다.

Range("A1").Value = Date
Range("B1").Value = Time

Date와 Time은 현재 시간과 날짜를 반환해 주는 함수다~
Time은 시간 변경도 할 수 있는데, 변경을 하면 컴퓨터의 시간이 변경된다.

VBA로 수정할 때마다 각각의 버젼을 기록하게 하여 관리하는 방법으로 주로 사용하면 편리하다~
(뭐 저장할 때마다 기록한다던지...)

댓글()

엑셀 VBA를 이용해서 다른 프로그램 실행시키기

학습/엑셀 VBA|2011. 5. 16. 09:33
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


Excel VBA를 이용해서 다른 외부 프로그램을 실행시키는 법입니다.

아래와 같이 따라하면 간단!

------------------------------------------------------
sProgPath = "D:\TestPorg.exe"                  '실행시킬 파일 경로입니다.
Proc = Shell(sProgPath, vbNormalFocus)     '파일 실행!!
------------------------------------------------------



실행과 동시에 어떤 파일을 읽어드리는 작업을 하고 싶다하시면 아래와 같이 해주세요.
'notepad로 테스트 텍스트 파일을 읽고 싶다' 할 때는 아래와 같이 해주세요.

---------------------------------------------------------
sProgPath = "notepad.exe"       '실행시킬 파일 경로입니다.
sFileName = "test.txt"                      '실행할 파일입니다.
sFilePath = "D:\"                            '실행할 파일 경로입니다.

Proc = Shell(sProgPath & sFilePath & sFileName, vbNormalFocus)
---------------------------------------------------------



엑셀로 작업하면서 외부 툴을 열거나 오픈할 때에 귀찮으므로
따로 버튼들을 만들어 놓고 누를 때마다 열리게 하면
좀 더 파일을 쉽게 관리할 수 있어요

아래와 같이 특정 셀 영역을 참조하게 해서 열리게 하는 것도 편리하죠!

----------------------------------------------------------
sProgPath = Range("ToolFilePath").Value()
sFilePath = Range("BinFilePath").Value() & "\"
sFileName = Range("BinFileName").Value()

Proc = Shell(sProgPath & sFilePath & sFileName, vbNormalFocus)
----------------------------------------------------------

댓글()

[엑셀]VBA를 이용해서 Text 파일 읽기 (UTF-8 파일 읽기)

학습/엑셀 VBA|2011. 5. 12. 15:41
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

VBA을 이용해서 Text 파일 (혹은 Xml등등)을 읽는 방법입니다.

보통 VBA의 FileSystem을 이용한 [Open / Close를 활용 한 방법이 있습니다. 
(구글링 및 네이버를 이용해서 쉽게 찾을 수 있습니다.)

하지만 FileSystem은 ASCII 형태로 저장이 되어 일부 프로그램에서 로드할 때 깨지거나,
문제점이 발생할 수 있습니다. 
(회사에서 UTF-8 형태로 모두 바꾸는 바람에 기록 방법을 바꾸어야 했어요 ㅠㅠ)

이 때에는 Stream을 이용해서 File을 읽을 수 있습니다.

'Stream의 생성

Dim stmFileControl As Stream       'Stream 인자 생성
Set stmFileControl = New Strem     'Stream 저장공간 배치

stmFileControl .Open
stmFileControl.Position = 0             '기록, 혹은 읽을 위치를 0으로 맞춘다.
stmFileControl.Charset = "UTF-8"                   '저장시 [UTF-8]로 읽거나 저장합니다.

'Stream에 파일 읽기

Stream.LoadFromFile("C:\Text.txt")
'C:\Text.txt에 파일을 읽겠다는 선언을 합니다.

sStr = LuaStream.ReadText()
'이전에 LoadFromFile로 선언한 C:\Text.txt에서 글자를 모두 읽어옵니다.

'Stream에서 파일로 저장


stmFileControl.SaveToFile "C:\Test.txt", adSaveCreateOverWrite
'C:\Test.txt에 저장(혹은 생성)하겠다는 것입니다.
'adSaveCreateOverWrite가 해당 옵션을 선택하는 것입니다. (다른 옵션도 있겠지만.. 확인하지 않았어요..

stmFileControl.Close
'stmFileControl을 닫습니다.


각 생성 및 소멸을 함수로 묶어서 만들면 편하게 사용할 수 있습니다. : )


--참고하세요!!--
Stream을 사용하려면
Microsoft ActiveX DataObject 2.8(이상)을 사용할 수 있어야 합니다.
VBA에서  [도구>참조] 를 눌러서 위의 라이브러리를 추가해주세요.

그냥 일반적으로 사용하는 Text형식은 아래와 같습니다.
stmFileControl.Charset = "euc-kr"                  '저장시 [euc-kr8]로 저장합니다.

-- UTF-8로 기록하는 방법 --
http://it205.tistory.com/entry/VBA에서-Text-파일-저장하기-UTF-8-로-저장하기

댓글()

[엑셀 VBA] ASCII 코드 목록

학습/엑셀 VBA|2011. 5. 6. 14:02
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

그냥 엑셀을 사용하면서 필요한 아스키 코드를 정리!!

아.. VBA에서 사용하기 위해선 Chr()에 넣어서 쓰는겁니다!!

*참고 Alt+Enter를 통한 줄바꿈 :                   Chr(10)
*Text 파일 등에서 사용하는 줄바꿈(Enter) :  Chr(13)

막상 찾으려니깐 힘드네요;;

1. 인쇄 불가능한 ASCII 제어문자들

10진수 문자 10진수 문자
0 NUL(null) 16 DLE(data link escape)
1 SOH(start of heading) 17 DC1(device control 1)
2 SOX(start of text) 18 DC2(device control 2)
3 EOX(end of text) 19 DC3(device control 3)
4 EOT(end of transmission) 20 DC4(device control 4)
5 ENQ(inquiry) 21 NAK(negative acknowledge)
6 ACK(acknowledge) 22 SYN(synchronous idle)
7 BEL(bell) 23 ETB(end of transmission block)
8 BS(backspace) 24 CAN(cancel)
9 HT(horizontal tab) 25 EM(end of medium)
10 LF(NL line feed/new line)
라인 바꾸기
26 SUB(substitute)
11 VT(vertical tab) 27 ESC(escape)
12 FF(form feed/new page) 28 FS(file separator)
13 CR(carriage return) 29 GS(group separator)
14 SO(shift out) 30 RS(record separator)
15 SI(shift in) 31 US(unit separator)

2. 인쇄 가능한 ASCII 제어문자들

10진수 문자 10진수 문자
  32   공백   80   P
  33   !   81   Q
  34   "   82   R
  35   #   83   S
  36   $   84   T
  37   %   85   U
  38   &   86   V
  39   '   87   w
  40   (   88   X
  41   )   89   Y
  42   *   90   Z
  43   +   91   [
  44   ,   92   \
  45   -   93   ]
  46   .   94   ^
  47   /   95   _
  48   0   96   `
  49   1   97   a
  50   2   98   b
  51   3   99   c
  52   4   100   d
  53   5   101   e
  54   6   102   f
  55   7   103   g
  56   8   104   h
  57   9   105   i
  58   :   106   j
  59   ;   107   k
  60   <   108   l
  61   =   109   m
  62   >   110   n
  63   ?   111   o
  64   @   112   p
  65   A   113   q
  66   B   114   r
  67   C   115   s
  68   D   116   t
  69   E   117   u
  70   F   118   v
  71   G   119   w
  72   H   120   x
  73   I   121   y
  74   J   122   z
  75   K   123   {
  76     124   |
  77   M   125   }
  78   N   126   ~
  79   O   127   DEL


3. 확장 ASCII 문자


10진수 문자 10진수 문자
  128   Ç   192  
  129   ü   193  
  130   é   194  
  131   â   195  
  132   ä   196  
  133   à   197  
  134   å   198  
  135   ç   199  
  136   ê   200  
  137   ë   201  
  138   è   202  
  139   ï   203  
  140   î   204  
  141   ì   205  
  142   Ä   206  
  143   Å   207  
  144   É   208  
  145   æ   209  
  146   Æ   210  
  147   ô   211  
  148   ö   212   Ô
  149   ò   213  
  150   û   214  
  151   ù   215  
  152   ÿ   216  
  153   Ö   217  
  154   Ü   218  
  155   ¢   219  
  156   £   220  
  157   ¥   221  
  158     222  
  159   ƒ   223  
  160   á   224   α
  161   í   225   ß
  162   ó   226   Γ
  163   ú   227   π
  164   ñ   228   Σ
  165   Ñ   229   σ
  166   ª   230   µ
  167   º   231   τ
  168   ¿   232   Φ
  169     233   Θ
  170   ¬   234   Ω
  171   ½   235   δ
  172   ¼   236  
  173   ¡   237   φ
  174   «   238   ε
  175   »   239  
  176     240  
  177     241   ±
  178     242  
  179     243  
  180     244  
  181     245  
  182     246   ÷
  183     247  
  184     248  
  185     249  
  186     250   ·
  187     251  
  188     252  
  189     253   ²
  190     254  
  191     255   

댓글()

[엑셀VBA] 디렉토리에서 파일 이름 리스트 가져오기!

학습/엑셀 VBA|2011. 5. 4. 17:53
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

가끔 엑셀에서 파일 이름 리스트를 가져올 필요가 있다.
(파일 관리라던가 버젼 관리라던가..)
그거 할 때 쓸만한 함수

Sub DirFileList()

Dim fileList() As String
Dim fName As String
Dim fPath As String
Dim i As Integer
Dim startrow As Integer
Dim ws As Worksheet
Dim filetype  As String

'셀에 항목으로 경로입력이 필요함을 통보
Range("C2").Select
fPath = "D:\Data\"
'셀에 항목으로 확장자입력이 필요함을 통보
filetype = "*"

 

startrow = 2    'starting row for the data
fName = Dir(fPath & "*." & filetype)

While fName <> ""
    i = i + 1
    ReDim Preserve fileList(1 To i)
    fileList(i) = fName
    fName = Dir()
Wend


If i = 0 Then
Range("F2").Select
    ActiveCell.FormulaR1C1 = "No Files Found!"
    Exit Sub
End If
For i = 1 To UBound(fileList)
    ws.Range("A" & i + startrow).Value = fileList(i)
Next
Columns(1).AutoFit

End Sub

다른 분이 만드신건데..
출처를 모르겠네요;;;
본 제작자 분이 보시거나 아시면 연락을;;;;

댓글()

[엑셀]VBA에서 Text 파일 저장하기 (UTF-8 로 저장하기)

학습/엑셀 VBA|2011. 4. 19. 20:08
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


VBA을 이용해서 Text 파일 (혹은 Xml등등)을 저장하는 방법입니다.

보통 VBA의 FileSystem을 이용한 [Open / Close를 활용 한 방법이 있습니다. 
(구글링 및 네이버를 이용해서 쉽게 찾을 수 있습니다.)

하지만 FileSystem은 ASCII 형태로 저장이 되어 일부 프로그램에서 로드할 때 깨지거나,
문제점이 발생할 수 있습니다. 
(회사에서 UTF-8 형태로 모두 바꾸는 바람에 기록 방법을 바꾸어야 했어요 ㅠㅠ)

이 때에는 Stream을 이용해서 File을 생성 기록 할 수 있습니다.

'Stream의 생성

Dim stmFileControl As Stream       'Stream 인자 생성
Set stmFileControl = New Strem     'Stream 저장공간 배치

stmFileControl .Open
stmFileControl.Position = 0             '기록, 혹은 읽을 위치를 0으로 맞춘다.
stmFileControl.Charset = "UTF-8"                   '저장시 [UTF-8]로 저장합니다.

'Stream에 기록

stmFileControl.WriteText("기록값을 String으로 넣습니다." & sString & " &로 묶어도 되요")

'Stream에서 파일로 저장

stmFileControl.SaveToFile "C:\Test.txt", adSaveCreateOverWrite
'C:\Test.txt에 저장(혹은 생성)하겠다는 것입니다.
'adSaveCreateOverWrite가 해당 옵션을 선택하는 것입니다. (다른 옵션도 있겠지만.. 확인하지 않았어요..

stmFileControl.Close
'stmFileControl을 닫습니다.


각 생성 및 소멸을 함수로 묶어서 만들면 편하게 사용할 수 있습니다. : )


--참고하세요!!--
Stream을 사용하려면
Microsoft ActiveX DataObject 2.8(이상)을 사용할 수 있어야 합니다.
VBA에서  [도구>참조] 를 눌러서 위의 라이브러리를 추가해주세요.

--2011년 5월 추가 내용
그냥 일반적으로 사용하는 Text형식은 아래와 같다. 
stmFileControl.Charset = "euc-kr"                  '저장시 [euc-kr8]로 저장합니다.

댓글()

엑셀 값만 복사하기! (VBA을 이용한 복사영역 조절)

학습/엑셀 VBA|2011. 3. 22. 23:25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


엑셀을 사용하다가 복사를 하고 싶은데.. 서식이 언제나 같이 붙어서 다닌다.
특히 표를 만들어 두었는데 표의 테두리가 같이 따라오는 것이 영 불편하다..
뭐... 핫키를 이용해서 사용할 수도 있고, 붙여넣기 옵션이 있지만..



영 불편하다..

그래서 VBA으로 복사영역을 따오고.. 값만 현재 선택한 셀에 붙여넣기 하려고 Script를 작성했다.


Sub CopyValues()

ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone, SkipBlanks:=True

End Sub

ActivCell은 현재 선택된 Cell을 의미하고
PasteSpecial은 복사영역을 가져온다

그냥 복사하기 위해서는
Active.PasteSpecial를 사용하면 된다.

그래서 옵션으로

Paste:=xlPasteValues 값을 지정하게 된다.
그러면 값만 복사해주게 된다.

뭐.. 그냥 편히 쓰고 싶으시면 위의 매크로를 Copy&Paste하시고,
매크로를 등록하고 Ctrl + B 정도의 핫키를 쓰시면 됩니다.
(다만 사용시에 복사영역이 없을 경우에는 오류를 출력합니다;;)

==아래는 조사하면서 알게 된 PasteSpecial의 매개변수이다. ==

Paste
붙여넣을 값을 정의하는 부분이다.

xlPasteAll
xlPasteColumnWidths
xlPasteComments
xlPasteFormats
xlPasteFormulas
xlPasteFormulasAndNumberFormats
xlPasteValidation
xlPasteValues
xlPasteValuesAndNumberFormats
xlPasteAllExceptBorders
msdn 설명글 주소
http://msdn.microsoft.com/ko-kr/library/microsoft.office.interop.excel.xlpastetype(VS.80).aspx

Operation
붙여넣기할 때 하는 작업 방식이다.
xlPasteSpecialOperationAdd
xlPasteSpecialOperationDivde
xlPasteSpecialOperationMultiply
xlPasteSpecialOperationNone
xlPasteSpecialOperationSubtract
msdn 설명글 주소
http://msdn.microsoft.com/ko-kr/library/microsoft.office.interop.excel.xlpastespecialoperation(VS.80).aspx

SkipBlanks
복사해서 넣을 때 빈 셀을 같이 붙여 넣을 경우 True, 아닐 경우 False
(빈 셀을 클립보드에 포함할지 아닐지를 결정하는 옵션)

Traspose
범위를 붙여넣을 때에 행과 열을 바꾸면 True, 아닐 경우 False



---
각 옵션들의 설명은 나중에 추가로 포스팅하겠습니다.
일단은 msdn을 확인해보시길...


댓글()