CAFE

카페자료

VBA ListView 열 정열 문제

작성자곽완근|작성시간11.04.15|조회수350 목록 댓글 0

VBA ListView 열 정열 문제
아래 그림과 같이
No 열 부분에 숫자가 들어가는데요
컬럼헤더 클릭할때 정열이 잘 되지 않고 아래 그림처럼 되네요
제가 알기로는 ListView 자체가 데이터를 String으로 처리하기 때문에 그러는거 같은데.....
자료나 정보도 부족한거 같고, 이것을 어떻게 해야 정열이 되는지 도무지 모르겠습니다 ???
정열 할 수 있는 방법을 가르쳐 주세요
 

   
이름아이콘 이준호리
2010-07-22 12:07
http://msdn.microsoft.com/en-us/library/aa443195
http://msdn.microsoft.com/en-us/library/aa443493
컬럼1은 디폴트라 하니 컬럼1을 추가하고 컬럼2에 일련번호를 쓰세요.
   
이름아이콘 아킴
2010-07-26 11:22
감사합니다. 이준호리님 덕분에 많은 공부를 합니다.
기초도 튼튼해야 겠지만 응용력을 많이 필요로 하군요
암튼,  ....
여러모로 알아본 결과 제 짧은 생각엔 ListView가 String으로 처리한다는데 기인하는거 같습니다.
여러 기초 자료로 코딩을 해보았습니다.
컬럼1 뿐만이 아니라 여러 컬럼의 소팅에 적용되는 것을 보았습니다.
결과는 만족스럽긴한데 코딩이 다소 무식한감이 없잖아 있네요
선배님들이 이 코딩을 손질해 주신다면 다시 한번 응용력을 키울 수 있지 않을까 하고 올려봅니다.

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hWndLock As Long) As Long

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)

   If ColumnHeader.Index = 1 Then
       LockWindowUpdate ListView1.Hwnd
       For i = 1 To ListView1.ListItems.Count
           ListView1.ListItems.Item(i).Text = Format(ListView1.ListItems.Item(i).Text, "0000000")
       Next
       With ListView1
           If .SortOrder = lvwAscending Then
               .SortOrder = lvwDescending
           Else
               .SortOrder = lvwAscending
           End If
           .SortKey = ColumnHeader.Index - 1
           .Sorted = True
       End With
   
       For i = 1 To ListView1.ListItems.Count
           ListView1.ListItems.Item(i).Text = Val(ListView1.ListItems.Item(i).Text)
       Next
       LockWindowUpdate 0&
   ElseIf ColumnHeader.Index > 6 Then
       LockWindowUpdate ListView1.Hwnd
       For i = 1 To ListView1.ListItems.Count
           ListView1.ListItems.Item(i).SubItems(ColumnHeader.Index - 1) = Format(ListView1.ListItems.Item(i).SubItems(ColumnHeader.Index - 1), "0000000")
       Next
       With ListView1
           If .SortOrder = lvwAscending Then
               .SortOrder = lvwDescending
           Else
               .SortOrder = lvwAscending
           End If
           .SortKey = ColumnHeader.Index - 1
           .Sorted = True
       End With
       For i = 1 To ListView1.ListItems.Count
           ListView1.ListItems.Item(i).SubItems(ColumnHeader.Index - 1) = Format(Val(ListView1.ListItems.Item(i).SubItems(ColumnHeader.Index - 1)), "#,###")
       Next
       LockWindowUpdate 0&
   Else
       With ListView1
           If .SortOrder = lvwAscending Then
               .SortOrder = lvwDescending
           Else
               .SortOrder = lvwAscending
           End If
           .SortKey = ColumnHeader.Index - 1
           .Sorted = True
       End With
   End If

End Sub

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼