フォームが表示されたあとリストビューを一番下までスクロールさせたいのですがどうすればいいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

'最後の行を表示する


ListView1.ListItems(ListView1.ListItems.Count).EnsureVisible
'最後の行を選択する
ListView1.ListItems(ListView1.ListItems.Count).Selected = True
    • good
    • 1
この回答へのお礼

ありがとうございました!!

お礼日時:2002/02/22 15:09

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QListView 項目の選択/選択解除について

 ListViewに表示する情報が1件しかないとき、その情報が常に選択された状態なので、
困っています。

 1件しかなくても、選択したり、選択を解除したりすることは出来ないのでしょうか?

 または、ListViewでは出来ないけど、他のコントロールなら出来ると言う情報があり
ましたらぜひ教えてください。

 よろしくお願いします。

Aベストアンサー

失礼しました
× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.Add , , "Dmy Data" & i
    Next i
 
  End With
End Sub

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  Dim itmX  As ListItem
  
  With Me.ListView1
    'マウス位置のアイテムを取得
    Set itmX = .HitTest(x, y)
    '取得できたなら未処理
    If Not (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '現在選択中のアイテムを取得
    Set itmX = .SelectedItem
    '取得できなかったなら未処理
    If (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '選択解除
    Set .SelectedItem = Nothing
    itmX.Selected = False
  End With
  
PGMEND:
  Set itmX = Nothing
End Sub

失礼しました
× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.A...続きを読む

Qリストビューの項目の内容を変更する方法は?

お世話になります。

VS2005を使用しています。
VB.NETのリストビューで一覧を作ったのですが、その中の項目の内容をプログラム内から変更することは出来ないのでしょうか?
色々検索してみたのですが見つかりませんでした。

現在、リストビューには4つの項目があり、100行くらい有ります。
(1つ目の項目にはチェックボックス付き)
その中の、項目の内容を変更したいのです。

やはり、以下のようにしなければいけないのでしょうか。
1)一旦対象行の内容を保存
2)対象行を削除
3)保存先で内容変更
4)リストビューに再追加

よろしくご享受下さい。

Aベストアンサー

ListView1.Items(1).SubItems(2).Text = "ABC"
とかでは?

QListViewから選択中の文字列を取得

VB2005の初心者です。
タイトル通り、ListViewから選択中の文字列によって処理を変えるプログラムを構築しようとしているのですが、うまくいきません。

ComboBoxの場合では
Private Sub button1_Click~
If ComboBox1.SelectedItem = "テスト" Then
処理
End if

でうまくいったのですが、ListViewの場合では
Private Sub button1_Click~
If ListView1.SelectedItems = "テスト" Then
処理
End if

と指定すると
「エラー1これらの引数で呼び出される、アクセス可能な '=' がないため、オーバーロードの解決に失敗しました」
とエラーがでます。


ListViewから選択中の文字列を取得するには「.SelectedItems」では取得できないのでしょうか?
VBに詳しい方ご教授お願いします。

Aベストアンサー

ComboBoxはSelectedItemと単数形ですよね
ListViewの場合SelectedItemsですから選択された複数の項目といったことになります

SelectedItemsはコレクションになるので 最初の選択項目なら
ListView1.SelectedItems(0)となりますので

if ListView1.SelectedItems(0).Text = "テスト" Then
といった具合に使います

もっとも選択アイテムない場合も考えられるので上記の前に
If ListView1.SelectedItems.Count = 0 then
  Exit Sub
End if
を追加したほうがいいかもしれません

QListViewで、非表示列って作れますか?

VB6.0です。

一覧にListViewを使用しているのですが、
非表示にしたい列があるのですが、出来ませんか?
列幅は可変としているので、列幅を0にしておく方法は使えません。

一覧には見せないけど、更新項目なので、
いちいちもう1度読み直すのは面倒なので、非表示で持っていたいのですが…。
何か方法ありますか?

Aベストアンサー

どんな感じで ListView にアイテムを追加してるのか分かりませんが、
見せたくない項目をキーにしてしまうとか? キーが重複しそうなら連番
でも仮につけとけば良いし。

With ListView1.ListItems.Add
  .Key = strKey & Chr(0) & Cstr(lngItemCnt)
  .Text = strText
  .SubItems(1) = strSub1Text
  .SubItems(2) = strSub2Text
  .SubItems(3) = strSub3Text
End With

このようにして、

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

  MsgBox Left$(Item.Key, InStr(Item.Key, Chr(0)) - 1)

End Sub

こんな感じで非表示にしたい項目を拾うのは?

> ただし、SORT機能をつけた場合、ずれますよね。

その通りですが、それが問題になりそうですか?

並びが気になるならソートしたときに非表示の ListView も同時に同項目で
ソートすれば良いだけだし、そもそも配列も非表示の ListView は並び変え
は必要ないと思いますよ。

表示されている ListView の ItemClick イベントなどで Key または Text
は拾えるので、あとはそれを配列や 非表示 ListView から探すだけでは?

表示されていないものに並びは関係ないと思いますが、いかかでしょう?

ただ、こっちの方法は効率悪いですね(´・ω・`)

どんな感じで ListView にアイテムを追加してるのか分かりませんが、
見せたくない項目をキーにしてしまうとか? キーが重複しそうなら連番
でも仮につけとけば良いし。

With ListView1.ListItems.Add
  .Key = strKey & Chr(0) & Cstr(lngItemCnt)
  .Text = strText
  .SubItems(1) = strSub1Text
  .SubItems(2) = strSub2Text
  .SubItems(3) = strSub3Text
End With

このようにして、

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

  MsgBox Left$(...続きを読む

QExcel VBA ListViewサブアイテムの文字色

Excel VBA ListViewにおいて、特定の行のサブアイテム(2列目以降)の文字色を変更することは可能でしょうか?

Aベストアンサー

ListView1.ListItems(?).ListSubItems(?).ForeColor = RGB(?,?,?)
と言う形では

QListViewで複数選択された項目を一度に削除する方法

ListViewで選択された複数のアイテムの値の取得方法と複数選択された項目を一度に削除する方法を教えてください。

Aベストアンサー

サンプルです。
一度に取得はムリなので、ループを使用します。

  Dim itmLvw As ListItem
  Dim i    As Long
  
  '選択されているアイテムの情報を調査
  For Each itmLvw In ListView1.ListItems
    If itmLvw.Selected Then
      Debug.Print itmLvw.Index & "番目が選択されています"
    End If
  Next itmLvw
  
  'リストの後ろの方から、選択されているアイテムを削除
  For i = ListView1.ListItems.Count To 1 Step -1
    Set itmLvw = ListView1.ListItems(i)
    If itmLvw.Selected Then
      ListView1.ListItems.Remove itmLvw.Index
    End If
  Next i

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Qcheckbox付きListViewで デフォルトチェック

チェックボックス付きのListViewコントロールで初期値としてチェックボックスにチェック
をして表示したいと思っております。

Listviewにデータを追加して(subitemもあるため)その後
ListView1.Item(i).Selected = True
をしているのですが、チェックして表示されません。

項目が表示された後、何れかの項目をチェックしようとするとチェックが表示されます。

どのようにすれば最初から表示されるのでしょうか?

初歩的な質問かもしれませんが、お願い致します。

Aベストアンサー

Selectedではなく CheckedプロパティをTrueに設定しましょう

ListView1.Item(i).Checked = True
といった具合です

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QエクセルVBAでフォームのListboxをスクロールするには?

エクセルVBAでフォームのListboxをスクロールするには?
ワークシート上に貼り付けたリストボックスがあります。
このリストボックスはOLEObjectではなくフォームのリストボックスです。

For Each lb In .ListBoxes
If lb.ListCount <= 4 Then
lb.ListIndex = 1
Else
lb.ListIndex = 16
ここで16番目が見えるようにスクロールしたいのです。
End If
Next lb

このスクロールさせる方法がわかりません。
ご教示いただければ幸いです。

Aベストアンサー

>手動スクロールの動きが変ですし
失礼。
'-----------------------------------------------------------------
Sub sbChange()
  'ListBoxes(1)の表示行数でMXを設定
  Const MX As Long = 11
  Dim x As Long
  With ActiveSheet
    x = n - .ScrollBars(1).Value + 1
    If x < 1 Or x > MX Then
      .ListBoxes(1).ListIndex = 0
    Else
      .ListBoxes(1).ListIndex = x
    End If
  End With
End Sub
'-----------------------------------------------------------------
Sub test()
  Dim x
  x = InputBox("ListIndex")
  With ActiveSheet
    .ListBoxes(1).ListIndex = 1
    .ScrollBars(1).Value = x
    n = x
  End With
End Sub
'-----------------------------------------------------------------
Sub LbChange()
  With ActiveSheet
    n = .ListBoxes(1).ListIndex + .ScrollBars(1).Value - 1
  End With
End Sub
'-----------------------------------------------------------------
上記に差し替え&追加してsbChangeのMXを設定し、
LbChangeをListBoxes(1)にマクロ登録すれば少しはマシになります。
ですが、手が込み過ぎておすすめしないのは変わりありません。

また、
>モードレスなUserFormにListBoxを配置して使う方が良いと思います。
ここで書いたListBoxはActiveXコントロール(コントロールツールボックス)のListBoxの事です。
#もちろんExcel.ListBoxはUserFormに置けませんから
#お判りでしょうけど念のため。
#ActiveXコントロールは直接ワークシート上に配置するよりも
#UserFormに配置して使ったほうが不具合少なく、良いかと思ったもので。

>手動スクロールの動きが変ですし
失礼。
'-----------------------------------------------------------------
Sub sbChange()
  'ListBoxes(1)の表示行数でMXを設定
  Const MX As Long = 11
  Dim x As Long
  With ActiveSheet
    x = n - .ScrollBars(1).Value + 1
    If x < 1 Or x > MX Then
      .ListBoxes(1).ListIndex = 0
    Else
      .ListBoxes(1).ListIndex = x
    End If
  End With
End Sub
'--------------------------------------------------...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング