近期有很多朋友通過在微信留言和發(fā)送消息、以及發(fā)送郵件問一些關(guān)于Excel和VBA的應(yīng)用問題,在此選幾個問題作出自已的解答,希望對朋友們有所幫助。以后我會在每周末,通過問與答的形式推送一周以來我所解答的一些問題,與大家分享。
Q:我想去除工作表中公式的等號,從而直觀地獲取公式?
A:可以使用下面的VBA代碼來完成:
Sub GetFormula()
Dim wksData As Worksheet ‘代表公式所在的工作表
Dim wksFormula As Worksheet ‘放置公式文本的工作表
Dim rngFormula As Range ‘公式所在的區(qū)域
Dim rng As Range
Dim i As Long
Set wksData = Worksheets(“Sheet1”)
Set wksFormula = Worksheets(“Sheet2”)
Set rngFormula = wksData.UsedRange.SpecialCells(xlCellTypeFormulas)
wksFormula.Cells.Clear
‘在wksFormula工作表中放置公式
For Each rng In rngFormula
i = i + 1
wksFormula.Range(“A” & i).Value= Mid(rng.Formula, 2, (Len(rng.Formula)))
Next rng
End Sub
代碼中,wksData代表公式所在的工作表,即你想要獲取這個工作表中的公式;wksFormula代表放置所獲取的公式的工作表。由于Excel會將等號開頭的表達式當作公式,因此我們先除去公式開頭的等號,這樣就能順利地放置公式文本了。
Q:如何通過用戶窗體來顯示相應(yīng)的工作表?
A:在VBE中,插入一個用戶窗體,在其中放置一個列表框和兩個按鈕,然后在該用戶窗體模塊中輸入下面的代碼:
Private Sub CommandButton1_Click()
Dim i As Integer, str As String
For i = 0 To ListBox1.ListCount – 1
If ListBox1.Selected(i) = True Then
str = ListBox1.List(i)
End If
Next i
Worksheets(str).Activate
End Sub
Private Sub CommandButton2_Click()
Unload UserForm2
End Sub
Private Sub UserForm_Initialize()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
ListBox1.AddItem (wks.Name)
Next wks
End Sub
運行后的效果如下圖1所示:
圖1
其中,當用戶窗體初始化時左側(cè)的列表框顯示工作簿中所有工作表的名稱,選取其中一個工作表名稱后,單擊右側(cè)的“激活選取的工作表”按鈕,會使該工作表成為當前工作表。單擊“關(guān)閉”按鈕使用戶窗體消失。
Q:能不能遍歷所有用戶窗體,獲取每個用戶窗體的名稱?
A:在VBE中,插入一個標準模塊,輸入下面的代碼:
Sub testListUserFormName()
Dim str As String
Dim VBC As VBIDE.VBComponent
str = “已經(jīng)創(chuàng)建的用戶窗體如下:”
For Each VBC In ThisWorkbook.VBProject.VBComponents
If VBC.Type = vbext_ct_MSForm Then
str = str & vbCr & VBC.Name
End If
Next VBC
If str = “” Then
MsgBox “沒有找到用戶窗體!”
Exit Sub
End If
MsgBox str
End Sub
如果VBE中有UserForm1和UserForm2兩個用戶窗體,運行上述代碼后的效果如下圖2所示:
圖2