엑셀 VBA로 이미지 파일 읽어서 붙이기!!!

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

엑셀로 이미지 파일을 관리하기 위해서
새로운 이미지를 불러올 필요가 있다.
이 때에는 아래와 같은 VBA 함수를 이용할 수 있다.. >ㅁ<b

    Dim picTemp
    Dim sPicPath

    Set picTemp = ActiveSheet.Pictures.Insert(sPicPath)

위와 같이 실행하면 현재 위치하는 셀에 이미지가 들어간다!!!
아..만약 현재 셀에 딱 맞게 이미지를 넣고 싶다면, 아래의 코드를 추가하자.
현재 자신의 셀 크기에 맞게 이미지를 수정해 주는 것이다.
    
    picTemp.Width = ActiveCell.Width - 2
    picTemp.Height =ActiveCell.Height - 2
    picTemp.Top = ActiveCell.Top + 1
    picTemp.Left = ActiveCell.Left + 1

-추가 내용-
이렇게 하면 계속 Picture가 추가되어서 문제 될 수 있다.
이럴 때엔 그림을 한 번에 날려줄 수 있는 코드가 있다!

    ActiveSheet.Pictures.Delete

모두 다 날리니깐... 주의하자!


댓글()

엑셀 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

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

댓글()

Call과 ByVal

학습/엑셀 VBA|2011. 4. 20. 09:33
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
어떤 함수를 호출할 경우 인자 값이 필요한 경우가 있다.

Sub Func(iVal As Integar)

Print( iVal)
iVal = iVal + 3
Print(iVal)

End Sub

위의 함수를 호출할 경우

Call로 호출을 하면 iVal의 인자값이 함수 종료 후에 변경이 된다.
-_-;; 말이 어렵네요.. 어쨋던 C언어의 포인터처럼 인자가 연동이 된다는 것이다.

그러면... 혹시 하나는 연동하고 하나는 연동하고 싶지 않을 경우는 어떻할 것인가;;;

그럴 때에는 ByVal을 사용하면 된다.

ByVal은 해당 인자를 연동하지 않겠다는 것을 의미한다.

---
언제나 저 혼자 보기 위해서 쓰는 글입니다.
혹시나 질문이 필요하면 .... 댓글을 달아주세요;
뭐.. 사실 이건 잊어먹지 않기 위해서 쓰는 글입니다. 

댓글()

[엑셀]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을 확인해보시길...


댓글()

[엑셀]10억을 1로 표시하는 방법, 천을 1로 표시하는 방법

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


엑셀에서 1,000,000,000을 1로 표시하는 방법

엑셀의 셀 서식에서 #,,, 으로 설정하면 된다.

',' 하나당 1000단위를 설정하는 것으로 # 뒷 부분에 3개의 ','을 써 놓으면 약 9개의 단위를 제외한다.

4개 단위로 제외하는 방법은 잘 모르겠다.

아래는 엑셀의 사용자 지정 서식 코드 법이다.
http://office.microsoft.com/ko-kr/excel/HP051986791042.aspx?pid=CH010036911042

댓글()