Office Excel VBA程式設計

2021-04-30 19:22:03 字數 1504 閱讀 1611

本文涉及到的內容包括vba陣列、從單元格讀取值填充二維陣列、取excel檔案的有效行、多檔案合併等內容。

首先,有檔案1、檔案2、檔案3,檔案1的名字為"合併.xls",檔案2、檔案3等的檔名隨意定。但他們的格式需要一致,如下圖所示:

現在,把檔案2、檔案3的內容合併到合併.xls檔案中。由於檔案2、檔案3等檔案的檔名不固定,因此,需要定義二維陣列,在陣列中動態識別檔名,因此,在合併.xls檔案開乙個工作表,專門存放檔名,如下所示

首先,定義乙個陣列

dim myarr(), myrng as range

把單元格的內容讀入陣列,

set myrng = workbooks("合併.xls").sheets("sheet2").range("a1:b4")

myarr = myrng

使用迴圈,完成從多個檔案向乙個檔案的合併,

開啟需要合併的檔案

workbooks.open filename:=xx & myarr(filename, 2) & ".xls "

得到需要合併的檔案的有效行數(不是excel的65536行)

irowto = activesheet.range("a65536").end(-4162).row

設定目標檔案為活動檔案

workbooks("合併.xls").activate

得到目標檔案的有效行數

irowfrom = activesheet.range("a65536").end(-4162).row

如果是第乙個需要合併的檔案,則直接從目標檔案的第三行開始貼上

if filename = 1 then

workbooks(myarr(filename, 2) & ".xls").sheets("sheet1").range("a3:f" & irowto).copy

workbooks("合併.xls").sheets("sheet1").range("a3:f" & irowto).pastespecial paste:=xlpastevalues

else

如果不是第乙個需要合併的檔案,則需要找到上一次貼上完成後的最後一行,接著往下貼

a = irowfrom + 1

b = irowfrom + irowto - 1

workbooks(myarr(filename, 2) & ".xls").sheets("sheet1").range("a3:f" & irowto).copy

workbooks("合併.xls").sheets("sheet1").range("a" & a & ":f" & b).pastespecial paste:=xlpastevalues

end if

完整的程式**如下:

如果檔案中,存在多個工作表,則不能用這種思路,因為在vba中,再設定工作薄的當前活動工作表時有bug,當你設定sheet1為當前活動工作表,取sheet1的當前有效行數,但結果往往不是你想要的sheet1的行數,而是其它表的行數。如果檔案存在多表,則可以利用單元格來賦值。直接貼**上來

Office Excel VBA學習 高階

1.輸入和絕對值 sub qingwuabs dim a,b as integer a inputbox 請輸入乙個負數 提示 b abs a msgbox 你輸入數的絕對值為 b end sub 2.if結構 sub testif a1 35 if a1 30 then msgbox 30 els...

靜態聯編與動態聯編

在c 中,多型性主要是通過函式過載實現的。過載函式是指程式中對同名函式進行呼叫時,編譯器會根據函式引數的型別和個數,決定該呼叫哪一段函式 來處理這個函式呼叫。這種把函式呼叫與適當的函式 相對應的動作,叫做聯編。聯編分為靜態聯編和動態聯編。在編譯階段決定執行哪個同名的被呼叫函式,稱為靜態聯編。在編譯階...

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...