Excel VBA 檔案操作

2022-12-20 05:18:02 字數 4134 閱讀 6521

在實際應用中,我們經常從軟體中將資料匯出為文字檔案,在需要將這些文字檔案匯入到excel中時可以使用以下的方法。

在excel vba中可以使用add方法新建查詢表後匯入文字檔案,如下面的**所示。

#001 sub addquery()

#002

#003 with _

#004connection:="text;" & & "\工資表.txt", _

#005destination:=range("a1"))

#006textfileplatform = 936

#007textfilecommadelimiter = true

#008refresh

#009 end with

#010 end sub

**解析:

addquery過程使用querytable物件的add方法新建查詢表後將文字檔案「工資表.txt」的內容匯入到工作表中。

應用於querytable物件的add方法新建乙個查詢表,返回querytable物件,該物件代表新建的查詢表,語法如下:

destination, sql)

引數expression是必需的,返回乙個querytables物件。

引數connection是必需的,查詢表的資料來源。如果資料來源是文字檔案,是「text;《文字檔案路徑和名稱》」形式的字串,其他資料來源請參閱幫助。

引數destination是必需的,range型別,查詢表目標區域左上角單元格用於放置生成的查詢表的區域。目標區域必須在包含expression指定的querytables物件的工作表上。

引數sql是可選的,在odbc資料來源上執行的sql查詢字串,當將querytable物件、文字檔案、或是ado或dao recordset物件指定為資料來源時不能使用該引數。

第3行到第5行**在工作表中建立對位於同一目錄中的「工資表.txt」文字檔案的查詢,並將查詢結果放置到工作表中。

第6行**設定匯入的文字檔案的原始格式,,預設值是在「文字匯入嚮導」的「檔案原始格式」選項中的當前設定。

第7行**設定文字檔案匯入查詢表中時,是以逗號作為分隔符。

第8行**使用refresh方法更新外部資料區域,應用於querytable物件的refresh方法更新外部資料區域,語法如下:

引數expression是必需的,返回乙個querytable物件。

引數backgroundquery是可選的的,只用於基於sql查詢結果的querytable。

使用open語句輸入文字檔案,如下面的**所示。

#001 sub opentext()

#002 dim filename as string

#003 dim mytext as string

#004 dim marr() as string

#005 dim i as integer

#006 dim j as integer

#007 filename = & "\工資表.txt"

#008 j = 1

#009

#010 open filename for input as #1

#011 do while not eof(1)

#012line input #1, mytext

#013marr = split(mytext, ",")

#014for i = 0 to ubound(marr)

# i + 1) = marr(i)

#016next

#017j = j + 1

#018 loop

#019 close #1

#020 end sub

**解析:

opentext過程使用open語句將文字「工資表.txt」的內容輸入到工作表中。

第10行**使用open語句開啟文字檔案以完成對文字檔案的輸入。open語句能夠對檔案輸入/輸出(i/o),語法如下:。

open pathname for mode [access access] [lock] as [#]filenumber [len=reclength]

pathname是必需的,指定檔名,該檔名可能還包括目錄、資料夾及驅動器。

mode是必需的,指定檔案方式,有append、binary、input、output、或random方式。如果未指定方式,則以random訪問方式開啟檔案。

access是可選的,說明開啟的檔案可以進行的操作,有read、write、或read write操作。

lock是可選的,說明限定於其它程序開啟的檔案的操作,有shared、lock read、lock write、和lock read write操作。

filenumber是必需的,乙個有效的檔案號,範圍在 1 到 511 之間。使用freefile函式可得到下乙個可用的檔案號。

reclength是可選的,小於或等於 32,767(位元組)的乙個數。對於用隨機訪問方式開啟的檔案,該值就是記錄長度。對於順序檔案,該值就是緩衝字元數。

第11行**使用do...loop 語句重複執行第12行到第17行**,直到文字檔案的結尾。eof函式返回乙個integer,它返回boolean值true,表明已經到達為random或順序input開啟的檔案結尾,語法如下:

eof(filenumber)

引數filenumber是必需的,是乙個integer,包含任何有效的檔案號。

第12行**使用line input # 語句讀入一行資料並將其賦予變數mytext。line input # 語句從已開啟的順序檔案中讀出一行並將它分配給string變數,語法如下:

line input #filenumber, varname

filenumber是必需的,任何有效的檔案號。

varnamer是必需的,有效的variant或string變數名。

第13行**使用split函式按逗號作為分隔符分開這行字元,賦值陣列marr。關於split函式請參閱技巧169-2。

第14行到第16行**將陣列marr迴圈賦值給單元格,請參閱技巧169-1。

第19行**關閉文字檔案。close語句關閉open語句所開啟的輸入/輸出 (i/o) 檔案,語法如下:

close [filenumberlist]

引數filenumberlist是可選的,為乙個或多個檔案號,如省略則將關閉所有由open語句開啟的活動檔案。

使用opentext方法載入乙個文字檔案並將其作為包含單個工作表的工作簿處理,如下面的**所示。

#001 sub opentext()

#002 dim myfilename as string

#003 myfilename = "工資表.txt"

#004

#005 _

#006filename:= & "\" & myfilename, _

#007startrow:=1, datatype:=xldelimited, comma:=true

#008 with activeworkbook

#009with .sheets("工資表").range("a1").currentregion

#"sheet1").range("a1").resize(. . = .value

#011end with

#012close false

#013 end with

#014 end sub

**解析:

opentext過程使用opentext方法載入「工資表.txt」文字檔案並將其資料寫入到工作表中。

第5行到第7行**使用opentext方法載入「工資表.txt」文字檔案。opentext方法載入乙個文字檔案,並將其作為包含單個工作表的工作簿進行分列處理,然後在此工作表中放入經過分列處理的文字檔案資料,語法如下:

origin, startrow, datatype, textqualifier, consecutivedelimiter, tab, semicolon, comma, space, other, otherchar, fieldinfo, textvisuallayout, decimalseparator, thousandsseparator, trailingminusnumbers, local)

Excel VBA程式設計動態陣列

在有些情況下,使用者也許不清楚需要多大的陣列,這時就需要用乙個能夠改變大小的陣列,這就是動態陣列。動態陣列可以在任何時候改變大小。在vba中,動態陣列是最靈活 最方便的一種陣列。利用動態陣列還有助於有效管理記憶體,因為動態陣列是使用時才開闢記憶體空間,在不使用這個陣列時,還可以將記憶體空間釋放給系統...

Excel VBA用途和工作介面

vba可以幫助使用者迅速 輕鬆 高效地完成所面對的各種複雜工作。例如利用vba可以幫助公司職員提高辦公效率,而且對於從事會計 審計 統計等工作的人員,也可以快速完成工作。下面介紹vba的用途及工作環境。1 vba用途 vba是visual basic for application的縮寫,是visu...

Excel VBA程式設計VBE的組成

vbe必須借助excel或其他office元件才能使用。啟動excel 2007後,單擊 組中的visual basic按鈕,則彈出vbe視窗。其中,在vbe視窗中,主要由工具欄 選單欄和4個視窗組成,以幫助使用者建立和管理應用程式。使用者可以通過單擊工具欄中的按鈕或者執行選單欄中的命令,訪問其功能...