如何用VBA代碼添加Form窗體表單,看完全明了,詳細講解

2021-01-12 江覓易見

NO.1

使用VBA代碼添加Form窗體表單,對於一些初學者來說,似乎真的很為難。

除了對代碼陌生之外,並不知道如何來進行操作添加後的窗體。

這也是一件十分困擾的事情。

本節將介紹一下,使用vba代碼添加窗體,然後在窗體上添加控制項,如標籤按鈕等等方法。

NO.2

vba中 VBComponents集合裡包含了模塊、窗體、類模塊。

添加窗體就用到VBComponents.Add()來進行操作。

如:

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)

表示添加一個窗體。

其中vbext_ct_MSForm參數,表示將窗體添加到集合。

類模塊vbext_ct_ClassModule標準模塊vbext_ct_StdModule。

新建表單後,運行程序什麼也看不到,還需要對表單進行屬性設置。

這就是像是蓋一棟大樓,只是做了大樓的一個工程設計,僅僅是立項要蓋這棟大樓,而沒有真正實施蓋樓的過程。

所以,名義上的新建了這棟樓,但其並沒有變成實際意義上的大樓。

感覺有點不可接受,不管怎麼說,以上代碼並不能讓你看到新建的窗體。

接下來,要對窗體進行一些屬性設置,就是說要真正的施工對進入工地蓋樓了。

設置窗體屬性,要用到Properties()。中文意思就是不動產、財產、所有物等等。

Properties()括號裡添加窗體屬性名稱,然後等於號,屬性值。

這樣才能夠對新建的Form窗體進行實體化賦值。

如下代碼:

.Properties("caption") ="我是新建窗體"'窗體標籤.Properties("width") = 900'寬.Properties("Height") = 600'高

更多窗體屬性可查詢幫助。

上圖為例,將對表格內容作為新建表單的標題名稱、寬、高,包括窗體裡的標籤名稱和按鈕進行自定義設置。

NO.3

添加窗體之後不是我們的初衷,因為窗體只是一個容器,我們要往裡面放很多東西。

這就像大樓主體已經完工,但是不能住人呀,四面沒有窗戶,也沒有各類消防設施,更沒有電梯,那麼,這就是說,並沒有完全得到我們想要的大樓樣子。

還要對大樓進行配套設施的安裝。

添加標籤

那我們再加一個標籤吧,就像在大樓頂上安裝一個XXX小區的名稱,是不是有點意思了。

添加標籤代碼:

With ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Designer.Controls.Add("Forms.Label.1")End With

由於新建的窗體還處在編輯模式下,所以不能直接引用Controls.Add(),要在其前面加Designer。

Designer中文意思就"設計師"。看到了吧,整個過程當中,不能以一種既定的事實來對待這件事情。

就像不能對一棟在建的大樓以成熟小區來對待一樣,不能隨意進出,也不能以為它是一個有人住的地方,真正意義上它還是不算是一個小區。

只有交付使用之後,才能作為一個正常的對象來對待。

所以,要特別注意的地方在對表單裡的對象進行屬性設置的時候,前面添加"設計師"Designer。

示例:

默認F為新建的窗體對象。

Dim Lobj As ObjectSet Lobj = F.Designer.Controls.Add("Forms.Label.1")With Lobj.Caption = "恭喜!你已經成功新建了一個表單窗體。".Top = 50.Left = 0.Height = 90.Width = .Parent.Width.TextAlign = 2With .Font.Size = 28.Name = "黑體".Bold = TrueEnd WithEnd With添加按鈕同理,添加按鈕用如下代碼:With ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Designer.Controls.Add("Forms.CommandButton.1")End With

NO.4

顯示窗體

如此進行,對代碼細緻的編寫之後,構造整個表單的過程就完成了。

但是,我們還是不能看到它的模樣,因為沒有把它呈現在眼前。

就比如,在北京蓋了一棟大樓,而你在廣州。

想要看到這樓,是不是有兩個辦法,一你親自來北京,站到大樓下面,二給大樓拍個視頻,通過視頻信息傳輸設備觀看。

這就是說,這樓是蓋好了,在你看到它之前,還有一些方法去完成,不然,真的難說這樓是個什麼樣子。

說了這麼多,編程就是這麼玄乎,真真假假,假假真真,要抓到代碼表示的實際東西,還真不是一件輕鬆的事情。

我們接著就是要把窗體呈現在電腦屏幕上,讓自己或別人看到它,而不只是某種意義上的代碼構造完成這種玄乎的事情。

顯示出來也需要一行代碼,也十分簡單一行代碼,如下:

F默認新建的窗體對象

VBA.UserForms.Add(F.Name).Show

運行後效果如下圖

是不是完整了一些,如不添加標籤和按鈕,那麼什麼也沒有。

這樣新建後的表單就有了更多的內容。

NO.5

刪除窗體

最後一步刪除窗體,這個不提倡使用,但要學會使用。

F為默認新建窗體對象變量。

ThisWorkbook.VBProject.VBComponents.Remove F

這句意思是從VBComponents集合中移除F窗體。

這個不能用大樓來比喻,沒有移除大樓的過程,而且操作起來也太困難,也現實中最大把設計圖紙銷毀,完成移除。

NO.6

完整代碼

以上代碼可作為學習之用,以下偌直接複製到自己的VBE窗體中使用即可。

新建窗體過程函數

Private Sub AddNewForm()Dim w As WorksheetSet w = ActiveSheetDim F As ObjectSet F = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)With F.Properties("caption") ="我新建的表單窗體".Properties("width") =900.Properties("Height") = 600Dim Lobj As ObjectSet Lobj = F.Designer.Controls.Add("Forms.Label.1")With Lobj.Caption = "恭喜!" & VBA.vbCrLf & VBA.vbCrLf & "你已經成功新建了一個表單窗體。".Top = 50.Left = 0.Height = 90.Width = .Parent.Width.TextAlign = 2With .Font.Size = 28.Name = "黑體".Bold = TrueEnd WithEnd WithWith F.Designer.Controls.Add("Forms.CommandButton.1").Caption = "關 閉".Width = 150.Height = 28.Top = Lobj.Top + Lobj.Height + 50.Left = .Parent.Width \ 2 - .Width \ 2End With''''''''''''''''''''''''''''''''''''''''''' Button按鈕 CodeModuleWith ThisWorkbook.VBProject.VBComponents(F.Name).CodeModule.InsertLines 2, "Private Sub CommandButton1_Click()".InsertLines 3, "Unload me".InsertLines 4, "End Sub"End WithEnd WithVBA.UserForms.Add(F.Name).ShowThisWorkbook.VBProject.VBComponents.Remove FEnd Sub

NO.7

學習VBA,從0開始構造一個應用界面,十分不好掌握其中一些代碼應用。

有些代碼在編輯過程中會遇到很多問題,同時也會增加許多不明白的問題,需要一一解決。

本身VBA已經給出很多常用的一些對象,直接拿來使用就可以,但是對於喜歡結構編程方法的人來說,面向對象真的是小兒科。

怎麼辦呢,呵呵!努力吧!

---END---

歡迎關注、收藏

相關焦點

  • Excel vba 無邊框窗體,如何實現
    文/江覓易見Excel vba製作無邊框是一個特殊的需求,有些時候,在一些功能上需要運用到沒有標題欄的窗體,沒有最大化、最小化和關閉功能按鈕。這就需要做一個無邊框的窗體。當然了,也可出做一些個性的界面功能來,那就看自己喜好了 。換一個背景圖片,是不是具有很強衝擊感,作為廣告之用還是有一定的效果。雖然無標題感覺沒頭沒尾,但是有一種視覺感覺很強,一般來說,作為頁面展示顯得更合適。
  • HTML+CSS:使用form表單控制項,與用戶交互
    今天這篇文章我們主要來看一下表單的控制項都有哪些,如何使用表單標籤,與用戶交互。(1)網站怎樣與用戶進行交互?答案是使用HTML表單(form)。表單是可以把瀏覽者輸入的數據傳送到伺服器端,這樣伺服器端程序就可以處理表單傳過來的數據。
  • html中form表單標籤的詳細介紹
    本篇將介紹的是html中form表單標籤的用法,有興趣的朋友可以學習一下!在html中,表單是經常用到的,用來與用戶交互並提交數據。今天要介紹的就是表單標籤form標籤,接下來我們就一起來看看它的用法吧!「form」作為英文單詞有「表格」的意思,那它在html中作為標籤又充當什麼樣的角色呢!我們一起來看看吧!
  • VBA中控制項與窗體學習(VBA學習方案系列講座之九)
    在我的《VBA之EXCEL應用》對控制項的利用我給出了下面的解釋:控制項是我們代碼的一個載體,有了這些,我們的代碼會更加豐富,也是實現面向對象編程的有效體現。 這裡我再解釋得透徹些,控制項是可視的,可以搭建起用戶和後臺代碼交互的簡單平臺,若干個這樣平臺組合在一起,就是我們解決問題的手段了。
  • Excel vba 批量刪除窗體控制項
    文/江覓易見動態創建窗體控制項後,可以進行動態刪除,如果是設計時從工具欄添加的控制項,不能動態刪除,不要問為什麼vba就是這麼規定的,也可以認為這是一個BUG,反正就是不能。其實,vba編程並不十分理想,因為有很多不可預知的問題出現,而且依賴環境也十分不友好,由於版本不同,同樣的文件就不能很好地運行,這也是一個不小的麻煩。因為在自己的電腦上編寫好的程序,換一臺電腦可能就無法運行,運行環境改變相應地要做一些系統設置,不然程序不能很好地發揮作用。
  • 一天收穫一點,Visual C#窗體的設置及加載代碼
    對於窗體大小的設置也可直接用滑鼠拖動窗體改變大小;但是在窗體運行時,要讓窗體根據填裝的控制項進行進行自動改變,就要使用AutoSize和AutoSizeMode屬性,將屬性列表中的AutoSize設置為True:
  • JavaScript之阻止form表單提交三種方式
    今天和大家分享一下,關於如何阻止form表單的提交。一、為什麼要阻止form表單的提交呢?以及使用場景我們在工作中,比如一個登錄頁面,當填完用戶登錄信息後,需要對用戶信息進行校驗,如果有問題,那麼就不應該將數據提交到後臺,而是在前臺阻止,接下來我們看一下,如何阻止form表單的幾種方式1、表單第一種阻止方式:form結合onclick事件來阻止form表單的提交<head><meta charset="UTF-8"
  • vue結合form-create組件生成動態表單
    最近製作一套體檢系統,其中一個功能,根據科室檢查項目來生成表單,內置到資料庫中,採用靜態表單不利於後期增加和維護,以及擴展,於是找到一個組件,form-create可以動態生成表單,根據不同醫院維護的醫療項目來動態生成檢查單,以及檢查報告,適用於大部分科室了。form-create 是一個可以通過 JSON 生成具有動態渲染、數據收集、驗證和提交功能的表單生成器。
  • 第20章 Django實戰篇,Form與表單
    有了數據表,表單收集數據後,才不會感慨:」我這該死的又無處安放的魅力呀!」在開發的過程中,建議先從新增功能開始,有了它,其他的便不在話下,稍微調整一下,就可以實現修改功能,再稍微調整一下,就可以實現詳細信息功能。至於列表,有了(新增的)數據,才華才好展露,分頁才具直觀感。
  • HTML表單4(form的action、method屬性)——零基礎自學網頁製作
    這裡就涉及到一個問題,一個網站會有針對不同用戶的信息註冊表單以及相應的信息處理程序,比如我們註冊頭條號就有&34;、&34;、&34;和&34;的區分。如何使不同的表單找到相應的處理程序呢?在<form>標籤中,有一個action屬性就是為這個表單信息指定處理程序的。
  • 三分鐘為你細數 Vue el-form 表單校驗的坑點
    ;groupData.name"/> </el-form-item></el-form>這段代碼中 el-form 的 model 是 groupData,那麼 el-form-item 中所有需要校驗的表單的
  • 動態生成的表單如何用 el-form 校驗,你知道嗎?
    背景Vue 的 el-form 提供了表單校驗功能,常規用法是用 但是有一種情況,如果表單位於 v-for 標籤中,是動態生成的,該怎麼使用 el-form-item 來校驗呢?此外,如果待校驗的表單是 el-popover 組件中的 readonly 表單,blur 觸發不穩定,該怎麼處理呢?
  • 「React乾貨」:使用antd模塊的Form表單組件快速創建表單「一」
    具有數據收集、校驗和提交功能的表單,包含複選框、單選框、輸入框、下拉選擇框等元素。何時使用用於創建一個實體或收集信息。需要對輸入的數據類型進行校驗時。基礎使用使用Form表單組件的基礎外框,如果你使用class方式定義React組件,以下代碼是常規使用方式。
  • Excel vba 動態添加按鈕控制項 CommandButton
    文/江覓易見動態添加按鈕有時在vba編程中運用很多,也是一個比較容易實現的過程。這裡寫了一個很小的例子,做個示範,動態添加按鈕,而且按鈕數量不限,可批量添加,位置、大小、按鈕Caption自定義。如果對代碼不很熟悉,套用也較方便。下面是動態效果圖,文章結尾有代碼,可以參考使用。
  • 基於 Vue.js 表單創建器FormCreate
    今天繼續給小夥伴們分享一款超強大的Vue表單生成器FormCreate。$ npm i @form-create/element-ui -S// iView 2.x|3.x 版本表單生成器$ npm i @form-create/iview -S// iView 4.x 版本表單生成器$ npm i @form-create/iview4 -S// Ant-design-vue 1.5.3+ 版本表單生成器$ npm i @form-create/ant-design-vue
  • 如何用vba代碼創建超連結,把這個方法學會,就懂了
    這裡介紹一下對應的vba代碼來如何實現,添加、刪除和收藏超連結功能。本例用到一個對象,Hyperlink。超文本連結對象,和它的集合對象Hyperlinks。其實vba裡大多數都有單數和複數的對象,分別表示一個和多個。
  • layui的彈出框、form表單、表格使用常見問題解決方案
    其外在極簡,卻又不失飽滿的內在,體積輕盈,組件豐盈,從核心代碼到 API 的每一處細節都經過精心雕琢,非常適合界面的快速開發。最近公司開始全面的更改前端的框架,由bootstrap更改為layui'框架,在嘗試使用layui編寫前臺邏輯時,遇到了很多的坑,在此做一些常用坑的解決辦法的總結。
  • 如何實現Excel單元格查詢功能,Find方法詳細講解
    其實,在執行此功能的時候就是一些代碼在運行,那麼使用vba代碼如何實現查詢呢?Range對象中的Find方法給我們提供一個很好的解決辦法,可以方便地執行表格內容查詢功能。Find相當於Excel中查找與替換對話框所執行的功能。本節主要介紹如何應用Range對象的Find和FindNext對象。
  • HTML表單元素初識1——零基礎自學網頁製作
    如何向自己的頁面中添加表單呢?添加表單的操作和添加表格類似。首先我們要在頁面中寫入<form></form>標籤,這是向瀏覽器聲明這裡是個表單,它本身並不會顯示在頁面中,但是可以全局控制表單元素的一些屬性,就像表格中的<table></table>標籤。
  • Contact Form 7 最新版本如何實現提交表單後跳轉到指定頁面
    contact form 7最近有朋友問我WordPress的表單插件Contact Form 7 怎麼實現提交表單後跳轉到指定頁面。經過查找資料我發現之前使用在插件中附加設置中添加 on_send_ok 的方法已經停用了。Note: The method using on_sent_ok hook is no longer recommended. This function is scheduled to be abolished by the end of 2017.