본문 바로가기

Languages/Visual Basic

VB에서 엑셀데이터 읽고 쓰기.


VB에서 엑셀 데이터 읽고 쓰기.


# Windows API 함수를 이용하여, 비쥬얼 베이직에서 사용합니다.





★추가한 모듈에 아래의 소스코드를 입력합니다.

Option Explicit

'외부 프로그램 실행

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _

(ByVal hwnd As Long, ByVal lpOperation As String, _

ByVal lpFile As String, ByVal lpParameters As String, _

ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public exFileName As String '저장하려는 Excel File Name

Public ExcelCon As ADODB.Connection

Public Sub ExcelFileSave(grd As MSHFlexGrid)

Dim iRow As Integer, iCol As Integer

Dim Text As String

Dim objExcel As Object '생성될 엑셀 개체

Dim sMSG As String

Dim gsMSG As String

On Error GoTo Err_Handler

'개체 생성

Set objExcel = CreateObject("Excel.Sheet")

With objExcel.Application

'열제목 나타내고 굵게 지정

For iCol = 1 To grd.Cols - 1

.ActiveSheet.Cells(1, iCol).Value = grd.TextMatrix(0, iCol)

Next

iCol = 0: iRow = 0

.ActiveSheet.Range("A1").CurrentRegion.Font.Bold = True

'레코드 Excel로 변환

For iRow = 1 To grd.Rows - 1

For iCol = 1 To grd.Cols - 1

.ActiveSheet.Cells(iRow + 1, iCol).Value = grd.TextMatrix(iRow, iCol)

Next iCol

Next iRow

'지정한 경로로 저장

.Workbooks(1).SaveAs exFileName

'Excel File를 Open할 것인지 물어봐서 아니면 Exit...

gsMSG = "저장하였습니다" & Chr(13) & Chr(13) & exFileName

gsMSG = gsMSG & "를 Excel로 불러오시겠습니까?"

If MsgBox(gsMSG, vbInformation + vbYesNo) = vbNo Then Exit Sub

'Excel File 호출

Call OpenExcelFile(exFileName)

End With

Exit Sub

Err_Handler:

Call MsgBox(Err.Description, vbCritical)

Err.Clear

Exit Sub

End Sub

'파일명 가져오기

'저장공통대화상자에서 [취소]/[ESC] 버튼을 눌렀으면 출력안함

Function GetFileName(dlgcommon As CommonDialog) As Boolean

On Error GoTo Err_Handler

'CancelError를 True로 설정합니다.

dlgcommon.CancelError = True

'플래그를 설정합니다.(읽기전용)

dlgcommon.Flags = cdlOFNHideReadOnly

'필터를 설정합니다.

dlgcommon.Filter = "Excel Files (*.xls)|*.xls"

'기본 필터를 지정합니다.

dlgcommon.FilterIndex = 2

'[다른 이름으로 저장] 대화 상자를 표시합니다.

dlgcommon.ShowSave

'선택된 파일 이름을 표시합니다.

exFileName = dlgcommon.FileName

GetFileName = True

Exit Function

Err_Handler:

'[취소] 단추를 눌렀습니다.

Err.Clear

Exit Function

End Function

'Excel File 열기

Public Sub OpenExcelFile(FilePathName As String, Optional Parameter As String)

Dim Result As Long

Dim Param As String

On Error GoTo Err_Handler

Const SW_SHOWNORMAL = 1

If Parameter = "" Then

Param = vbNull

Else

Param = Parameter

End If

Result = ShellExecute(App.hInstance, "open", FilePathName, Param, _

vbNullString, SW_SHOWNORMAL)

Exit Sub

Err_Handler:

Call MsgBox(Err.Description, vbCritical)

Err.Clear

Exit Sub

End Sub

Public Function ExcelOpen(FilePathName As String)

On Error GoTo e1:

Set ExcelCon = New ADODB.Connection

With ExcelCon

.Provider = "Microsoft.Jet.OLEDB.4.0"

.Properties("Extended Properties").Value = "Excel 8.0"

.Open FilePathName

End With

Exit Function

e1:

MsgBox Err.Description

End Function

Public Function ExcelClose()

ExcelCon.Close

End Function

학원 수강생 및 강좌 관리

학원에서는 강사들의 정보를 상세히 입력받아 매달 급여를 지급하고

급여는 매달 지급되는 금액은 일정하고 수당과는 관계가 없다. 강사는

강좌를 개설하과 각 강좌의 과목은 과목당 수강료가 책정이 되어 있다.

각 강좌는 과목당 학수 구분을 한다. (학수구분은 이과인지, 문과인지,

예체능인지의 구분)을 의 미한다. 수강하는 학생들에 대하여 학생들이

어떤과목을 수강했는지에 대한 자료가 필요하고 관리가 필요하다.




#API 함수

소프트웨어 어플리케이션을 개발하기 위한 여러가지 함수의 집합

API 함수 중 특정 파일을 실행하는 함수인 ShellExecute 함수 관련 모음

#ShellExecute

전달받는 인수값을 근거로 특정 프로그램을 실행시켜주는 API 함수

# hwnd : 부모 윈도우 핸들

# Ipoperation : 실행 옵션

# IpParameters : 프로그램 실행 시 전달할 파라미터 또는 null

# IpDirectory : 실행시킬 파일이 위치한 경로명

# nShowCdm : 실행되는 프로그램이 어떻게 보여질 지 결정

# Const SW_SHOWDEFAULT = 10

# Const SW_SHOWMAXMIZED= 3

# Const SW_SHOWMINIMIZED= 2

# Const SW_SHOWNORMAL= 1





----소스파일----

Private Sub Command1_Click() '네이버로 가기 버튼 클릭
Dim L_rtnVal As String
L_rtnVal = ShellExecute(0, "OPEN", "Http://www.naver.com", "", "", 1)

End Sub



# 추가 하고 프로그램을 실행해서 테스트를 해 보세요.





# 텍스트 열기 버튼의 소스

Private Sub Command2_Click()
Dim lrtnVal As String
If Not GetFileName(CommonDialog1) Then Exit Sub
lrtnVal = ShellExecute(0, "OPEN", exFileName, "", "", 1)
End Sub































































# 배포까지 하면, 뭐 다됐네 이제...

유지 보수+_+? ㅋㅋㅋㅋㅋㅋㅋ ㅜ_ㅜ