#excel #vba #forms #listbox
Вопрос:
У меня есть этот большой набор данных в Excel (50-100 строк по 17 столбцам), который я хотел бы просматривать после добавления нового набора данных каждый раз, но я обнаружил, что это занимает очень много времени и тратит так много времени на загрузку ListBox
. Интересно, есть ли способ улучшить код VBA, чтобы он загружался ListBox
быстрее.
Dim n As Long Dim xRow As Long Dim Prefill_Row As Long Dim Last_Row As Long Dim Last_Col As Integer Dim sh As Worksheet 'Set current worksheet Set sh = ThisWorkbook.Sheets("DataInput") 'Location of the active worksheet Last_Row = [Counta(DataInput!A:A)] 'identifying the last row For n = 1 To Last_Row xRow = sh.Cells(Rows.Count, Comment_ColumnNumber).End(xlUp).Row 'how many filled rows Prefill_Row = xRow 1 'find next row to be filled With frmForm 'frmForm is the name of VBA form ... ... 'codes to write inputs from VBA form into Excel spreadsheet 'display windows setting .ListBox1.ColumnCount = 17 'Display window setting contains 17 col .ListBox1.ColumnHeads = True .ListBox1.ColumnWidths = "100,60,60,80,0,80,0,80,80,80,80,100,120,250,150,100,120" 'display data from the worksheet tab named DataInput using RowSource If (Last_Row gt; 1) Then .ListBox1.RowSource = "DataInput!A2:Q" amp; (Prefill_Row) Else .ListBox1.RowSource = "DataInput!A2:Q2" End If End With
Комментарии:
1. Кажется ненужным каждый раз задавать свойства количества столбцов/заголовков/ширины. Ваш набор данных не особенно велик — вы уверены, что задержка связана со списком, а не с записью в ячейки?
2. Что
For n = 1 To Last_Row
происходит ?3. @CDP1802 @T. M. задача
for loop
состоит в том, чтобы получить номер строки следующей ячейки, которую необходимо заполнить, повторно использовать номер строки для заполнения входных данных в Excel и отображенияListBox
. ТоNext
есть послеEnd With
. Он был опущен после копирования моего кода. Возможно, это длительнаяfor loop
причина задержки?4. В этом случае похоже, что вы устанавливаете значение
.ListBox1.RowSource
на каждой итерации n, а не только один раз в конце.5. @CDP1802 Круто, теперь он работает очень эффективно. Спасибо, что подобрали это! Я думал использовать это
for loop
для другой функции ранее, но позже отказался от этой функции. Наверное, мне следовало еще раз проверить свою логику. Большое спасибо!