[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『表示速度をあげるには』(kawai)
ユーザーフォームのListViewの表示速度を上げる方法が
あればご教授お願いします。
読み込むデータが同一book内ならば瞬時に表示できるのですが
別bookで読み込んだ場合ユーザーフォームが表示されてから
データが表示されるのに少々時間が掛かります。この解決策は
ないでしょうか?
同位置book内マクロ
別book内マクロ 2通り下記に貼ってみます
確認よろしくお願いします。
Private Sub UserForm_Activate()
Dim sh As Excel.Worksheet Dim selIdx As Long Dim i As Long
selIdx = Val(Worksheets("sheet1").Range("AA1")) If selIdx = 0 Then selIdx = 4
Set sh = Worksheets("概要") With ListView1 ''プロパティ .View = lvwReport ''表示 .LabelEdit = lvwManual ''ラベルの編集 .HideSelection = False ''選択の自動解除 .AllowColumnReorder = True ''列幅の変更を許可 .FullRowSelect = True ''行全体を選択 .Gridlines = True ''グリッド線 .ColumnHeaders.Add , "_ban", "番", 30 .ColumnHeaders.Add , "_simei", "氏名", 100 End With If Not m_ShownFlag Then With ListView1 For i = 3 To sh.Range("O" & Rows.Count).End(xlUp).Row With .ListItems.Add(Text:=sh.Cells(i, 15).Value) .SubItems(1) = sh.Cells(i, 16).Value End With
ListView1.ColumnHeaders.Item(1).Alignment = lvwColumnLeft Next If .ListItems.Count >= selIdx Then .ListItems(selIdx).Selected = True ListView1.SetFocus End If End With m_ShownFlag = True End If End Sub ’==================================
Private Sub UserForm_Activate()
Dim WB As Excel.Workbook Dim Sh As Excel.Worksheet Dim DBpath As String Dim i As Long Dim selIdx As Long
DBpath = "C:\pack\名簿.xlsm" Application.ScreenUpdating = False With ListView1 .View = lvwReport ''表示 .LabelEdit = lvwManual ''ラベルの編集 .HideSelection = False ''選択の自動解除 .AllowColumnReorder = True ''列幅の変更を許可 .FullRowSelect = True ''行全体を選択 .Gridlines = True ''グリッド線 .ColumnHeaders.Add , "_co", "??", 25 .ColumnHeaders.Add , "_code", "コード", 140 .ColumnHeaders.Add , "_name", "名前", 220 .ColumnHeaders.Add , "_saito", "担当", 200 .ColumnHeaders.Add , "_jyouken", "条件・メモ", 400 .ColumnHeaders.Add , "_touroku", "登録名", 120 .ColumnHeaders.Add , "_todoke", "回", 20 End With
If Not m_ShownFlag Then Set WB = Workbooks.Open(DBpath) Set Sh = WB.Worksheets("Sheet1") With ListView1 For i = 2 To Range("A" & Rows.Count).End(xlUp).Row With .ListItems.Add(Text:=Cells(i, 1).Value) .SubItems(1) = Cells(i, 3).Value .SubItems(2) = Cells(i, 8).Value .SubItems(3) = Cells(i, 5).Value .SubItems(4) = Cells(i, 9).Value .SubItems(5) = Cells(i, 10).Value .SubItems(6) = Cells(i, 18).Value End With
ListView1.ColumnHeaders.Item(4).Alignment = lvwColumnCenter
ListView1.ColumnHeaders.Item(5).Alignment = lvwColumnCenter
ListView1.ColumnHeaders.Item(6).Alignment = lvwColumnLeft
Next WB.Close False
Me.Caption = MyDateFormat(Date) selIdx = Val(Range("T2")) If selIdx = 0 Then selIdx = 4 If .ListItems.Count >= selIdx Then .ListItems(selIdx).Selected = True ListView1.SetFocus End If End With Application.ScreenUpdating = True End If End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
この過去ログが [[20201118192655]] 『ListView1読み込みスピードアップするには』(nobu) 参考になるでしょうか (とおりすがり) 2021/04/27(火) 06:27
(γ) 2021/04/27(火) 06:50
過去ログ参考に試してみました
>それとて抜本的な改善が期待できるものではありません。
>だましだまし使うしかないと思いますよ
やはり多少の時間は仕方ないですか・・・
了解しました
ありがとうございました
(kawai) 2021/04/27(火) 17:02
単に Application.ScreenUpdating の使いどころが適当なだけでは。 まじめにコード見てないないですが。 Application.ScreenUpdating 信者が多すぎる気がする。
(akv) 2021/04/27(火) 17:38
Application.ScreenUpdating = True の位置が、If文の中に入ってたので、単にこれではじかれていると おもっただけです。 理由は、この手の描写されないの問題でこれが多かったからです。 どうやら先走りの様みたいです。 まじめに読めば良かったですね。 (akv) 2021/04/27(火) 18:39
それは、基本的にはプロシージャを抜けた段階で
自動的にTrueになりますから致命的な話ではないと思います。
(もちろん正常な位置に書くことは推奨されますが)
例外的な事象を想定してTrueに設定して終える習慣になっていますが、
普通は書かなくても致命傷になることは稀です。
(影がついたような描画がなされることはあります。)
これが、その例外ケースにあたるとは思えません。
Falseにすることで、速度が低下するなら重要ですが、
それほど重要な論点とは思えませんでした。
(γ) 2021/04/27(火) 18:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.