tft每日頭條

 > 遊戲

 > 全民一起學vba提高篇第36回

全民一起學vba提高篇第36回

遊戲 更新时间:2024-11-25 00:48:31

如何寫VBA代碼,一直在有朋友詢問這個問題,其實,寫代碼要有"搭積木"的思想,有了大量的資源,也就是積木的原型,你去利用,去擺放,這時最好的方法。寫代碼并不難,成為代碼高手也不難,在這種思路的指引下,你很快也會成為高手。我會在我的文章中會逐漸的講解這種思想,和大家分享。教給大家如何去擺放積木,如何利用"積木"。這些"積木"是《VBA代碼解決方案》中的内容,朋友們也可以自己積累。

今天就帶大家利用這套教材的内容完成一個稍微複雜的程序制作,需求如下:

1.首先用戶要和計算機進行對話,用戶将錄入一個人名的數據

2.VBA程序要根據用戶的需求,在工作"數據1"的工作表中進行A列的完全匹配查找(為了減少篇幅,我設定是唯一的值)

3.找到數據後,要把數據導出到一個文本文件,反饋給用戶。

上述的過程其實是很多地方大家都會看到的,或者有這類程序的影子,隻不過要比上面的要求是複雜些,我這裡就隻講些方法,具體的應用是千差萬别的,讓讀者自己發揮吧。

為了實現上述的三個需求我們設計了如下的步驟:

找到第40講和第7講:

全民一起學vba提高篇第36回(我們一起34)1

全民一起學vba提高篇第36回(我們一起34)2

打開《VBA代碼解決方案》第二冊:

全民一起學vba提高篇第36回(我們一起34)3

​ 找到第77講或78講

全民一起學vba提高篇第36回(我們一起34)4

分别考出上述第40、第7、 第77講的代碼。

第40講inputbox代碼:(積木1)

SubMyInputBox()

Dim sInt As String

Dim r As Integer

r = Sheet1.Range("A65536").End(xlUp).Row

sInt = InputBox("請輸入添加人員的姓名:")

If Len(Trim(sInt)) > 0 Then

Sheet1.Cells(r 1, 1) = sInt

Else

MsgBox "您沒有輸入内容!"

End If

End Sub

第7講find代碼:(積木2)

SubmyFind()

Dim StrFind As String

Dim Rng As Range

StrFind = InputBox("請輸入要查找的值:")

If Trim(StrFind) <> "" Then

With Sheet1.Range("A:A")

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then

Application.Goto Rng, True

Else

MsgBox "沒有找到該單元格!"

End If

End With

End If

End Sub

第77講CreateTextFile方法代碼:(積木3)

Sub MyCreText()

Dim MyFile As Object

Dim myStr As String

Dim j As Integer, iAs Integer

Set MyFile = CreateObject("Scripting.FileSystemObject") _

.CreateTextFile(ThisWorkbook.Path & "\" & "人員表單.txt", True)

For i = 1 To Range("A65536").End(xlUp).Row

myStr = ""

For j = 1 To Range("IV"& i).End(xlToLeft).Column

myStr = myStr & Cells(i, j) & ","

Next

myStr = Left(myStr, (Len(myStr) -1))

MyFile.WriteLine (myStr)

Next

MyFile.Close

Set MyFile = Nothing

End Sub

我們的積木就準備好了,當然這些積木讀者要了然于胸啊,這樣才能去快速的找到。下面我們要搭建積木了,我們注意到上述第7講FIND函數的代碼中包含了第40講的INPUTBOX的代碼,那麼這就可以略去了第40講的内容了,把積木1扔掉,用積木2和3即可,直接把積木2FIND的代碼拷貝如下,同時為了看清楚,修正一下格式:

Sub myFind()

Dim StrFind As String

Dim Rng As Range

StrFind = InputBox("請輸入要查找的值:")

If Trim(StrFind) <> "" Then

With Sheet1.Range("A:A")

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then

Application.Goto Rng, True '找到值後将執行的操作

Else

MsgBox "沒有找到該單元格!"

End If

End With

End If

End Sub

上述代碼中找到值後将執行的是: Application.Goto Rng, True 操作,而我們要求執行的是數據的導出操作,那麼好了,就把上述Application.Goto Rng, True 操作換成代碼77講的内容就OK了。

下面為修正後的代碼及其注釋:

Public myhs As Integer '設置全局變量,用來傳遞找到了要找的人名時記錄該單元格的行數

Sub myFind()

Dim StrFind As String

Dim Rng As Range

StrFind = InputBox("請輸入要查找的人名:") '步驟1 利用INPUTBOX 函數進行人機對話

If Trim(StrFind) <> "" Then '要求用戶錄入的數據不能為空值

With Sheets("數據1").Range("A:A") '此處修正了工作表的名稱

'完全匹配查找,完成步驟2 利用FIND 函數進行查找

Set Rng = .Find(What:=StrFind, _

After:=.Cells(.Cells.Count), _

LookIn:=xlValues, _

LookAt:=xlWhole, _

SearchOrder:=xlByRows, _

SearchDirection:=xlNext, _

MatchCase:=False)

If Not Rng Is Nothing Then

myhs = Rng.Row '設置傳遞函數,當找到了要找的人名時記錄該單元格的行數

MyCreText '如果找到了用戶要求的人名将進入MyCreText過程

Else

MsgBox "沒有找到該人名!"

End If

End With

End If

End Sub

Sub MyCreText() '如果找到了用戶要求的人名将執行步驟3 利用CreateTextFile方法創建文本文件作為客戶的需求。

Dim MyFile As Object

Dim myStr As String

Dim j As Integer ', i As Integer I的變量去掉,用了Myhs

Set MyFile = CreateObject("Scripting.FileSystemObject") _

.CreateTextFile(ThisWorkbook.Path & "\" & "人員資料.txt", True) '把要輸出的文件名稱修正為人員資料

' For i = 1 To Range("A65536").End(xlUp).Row '此行代碼去掉,因為值是唯一的

myStr = ""

For j = 1 To Range("IV" & myhs).End(xlToLeft).Column

myStr = myStr & Cells(1, j) & ":" & Cells(myhs, j) & ", " '此處修正代碼加入輸出數據的擡頭

Next

myStr = Left(myStr, (Len(myStr) - 1))

MyFile.WriteLine (myStr)

'Next '此行代碼去掉,因為值是唯一的

MyFile.Close

Set MyFile = Nothing

MsgBox ("OK") '添加程序完成的提示

End Sub

代碼截圖:

全民一起學vba提高篇第36回(我們一起34)5

全民一起學vba提高篇第36回(我們一起34)6

上述的講解中你會發現,有了"積木",代碼隻是改了改。改動的幅度很少,這樣大量的節約了你的大量時間。

下面我們看代碼的執行:

數據1工作表的截圖,我們要查找的是A115:

全民一起學vba提高篇第36回(我們一起34)7

運行後提示輸入要查找的人名:

全民一起學vba提高篇第36回(我們一起34)8

運行結束:

全民一起學vba提高篇第36回(我們一起34)9

運行結果顯示:

全民一起學vba提高篇第36回(我們一起34)10

再次重申一點,做程序就如同搭積木,盡可能不要去寫代碼,你把必要的積木塊拿來,組合好,你要做的隻是組合、修正即可,就這麼簡單。

我的《VBA代碼解決方案》中會有各式各樣的獨立的積木,給你分享,給你利用。當然你要弄懂每講的内容才能運用自如,才能組合、修正代碼。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved