如果從數據庫下載的數據超出組合框的範圍,則不會顯示新項目。 為了解決這個問題,List 或 Combo 框下面的範圍需要擴展或收縮以匹配數據。 本文研究如何自動執行此操作。
假定閱讀器顯示了開發人員功能區,並且熟悉VBA編輯器。 如果沒有,請使用Google“ Excel開發人員標籤”或“ Excel代碼窗口”。
顯示組合框的專業方法是根據需要擴展或收縮它們的範圍。 例如:
動態範圍的關鍵是使用函數 =countA 監視相關列中填充的行數。 這個函數計算一系列單元格中填充的元素,直到它到達最後一個; 在上圖中的第一個圖表的情況下,這將是第 11 行。
要自動維護一個範圍,需要定義的名稱來跟踪填充行的數量。 例如,我們使用 eCol(結束列)和 eRow(結束行)來定義我們範圍的邊界。 我們填充的行越多,eRow 的值就越大。
上面定義的名稱根據 eCol 中填充的行數 (eRow = 1) 將列表設置為一列寬 (eCol = 11)
最後,標題出現在“A2:A”和 eRow 範圍內。 您會注意到 Index 函數用於建立名為“Titles”的區域中的最後一個單元格。 在此階段,範圍“A2:A”和 eRow 有效地轉換為“A2:A11”。
我們可以使用 Auto_open 子過程在工作簿打開時自動設置動態範圍,該過程在工作簿變得可見之前運行。
守則
打開工作簿並用組合框和一些數據填充它。 可以找到本練習中使用的示例工作簿 此處.
打開VBA代碼窗口,然後插入模塊。 將以下代碼複製到模塊中。
Auto_Open 事件設置動態範圍“標題”的最後一行和最後一列值,並記錄隨後所做的更改。
Sub auto_open()
Dim eRow As Integer, eCol As Integer, i As Long
On Error Resume Next
'Clear the present define names, to avoid any duplications
activeworkbook.Names("eCol").Delete
activeworkbook.Names("eRow").Delete
activeworkbook.Names("Titles").Delete
Range("A1").Select
'Titles will appear in the first column, A in this case
eCol = 1
'Find the last populated row
eRow = Sheets("Main").Cells(Rows.Count, eCol).End(xlUp).Row
'Define the names
activeworkbook.Names.Add Name:="eCol", RefersTo:="=COUNTA($1:$1)"
activeworkbook.Names.Add Name:="eRow", RefersToR1C1:="=COUNTA(C" & ColNo & ")"
activeworkbook.Names.Add Name:="Titles", RefersTo:="=A2:INDEX($2:$200," & "eRow," & "eCol)"
End Sub
Sub DropDown1_Change()
MsgBox "Directed by " & Cells(2, 5)
End Sub
注意:所有內容都放在一個頁面上以簡化查看。 通常,A & B 和 D & E 列中的值將位於另一個可能隱藏的工作表上。 另請注意,第二列 B 未用於此特定練習中的範圍定義; B列的值通過組合框的單元格鏈接屬性以通常的方式獲得(D2反映了範圍中第三個元素的選擇,即tarts 在 A2 處,再加上“E3”中的索引函數來找到導演(=INDEX(B:B,D2+1,1))。
保存工作簿,然後重新打開它。 組合框最初將由 Auto_open 填充。 將項目添加到 A 列和 B 列,並觀察組合框的變化。
搶救損壞的 Excel 文件
有時,Excel 文件可能會在 Excel 意外崩潰後損壞。 如果您有備份,那麼您可以簡單地使用備份恢復數據。 否則,您可能需要尋求專業的專家或工具來恢復 損壞的Excel 文件。
作者簡介:
Felix Hooker是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 rar 修復 和sql恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM



