TwipsPerPixel

비주얼 베이직 6.0이하에서는 화면의 크기를 트윕(twip)으로 표시한다.
Screen.TwipsPerPixelX
Screen.TwipsPerPixelY


VBA에서는 없기에 다음과 같은 함수를 이용해야 한다. (source : MSDN)
Option Explicit

Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
ByVal hdc As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long

Const HWND_DESKTOP As Long = 0
Const LOGPIXELSX As Long = 88
Const LOGPIXELSY As Long = 90

'--------------------------------------------------
Function TwipsPerPixelX() As Single
'--------------------------------------------------
'Returns the width of a pixel, in twips.
'--------------------------------------------------
Dim lngDC As Long
lngDC = GetDC(HWND_DESKTOP)
TwipsPerPixelX = 1440& / GetDeviceCaps(lngDC, LOGPIXELSX)
ReleaseDC HWND_DESKTOP, lngDC
End Function

'--------------------------------------------------
Function TwipsPerPixelY() As Single
'--------------------------------------------------
'Returns the height of a pixel, in twips.
'--------------------------------------------------
Dim lngDC As Long
lngDC = GetDC(HWND_DESKTOP)
TwipsPerPixelY = 1440& / GetDeviceCaps(lngDC, LOGPIXELSY)
ReleaseDC HWND_DESKTOP, lngDC
End Function


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2010/05/14 00:55 2010/05/14 00:55
, , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/302

건축환경 및 설비 분야에서 공기의 상태값을 아는 것이 매우 중요하다.
공기 상태를 계산하는 엑셀 프로그램을 여기에 올린다.

사용전 엑셀 보안 설정
- 도구 -> 매크로 -> 보안 -> "보안 수준" 탭에서 "보통"을 선택 (Excel 2003이하)

사용법
1) 시트 안에 있는 "계산기" 단추를 누른다.
사용자 삽입 이미지
2) 알고 있는 두 값을 선택해서 그 값을 입력한 다음 "계산" 단추를 누른다.
예) 건구온도 20도, 상대습도 55%를 입력해서 나머지 값을 구하고자 할 경우 다음과 같이 입력한다.
사용자 삽입 이미지

3) 계산결과는 엑셀 시트와 대화상자 동시에 출력이 된다.
사용자 삽입 이미지
4) 첨부 엑셀 파일

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2010/05/11 02:28 2010/05/11 02:28
, , , , , , , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/301

[프로그램등록] Visual Air

공기의 물리적인 상태값은 공기와 관련한 수치계산의 기본이 된다. 공조 설비에서 취급하는 공기는 습공기이기 때문에, 공기조화에 관한 계산은 습공기의 성질을 충분히 파악한 상태에서 가능하다. 이런 습공기의 상태값에는 밀도, 수증기압, 절대습도, 상대습도, 노점온도, 습구온도 등과 함께 습공기가 안고 있는 열량인 엔탈피가 있다.
습공기의 상태값은 표로 제시되기도 하지만, 모든 경우에 대한 자료를 주지 못한다. 이에 가장 기본적인 자료로서 습공기선도를 사용하게 되는데, 습공기의 상태값을 구하는데 사용됨과 동시에 공기조화 프로세스를 설계, 해석하는데도 사용된다.
따라서, 습공기에 대한 이론적인 것을 살펴보고, 상태값을 계산하는 함수와 함께 습공기선도를 그리는 함수를 작성하는 프로그램을 만들었다.
프로그램 제작은 사용자 인터페이스가 좋은 윈도우 환경에서 쓸 수 있게 Visual Basic 6.0 Professional Version으로 하였다.

사용자 삽입 이미지

Visual Air 실행 화면

이 프로그램에 대한 등록증은 아래와 같다.
사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2010/04/20 18:19 2010/04/20 18:19
, , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/294

코드 생성기

프로그래밍을 하다보면 기계적으로 반복해야 할 일들이 생긴다. 이런 일들로 일일이 타이핑을 한다는 것은 매우 지루하고 따분한 일이다. 그래서 코드을 자동으로 생성하도록 할 필요가 생긴다.
곧 개발환경의 매크로를 이용하거나, Perl과 같은 문자열 처리기를 통하여 코드를 자동처리하도록 한다.
다음의 사이트도 그 중의 하나이다.

http://kimsk99.springnote.com/pages/63531
- 미리 지정된 텍스트를 현재 커서위치(실렉트된 것)에 삽입하는 매크로
- 현재 편집중인 파일과 같은 이름이고 확장자만 cpp <-> h 로 바뀐 파일을 열어주는 매크로

http://www.devpia.com/maeul/contents/d ··· f%3D8423
- 이름과 날짜를 입력
- 수평 라인 주석을 입력

http://serious-code.net/tc/tag/Visual%20Studio%20Macro
- 선택된 라인들에서 중복된 라인들은 삭제하고 나머지를 정렬하기
- 자동으로 getter/setter생성하기

Using Visual Studio .NET Macros

- 속성을 위한 매크로
사용자 삽입 이미지

Private 변수를 Property Procedure로 확장하기


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2010/04/18 15:38 2010/04/18 15:38
, , ,
Response
No Trackback , 2 Comments
RSS :
http://www.solarview.net/rss/response/293

VBA에서 엑셀함수 사용하기

엑셀 함수는 VBA 함수보다 훨씬 다양한 분야에 많은 함수들을 보유하고 있다.
앞서 살펴본 것처럼, 삼각함수 분야에도 많은 역함수를 보유하고 있다. 더군다나 스프레드시트 프로그램으로서 당연히 갖추어야 하는 함수도 많이 보유하고 있다. 예를 들면 다음과 같다.

area = Application.WorksheetFunction.Pi * radius ^ 2
a = Application.WorksheetFunction.Acos(b)
Set myRange = Application.Worksheets("Sheet1").Range("C1:C60")
mySum = Application.WorksheetFunction.Sum(myRange)


첫줄은 원주율을 참조한 것이고, 둘째줄은 코사인 역함수를 호출하여 사용한 것이다.
셋째줄은 워크시트 내의 특정범위를 설정한 것이며, 네째줄에서 이 범위에 대한 합을 엑셀함수를 이용하여 구했다.

또 다른 방법으로는 Evaluate 메소드를 사용하는 것이다.
mySum = Evaluate("=Sum(C1:C60)")

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2009/06/14 22:04 2009/06/14 22:04
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/253

앞서 기술한 것처럼, 비주얼베이직6.0과 VBA에는 삼각함수의 역함수인 ArcSin()과 ArcCos()이 없다. 대신 Atn()만 있다.
도움말을 보면 다음과 같이 작성하라고 안내하고 있다.
역 사인 (ArcSin(x)) =   Atn(x / sqr(-x * x + 1))
역 코사인 (ArcCos(x)) = Atn(-x / sqr(-x * x + 1)) + 2 * Atn(1)

이대로 하면 분모가 0이 되는 경우에 대한 대책뿐만 아니라, x가 -1<=x<=1 범위를 벗어날 경우에 대한 대책이 없다.
특히, 부동소수계산을 하다보면 정확하게 -1 또는 1이 되지 않고, -1.0000000** 또는 1.000000**가 되는 경우가 발생한다. 이에 대한 대책이 필요하다.
 
Function ArcSin(ByVal x As Double) As Double
If Abs(Fix(x)) <> 1 Then '-1<x<1일때는 계산, x<=-2, x>=2 일때는 오류 발생
ArcSin = Atn(x / Sqr(-x * x + 1))
Else ' Abs(Fix(x)) = 1일 때 즉 -2<x<=-1, 1<=x<2
ArcSin = Sgn(x) * Atn(1) * 2
End If
End Function

Function ArcCos(ByVal x As Double) As Double
If Abs(Fix(x)) <> 1 Then ''-1<x<1 일때는 계산, x<=-2, x>=2 일때는 오류 발생
ArcCos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
Else ' -2<x<=-1, 1<=x<2
If x > 0 Then 'Fix(x)=1일 때 즉 1<=x<2
ArcCos = 0
ElseIf x < 0 Then 'Fix(x)=-1일 때 즉 -2<x<=-1
ArcCos = Atn(1) * 4
End If
End If
End Function


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2009/06/11 18:22 2009/06/11 18:22
,
Response
No Trackback , a comment
RSS :
http://www.solarview.net/rss/response/252

VBA 함수들

VBA함수를 정리해놓은 사이트가 있어서 소개한다. 이들 사이트에서 복사한 다음, 출처를 표기할까 하는 생각을 좀 했다. 그러나, 개인적으로 누가 원저자인지를 모르겠어서 그냥 주소만 여기에 옮겨놓는다.

 

http://www.cancould.com.ne.kr/hamsu.htm

http://pmguda.com/464

http://skql.tistory.com/127

비주얼 베이직 함수라고 하는데, VBA 함수가 더 정확한 표현인 것 같다.

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/11/12 18:41 2008/11/12 18:41
, ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/218