VBA, Быстрее загружает отображение списка

#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 для другой функции ранее, но позже отказался от этой функции. Наверное, мне следовало еще раз проверить свою логику. Большое спасибо!