Ecel數(shù)據(jù)分析教程 第8章上機題及課后習題_第1頁
Ecel數(shù)據(jù)分析教程 第8章上機題及課后習題_第2頁
Ecel數(shù)據(jù)分析教程 第8章上機題及課后習題_第3頁
Ecel數(shù)據(jù)分析教程 第8章上機題及課后習題_第4頁
Ecel數(shù)據(jù)分析教程 第8章上機題及課后習題_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

上機題8

、設置用戶窗體與Excel工作表互動

要求在工作表中建立一個用戶窗體,通過該窗體實現(xiàn)與Excel工作表中的單

元格進行輸入/輸出的互動,并可實現(xiàn)簡單的計算。

步驟一:點擊“開發(fā)工具I代碼"區(qū)的"VisualBasic”按鈕,在彈出的VBA

界面中,右擊Sheetl,在彈出的快捷菜單中選擇''插入I用戶窗體”,如圖所示:

口向眩萼*@工作簿1-

文件開始插入頁面布局公式數(shù)據(jù)審閱視圖開發(fā)工具幫助

杳|已錄制宏,濯

[?11”E

....D.…庭使用相對引用國

VisualBasic宏力口ExcelCOM力口載項插入設計模式

2!載項加載項回

代碼加載項控件

皆MicrosoftVisualBasicforApplications-工作簿1

文件⑹編輯出視圖M插入①格式9)調(diào)試⑼運行團工具①

圖圖▼fel

匚程-VBAProject兇

尊Solver(SOLVER.XLAI

想VBAProject(FVICRES

VBAFroject(工作第1

白…,巴Microso£tExcel對:

朗西1m

超二)Thi臼查看代碼9)

國查菽掇⑥

目切換文件夾

VBAProject屬性但…3

插入網(wǎng)用用戶窗便?

導入文件0)…圖模塊(M)

此時彈出用戶窗體,并且同時彈出控件工具箱,如圖所示:

皆MicrosoftVisualBasicforApplications-工作簿1

文件⑹編輯(E)視圖M插入(1)格式⑼調(diào)試⑼運行圖)

工程?VBAProject

國三臼國工作簿1-UserForml

[±]^Solver(SOLVER.XLA1

由魅VBAProjaUserForml

0魅VBAProj)工具箱

白…由Micro

OS控件I

超)T

0?&窗體QA0EE0O

巴國g亡)I[±]Q

步驟二:在用戶窗體上畫出一個標簽、一個文本框和一個命令按鈕,并設置

好各自的Caption屬性,如圖所示:

普MicrosoftVisualBasicforApplications-工作簿1

文件(E)編輯(E)視圖M插入0)格式9)調(diào)試(D)運行四工具①

w)留卷雪得因?

工程?VBAProjectX

國3I回圖工作簿1-UserForml(UserF

E)Solver(SOLVER.XLA1

EVBAProjej

耳.尊VBATroj(工具箱

Si&Micro

OS控件]

L..超|T

白…巴窗體13A眄團國[205

國U巴]@a巴!囹£2

步驟三:點擊左側(cè)的“查看代碼”按鈕,輸入以下代碼:

PrivateSubUserForm_Initialize()'程序執(zhí)行時首先運行窗體初始化過程

If[al]=,,nThen

TextBoxl.Value=’此時默認文本框可用,可執(zhí)行點擊命令按鈕過程

Else

TextBoxl.Value=[al]

TextBoxl.Enabled=False

EndIf

EndSub

PrivateSubCommandButtonl_Click()

IfTextBoxl.Value=""Then

MsgBox”請輸入內(nèi)容”

Else

[al]=TextBoxl.Value

UnloadMe

EndIf

EndSub

如圖所示:

皆MicrosoftVisualBasicforApplications-工作簿1

文件(E)編輯CE)視圖便)插入Q)格式9)調(diào)試?)運行⑻工具(

免外?叫厘留卷寫&?行11,

工程-VBAProjectX

回三回工作簿1-UserForml(Us

叫二五|(SOLVER.XLA.

由|藝直代相[ject(FUKCKES

IE]VBAProject(工作簿1

白^^MicrosoftExcel對:

81Sheetl(Sheetl.

……Thistforlcbook

白…&窗體

:?…國UserForm.

B工作簿1-UserForml(代碼)

^UserForB▼||lnitiallze

PrivateSubCommandButtonl_C1ick()

l£TextBoxl.Value=""Then

MsgBox”請輸入內(nèi)容”

Else

[al]=TextBoxl.Value

UnloadMe

EndI£

EndSub

PrivateSubUserFormInitialize。

|I£[al]=垠Then

TextBoxl.Value=

Else

TextBoxl.Value=[al]

TextBoxl.Enabled=False

EndI£

EndSub

由圖中可見,VBA程序如同所有VB程序一樣,是事件驅(qū)動的,與代碼的

先后順序無關(guān),只與事件發(fā)生的先后順序有關(guān)。

步驟四:點擊VBA界面上的“運行”按鈕,將在Excel的Sheetl界面上彈

出UserForml用戶窗體,在其文本框中輸入123,點擊確定,如圖所示:

A

1CD

2

3

4

5

6

7

8

9_

結(jié)果將隱藏當前用戶窗體,并在Sheetl工作表的A1單元格中出現(xiàn)“123”。

如果不輸入內(nèi)容就點擊“確定”,將彈出如圖所示的提示框:

MicrosoftExcelX

請輸入內(nèi)容

確定

單擊“確定”后再次回到剛才的用戶窗體。也就是說,如果A1為空的話,

必須要輸入點什么內(nèi)容才能關(guān)閉當前的用戶窗體,并將輸入的內(nèi)容傳入到A1對

話框。

反之,如果先在Sheetl工作表的A1單元格中輸入“456”,然后再去VBA

界面上點擊"運行"按鈕,將在Sheet1工作表上彈出如圖所示的UserForml用

戶窗體:

其中已經(jīng)有了“456”這個數(shù)據(jù),并且是不可改變的灰色。

現(xiàn)在我們將要升級這個程序。

第1步,可將用戶窗體上標簽中的文字由“A1的內(nèi)容是"改為“選中單元

格的內(nèi)容是”,同時將代碼中所有的“[al]”都改為“Selection”,則可實現(xiàn)對任

意單元格的操作,如圖所示:

AD

1

2

3

4

5

FormlX

6

7元格的

8

9

10

11

第2步,想要在標簽中確定是哪個單元格的內(nèi)容,也就是要讀出所選單元格

的名稱,這就需要先在代碼中判斷是哪個單元格被選中,只需要在用戶窗體初始

化事件(UserForm_Initialize()事件)中,在最前面添加如下代碼:

DimaAsString

a=ActiveCell.Address(0j0),返回相對地址,缺省參數(shù)(1,1)是絕對地址

Labell.Caption=a+"的值是:"‘當然,標簽框的內(nèi)容也要電新設定

其中,ActiveCell.Address(O,0)也可寫成Selection.Address(0,0)。

說明,此句中,如果將ActiveCelLAddress(O,0)寫成ActiveCelLAddress,即

不寫后面的參數(shù),則表示引用了絕對地址,與寫成ActiveCell.Address(l,1)的效

果一樣,都返回類似$A$1這樣的絕對引用,你可以自己試一下,如果參數(shù)寫成

(0,1)或(1,0)會返回什么樣的混合引用。參數(shù)1所在的行(或列)將成為絕對引

用。

運行效果如圖所示:

UserForml

B5的值是:

7891

確定

第3步,想更改單元格中已有的數(shù)據(jù),只需將用戶窗體初始化事件中的以下

代碼注釋掉即可:

'TextBoxl.Enabled=False

這樣,在單擊“確定”按鈕時就會觸發(fā)CommandButtonl的Click事件,將

更改過的內(nèi)容寫進當前單元格。

其實,即使不注釋這一句,在單擊“確定”按鈕時也是觸發(fā)了CommandButtonl

的Click事件的,只不過當時文本框被禁用,所以無法輸入任何新值,也就沒有

任何新值被傳到當前單元格去替換舊值了。

第4步,要想在選定任意單元格時彈出該窗體,就在Sheetl的代碼頁中添

加如下事件代碼:

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)

UserForml.Show

EndSub

這一步還有個變異版,就是:不是在任意選擇另外某個單元格時彈出該用戶

窗體,而是在在切換到該工作表時(當然這就要求該工作簿中有幾個工作表)就

自動跳出用戶窗體,則需要在Sheetl的代碼頁中添加如下事件代碼:

PrivateSubWorksheet_Activate()

UserForml.Show

EndSub

第5步:如果想在選定某個特定單元格(或某列、某行中的一個單元格)時

才自動跳出用戶窗體,可將第4步中的代碼進一步完善為:

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)

IfSelection.Rows.Row=2OrSelection.Rows.Row=4Then

IfSelection.Columns.ColumnMod2=1Then

UserForml.Show

EndIf

EndIf

EndSub

第6步:如果想在自動輸入了數(shù)據(jù)的單元格右側(cè)的單元格得到經(jīng)過計算的結(jié)

果,例如,如果通過用戶窗體的文本框在C2單元格輸入“1.68”,希望在按下''確

定”后立即在D2單元格出現(xiàn)“身高為168厘米”,則只需在用戶窗體代碼頁的

CommandButtonl_Click()事件中,在EndIf之前添加以下代碼:

Selection.Offset(0,1)="身高為"&TextBoxl.Value*100&"厘米”

第7步:如果在窗體中輸入了數(shù)據(jù)后又想反悔,除了可以直接點擊窗體上的

關(guān)閉按鈕外,也可以在窗體中再增加一個按鈕CommandButton2,名為“取消”,

并為它添加代碼如下:

PrivateSubCommandButton2_Click()

TextBoxl.Value=.....如無此句,則取消后文本框中將保留取消前的值

UserForml.Hide

EndSub

句中"身高為"&TextBox1.Value可改為"身高為"&Selection.Valueo

其中,如果沒有“TextBoxl.Value="""這一句,則取消后如果緊接著又點擊

了一個空單元格時,窗體的文本框中將保留取消前的值,這就看用戶的需要了,

有時用戶就需要這個效果,比如值輸對了,但發(fā)現(xiàn)單元格點錯了,就可以取消后

重新點選正確的單元格,此時不用再重新輸入值,直接點擊確定就可以把這個值

輸入。不過有個問題:Label1的Caption屬性值也一直保留了,直到下次點擊了

“確定”后才會正常。

現(xiàn)在來看一看最終升級后的用戶窗體和代碼。用戶窗體如圖所示:

國工作簿-UserForml(UserForm)

代碼頁有兩個,一個是Sheetl的代碼頁,如圖所示:

叢工作簿Lxlsm-Sheetl(代碼)IqIIBIII

Worksheet▼||SelectionChange

PrivateSubWorksheet_Activate()

UserForml.Show

EndSub

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)

l£Selection.Rows.Row=2OrSelection.Rows.Row=4Then

l£Selection.Columns.ColwnnMod2=1Then

UserForml.Show

EndI£

EndIf

EndSub

另一個是用戶窗體的代碼頁,如圖所示:

日工作簿-UserForml(代碼)

UserFor?▼|glnitiallze

PrivateSubCommandButtonl_C1ick()

IfTextBoxl.Value=""Then

MsgBox"清輸入內(nèi)容”

Else

Selection=TextBoxl.Value

UnloadMe

Selection.Offset(0/1)="身高為"&TextBoxl.Value*100&"厘米"

Endl£

EndSub

PrivateSubCommandButton2_Click()

TextBoxl.Value=

Labell.Caption=

UserForml.Hide

EndSub

PrivateSubUserForm_Initialize()’程序執(zhí)行時首先運行窗體初始化過程

DimaAsString

a=ActiveCell.Address(0,0),返回相對地址,承豆掌數(shù)U,1)是絕對地址

LaBell.Caption=?a+"的值是:一酶,標寥框的藥暑擔要重新廉

l£Selection=Then

TextBoxl.Value=?"'此時默認文本框可用,可執(zhí)行點擊命令按鈕過程

Else

TextBoxl.Value=Selection

,TextBoxl.Enabled=False'若啟用此句,則已有的數(shù)據(jù)不可更改

End1£

EndSub

2、自動填入時間的簽到簿

要求在工作表A列中輸入姓名后,會在B列自動輸入簽到日期和時間,如

圖所示:

SlicrosoftExcel-Bookl

國文件(E)編輯@)視圖笆)插入⑴格5

i一L田以433.£1

:宋體-12-LBIu

A5▼XV笈趙六

ABC

1

三2016-5-77:52:07簽到

四2016-5-77:52:14簽到

五2016-5-77:52:27簽到

5趙六I

操作步驟:

在工作表Sheetl的代碼窗口寫下如下程序:

PrivateSubWorksheet__SelectionChange(ByValTargetAsRange)

IfTarget.Count=1Then,判斷是否選中了單個單元格

IfTarget.Column=1Then,判斷單元格是否在第一列

'Application.EnableEvents=False,禁止事件激活,可不要

Target.Offset(0^1)=Now&"簽到",在相應行的第二列輸入當前日期

1Application.EnableEvents=True'恢復事件激活,可不要

EndIf

EndIf

EndSub

★代碼區(qū)中的Target可改為Selection更好理解;

★Target(或Selection)的.Column屬性可改為.Columns.Column;

★整個過程體中可只保留“丁@啄1?0抵01(0,1)=1^0\¥&“簽到””這一句。

運行時,工作表的Change事件被觸發(fā),會在B列自動輸入簽到日期和時間,

但修改工作表中其他列的單元格(如C列),工作表的Change事件同樣會被觸

發(fā),但是因為不滿足代碼中的判斷條件,所以不會執(zhí)行寫入日期的代碼。代碼中

寫入值的地方是由Offset函數(shù)確定的,該函數(shù)是對源單元格(此處是Target這個

Range)的偏移量。

3、個性化的行和列

通過個性化的行和列輔助確認單元格內(nèi)容。原始文件如圖所示:

ABcDEFGH1JKLM

1民工格所在部門性?入職日期一季度角二季度均三季度每四季度名年度總《排名獎金

2R1001銷售部男814/7/66155001563。22450998063560160

3R1002銷售部女2010/6/231019250148701936。312208470081470

4R1003銷售部男2010/8/110215001269023650154607330013330

5R1004銷售部更812/7/15819&302245024780225108937051937

6R1005銷售部女2013^/207二13002169026310201308943031943

7R1006治”男2012/6/2B8226002358022580221308890C2089

7

8R1007銷售部男201V87159165401963029460二一三二870801708

0R1008銷售部女2010/7712101250015880125602265063430170

10R1009銷售部男2012/7/48989013210110201364047760200

11R1010銷售部男2010/9/1291245011200236201478。62050180

12R1011銷售部女2013/5/117294001945012410154607672011672

13R1012銷售部男2012/471981963。2369013640324508941041941

14R1013圭銷售部生#######102140028540286901020088830618B3

15R1014銷售部女#######9227802641032010132609-146012446

16R1015銷售部男2014/57296193601936022540114507271014271

17R1016銷售部男2015/3/151326010200136402314060240190

18R1017銷售部女2014/6/306185201542012540258007228015228

19R1018銷售部女2014/3/256168301369。22140264307909010^09

20R1019銷售部女2010/472810142g0147801745028460749B012498

21R1S。林運華|銷售部女二。1174/179201301369018740294608202091202

該文件中已經(jīng)隔行設置了格式,但還是不足以讓我們快速分清數(shù)據(jù)。我們在

VBE中,雙擊“工程-VBAProject”窗口中的“Sheetl(原表)”選項,然后在彈出

的Sheetl代碼窗口中點擊“(通用)”的下拉列表框的下拉箭頭,選擇Worksheet

類型;此時原為“(聲明)”的下拉列表框也自動改為SelectionShange事件,設置

好后程序會自動在代碼窗口生成該事件的開頭和結(jié)尾代碼,如圖所示:

工程?VBAP「ojectX

臼-延VBAProject(2一2.2不姓化的行而可.xlsx)

白…占MicrosoftExcel對象

〔Sheetl(原表)

…超)Thistforkbook

之2.2.2個性化的行和列.xlsx-Sheetl(代碼)

Worksheet\/Select!onChange

PrivateSubWorksheet_SelectionChange(ByVaiTargetAsRange)

EndSub

S11

然后在Sheetl代碼窗口中輸入如下代碼:

DimrAsInteger'也可以定義在下面的事件過程中,但要賦初值。,下同

DimcAsInteger

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)

OnErrorResumeNext'如果出現(xiàn)運行時錯誤,不要中斷,繼續(xù)運行

Application.Screenupdating=False’刷新,被禁用

Ifr=0Then

Range("Al:Z99").RowHeight=14.25,注1

Range("Al:Z99").Interior.Colorindex=xlNone'注2

EndIf

Ifc=0Then

Range("Al:Z99").Font.Italic=False

Range("Al:Z99").Font.Bold=False

Range("Al:Z99").Font.Colorindex=xlAutomatic

EndIf

IfSelection.Column>=1AndSelection.Column<=13Then

IfSelection.Row>=1AndSelection.Row<>rThen

Cells(r,1).EntireRow.RowHeight=14.25'整行,卜同

Cells(r,1).EntireRow.Interior.Colorindex=xlNone

r=Target.Row'注3

Cells(r?1).EntireRow.RowHeight=25

Cells(r,1).EntireRow.Interior.Colorindex=6

EndIf

EndIf

IfSelection.Column>=1AndSelection.Column<>cThen

Cells(l,c).Entirecolumn.Font.Italic=False,將列,下同

Cells(l,c).Entirecolumn.Font.Bold=False

Cells(l,c).Entirecolumn.Font.Colorindex=xlAutomatic

c=Target.Column

Cells(ljc).EntireColumn.Font.Italic=True

c).EntireColumn.Font.Bold=True

Cells(l,c).EntireColumn.Font.Colorindex=3

EndIf

Application.Screenupdating=True

EndSub

注1:當選擇了新的單元格后,此程序在Z列以后、100行以下的格式(填

充色、字體等)未被重新設置到初始狀態(tài),可以拖動表格的滾動條去查看。要想

對整個表格都應用程序的設置(即未被選中的單元格所在行、列回到初始值),

需要將Range("Al:Z99")都改為"ActiveSheet.UsedRange”,但運行超慢!

注2:Interior是填充色,顏色用的是索引號,共56種,只需掌握前9種,

分別是:0為無色,1為白、2為黑,3?5分別是紅綠藍,6?8分別是黃(紅綠混

色)紫(紅藍混色)青(綠藍混色)。也可以用諸如vbGreen之類的VB顏色常

量,或直接使用RGB函數(shù)來精確控件顏色,不過屬性要換成Color,而不是現(xiàn)在

的Colorindexo

注3:此處Target可換成Selection。其實本程序中,除了事件形參部分中的

uByValTargetAsRange"外,過程體中的Target與Selection均可互換。

程序解讀:當發(fā)生WorksheetSelectionChange事件時:

第1步:先將r、c兩個變量歸0;

第2步:通過前兩個IF結(jié)構(gòu),執(zhí)行r(或c)為0時的操作,這其實是首次

運行時的操作,即:將選定的A1:Z99區(qū)域(或整個工作表)的填充色、行高、

字體設置等都設置為默認值。如果注釋掉這兩個IF結(jié)構(gòu),那么前一次選擇單元

格后對相關(guān)行和列進行的格式運用將被保留下來,會造成多行、多列都顯示了設

置后的效果;

第3步:通過兩個嵌套的IF結(jié)構(gòu)設置選中單元格所在行的格式,其中,外

層1F用于判斷是否選中了有數(shù)據(jù)的單元格,只有A列到M列之間(即列號在

1?13之間)的單元格被選中才進入到內(nèi)層IF。這里可以測試:如果選中N列以

后的單元格,程序并不會改變本行的填充色,但選中100以后只要在M列以前

的單元格,還是會改變本行的填充色的。

進入內(nèi)層IF,判斷行號是否大于1并且不等于變量r的值(這里的例外又分

兩種情況,要么r為0,要么r為上次的r值一一在r定義為全局變量的情況下

——這其實相當于這一次選擇的單元格跟上一次選擇的單元格在同一行),其實

這里的第二個判斷條件(即r不等于變量r的值)在r、c定義在通用區(qū)時是必須

的,但若將r=0、c=0定義在事件過程內(nèi)部時則是多余的,可以去掉“And

Selection.Roworv這個條件。(后面第4步對列的判斷條件也是一樣)

如果上述兩個IF的條件都滿足了(即不存在上述例外),那么,先對行號為

r(此處r要么為0,要么為上一次選擇的單元格的行號)、列號為1的單元格所

在的整行進行格式重置為默認值的工作,例如你上次選的是C9,這次選的F4,

那么就將A9單元格所在的那一行,即第9行,上次已用的高亮格式(主要是行

高和填充色)重新改為默認值。不過,鑒于在第2步的兩個IF結(jié)構(gòu)中已經(jīng)將上

一次操作后的痕跡都清除了,所以這兩條語句其實是可以注釋掉了。

接著,將當前行號(例如當前選中F4,行號就是4)賦給變量r。

最后,就是以r為行號、I為列號的單元格(即A4單元格)所在的整列應

用高亮顯示的填充色和行高的屬性值了。

總之,執(zhí)行了第3步后,上一次選中的行失去了高亮顯示,而本次選中的行

則被高亮顯示了。

第4步:通過IF結(jié)構(gòu)設置選中單元格所在列的格式,這里為什么不用嵌套

呢?也可以用,比如用"IfSelection.Row>=1AndSelection.Row<=21Then”來

判斷是否是選擇了1-21行(因為本例數(shù)據(jù)區(qū)只到21行)。其他設置的含義類似

于第3步,此處就不再贅述了。

第5步:為「防止可能的運行時錯誤,在第1步之前增加了容錯代碼,并禁

用了刷新,在第4步之后恢復了刷新。這三條語句可注釋掉。

返回工作表,用鼠標選取數(shù)據(jù)區(qū)域的任意單元格,效果如圖所示:

ABCDEFGH1JKLM.

1Q工編毛姓名聽在部學另入職日期工齡一季彩二季度I三季度i四季度年度總徘名獎金

2R1001楊源軍銷售部男2014/7/6615500156302245099go63560160

3R1002柳愿銷售部女2010/6/2310192501487019360312208470081470

4R1003劉衛(wèi)中銷售部男2010/8/110215001269023650154607330013330

5R1004張愛國銷售部男2012/7/158196302245024780225108937051937

6R1005馬羽銷售部女2013/7/20721300216&026310201308043031&43

7R1006雷民銷售部男2012/6/28822600235802258022130&08&02089

8R1007任正義銷?部男201V8/159165401963029460214508708071708

9R1008但明玉銷告部女2010/7/1210123001588012560226863430170

10R1009羅遠浩銷售部男2012/7/48989013210110201364047760200

11R1010馬掘華銷售部男2010/9/1291245011200236201478062050180

孔婉喑銷售部女2013/5/11294001945012410154607672011672

12R10117

19630*

13R1012李光東銷告部男2012/4/198'2369013640324508941041041

14R1013陳亦民銷售部男2009/12/111021400285402869010200&883061883

15R1014何麗佳銷售部女2010/10/229227802641032010132600446012446

16R1015于成南銷售部男2014/5/296193601936022540114507271014271

17R1016劉恒非銷售部男2015/3/151326010200136402314060240190

18R1017楊韜銷售部女2014/6/306185201542012540258007228015228

19R1018王飛15銷售部女2014/3/25616830136902214026430790W)10&09

20R1019曾東方銷售部女2010/4/281014290147B017450284607498012498

21R1020陳運華銷售部女2011/4/179201301369018740294608202091202

4、利用VBA設計一張可回收答案的課

程調(diào)查表

使用控件收集學生對課程和老師的反饋,并通過代碼將反饋意見存儲到反饋

結(jié)果中。要求:“調(diào)查表”的界面如圖所示:

填寫調(diào)查內(nèi)容并點擊“提交”后,將彈出MsgBox,同時會清空“調(diào)查表”

中已填寫的數(shù)據(jù),如圖所示:

ABCDEF

1學期教學情況調(diào)查表

2

31你的性別:

4C男C女

5

62你的年級MicrosoftExcelX

7

8

93你的專業(yè)謝謝你參與調(diào)查!

10

11

124最喜歡的課程

13廠高數(shù)

14廠音樂欣賞確定

15

165你最喜歡的老師:

176建議:

18

19

20

21

22

23提交

OA

“反饋結(jié)果”表中已收集了“調(diào)查表”中提交的信息,如圖所示:

ABCDEFGHI

序性在綿最言歡建議

號別年會號北高數(shù)數(shù)據(jù)分析體育音樂欣賞數(shù)據(jù)庫專it課的老師隆?*

3,1男2019級商務★★★★張愛國多點時間上課

操作步驟:

①在“調(diào)查表”中進行如下設置,如圖所示:

EFGHIKLM

C女2016級男女

2017級

2018

2019

經(jīng)

貿(mào)

:r體育

「專業(yè)課

②設置各控件,主要是其關(guān)聯(lián)的單元格,其中:

▼選性別用的兩個單選按鈕鏈接到K4單元格;

▼選年級用的組合框鏈接到K5單元格;

▼選專業(yè)用的組合框鏈接到K6單元格;

▼選課程用的6個復選框鏈接到K7?K12單元格;

③設置各控件的返回內(nèi)容,其中:

▼在H4單元格輸入

=IF(K4,INDEX(L4:M4,K4),"")

說明:本來,在H4單元格中只需輸入“=INDEX(L4:M4,K4)”即可達到目

的,但是將來程序清除了K列的數(shù)值后,將會在H4單元格留下“#VALUE!”這

樣的錯誤提示!所以在INDEX函數(shù)外面再套上一個IF函數(shù),使得將來K4單元

格無值時,H4單元格不要顯示出錯信息。下同。

▼在H5單元格輸入"”;

=IF(K5,INDEX(J4:J7,K5),"")

▼在H6單元格輸入

=IF(K6,INDEX(J8:J12,K6),"")

▼在H7單元格輸入

=IF(K7,

并一直填充到H12單元格。

經(jīng)過上述①?③步操作后,可以達到如圖所示的效果,可以看出前三步的操

作主要是在調(diào)查表頁面通過操作控件把需要的值放在合適的單元格里(在本例中

就是把通過選擇類控件得到的結(jié)果全部都放在H列的幾個單元格中),以備后面

的VBA代碼讀取:

?C_____DEFHIJKLM

學期教學情況調(diào)查表

向另「女2016級1男女

2019級2017級4

商務2018級1

|201搬▼2019級TRUE

商務TRUE

信管

會計

★經(jīng)濟TRUE

果程★國貿(mào)TRUE

V商敷廠數(shù)據(jù)分析廠體育

_r看樂欣賞廠數(shù)據(jù)隼v專業(yè)課

的老師:張愛國

EW|

④在VBE中的sheetI模塊中輸入如卜一代碼:

OptionExplicit

PrivateSubCommandButton1_Click()

DimnAsInteger

WithWorksheets,'反饋結(jié)果”)

n=.[A1].CurrentRegion.Rows.Count+1

Cells(n,nAn).Value=.Cells(n-1,nA").Value+1

Cells(n,nBn).Resize(l,10).Value=Application._

WorksheetFunction.Transpose([H4:H12].Value)

Cells(n,nKH).Value=[D16].Value

Cells(n,nLn).Value=[Bl8].Value

Union([D16],[B18:E21],[K4:K12]).ClearContents

MsgBox”謝謝你參與調(diào)查!”

EndWith

EndSub

這組代碼主要用于將已經(jīng)在前三步操作中放到指定位置的值進行讀取、計算

并顯示在第二張表“反饋結(jié)果”中,其中用來給整形變量n賦值的表達式中,

u.[A1].CurrentRegion.Rows.Countn即指第二張表("反饋結(jié)果”表)中A1單元

格向右及向下連續(xù)有數(shù)據(jù)單元格的總行數(shù),其間不能有空行或數(shù)據(jù)在橫向或縱向

有間斷。本例中,剛開始時這個數(shù)字為2(即A1是合并了兩行),將這個2再加

1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論