it-source

마지막 요소를 보기로 스크롤할 수 없는 Excel 목록 상자를 수정하는 방법

criticalcode 2023. 8. 29. 20:42
반응형

마지막 요소를 보기로 스크롤할 수 없는 Excel 목록 상자를 수정하는 방법

내가 기억하는 한 엑셀 UI에서 가장 큰 문제는 리스트박스 스크롤입니다.

목록 상자에 표시할 수 있는 요소가 더 있으면 스크롤 막대가 나타납니다.그러나 특정 상황에서는 막대를 목록의 맨 아래까지 스크롤한 후 놓으면 막대가 "점프"되어 목록의 마지막 항목이 표시되지 않습니다.여기에는 다음이 설명되어 있습니다.Can't scroll all the way down

이 문제를 제시하는 많은 포럼 게시물이 있으며, 해결책은 항상 "통합 높이 속성을 false로 설정한 다음 다시 true로 설정"이었습니다.이렇게 하면 목록 상자의 크기가 약간 조정되어 높이가 단일 행 높이로 반올림된 다음 숨김 항목이 남지 않습니다.

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
End With

그러나 이것이 작동하지 않는 특정한 경우가 있습니다.다음과 같은 경우:

  1. 목록 상자의 높이를 프로그래밍 방식으로 설정
  2. 단순 목록 상자 선택을 사용하지 않음(fm MultiSelectSingle)

그런 다음 전체 높이를 거짓으로 설정하고 높이 변경 후 또는 높이 변경 사이에 참으로 설정하면 목록 상자의 높이가 조정되지만 아래로 스크롤할 때 문제가 남아 마지막 항목이 보이지 않습니다.

이 짜증나는 질문의 핵심은 인터넷에 있는 다른 모든 사람들이 '내장 높이' 솔루션이 자신들에게 효과가 있는지 확인하고 있지만, 이러한 매우 특별한 경우는 왜 그것이 자신들에게 효과가 없는지 궁금해하며 좌절한다는 것입니다.그럼 그들은 어떻게 치료를 받을까요?

제가 스스로 발견해야 했고, 다른 곳에서 찾을 수 없는 것(그래서 여기에 게시하는 것)은 이 문제가 선택 방법에 의존하는 추가적인 차원을 가지고 있었다는 것입니다.스크롤 막대의 작동 방식이 높이 및 통합 높이 속성뿐만 아니라 에도 관련되어 있는지 알 수 없습니다.MultiSelect 속성입니다. 해당 속성을 찾았습니다.

그 때.위에 표시된 Integral Height 방법은 작동하지 않습니다. 다음 방법은 어떻게든 작동합니다.

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
    .MultiSelect = fmMultiSelectSingle
    .MultiSelect = fmMultiSelectExtended
End With

단순히 변경만 하면 됩니다.MultiSelect 속성을 fmMultiSelectSingle로 설정한 다음 원하는 선택 스타일로 복원하면 목록 상자의 높이가 에 의해 자동으로 조정됩니다.IntegralHeight 속성은 이러한 작업을 수행하지 않을 때와 약간 다른 높이로 이동합니다. 이 차이로 인해 스크롤 막대가 올바르게 작동합니다.

Workaround worked

저는 이 특별한 사례의 발견과 더 정확한 해결책이 제가 겪어야 했던 좌절과 실험의 시간을 누군가에게 절약해주기를 바랍니다.

저는 이것이 매우 오래된 게시물이라는 것을 압니다. 하지만 저는 이 문제를 해결하기 위해 많은 일을 겪었기 때문에, 저는 제 팁을 공유하고 싶습니다. :)

우선 워크시트 확대/축소 수준이 100%가 아닌 경우에는 적분 높이 방법이 작동하지 않습니다.

목록 상자의 높이와 너비, 위치 등을 변경합니다('셀로 이동 또는 크기 조정 안 함'을 설정한 경우에도).

그리고 이 문제를 해결하기 위해 코드로 원래 크기와 위치를 가져오려고 하면, 이번에는 마지막 항목이 보이지 않습니다.

제 팁은 간단합니다.글꼴 크기와 목록 상자 높이 사이에 조합이 있습니다.

글꼴 크기가 6-10(평행, 일반)인 경우 목록 상자 높이는 12.75의 배수와 잘 어울립니다(단, 내 목록 상자 스타일은 1:ListStyle, 1-fmListStyleOption입니다).스타일 0)과 다를 수 있습니다.

높이가 12.75의 배수와 동일하다면 문제가 없을 것입니다.

글꼴 크기 12(정규)의 경우 13.55의 배수입니다.

따라서 프로젝트에서 목록 상자 크기에 대한 제한이 없는 경우 글꼴 크기에 따라 크기를 약간 조정하는 것만으로도 더 편안합니다.:)

ListBox가 페이지를 가로지르고 있었기 때문에 저는 그 위치를 고정시켜야 했습니다.

With ListBox1 
 .IntegralHeight = False
 .IntegralHeight = True
 .Height = 45
 .Width = 69
 .Top = 0
 .Left = 1255.5
End With

With lstbox

`.Height = myHeight`
`.MultiSelect = fmMultiSelectExtended`
`.MultiSelect = fmMultiSelectSingle`

End With

이것은 저에게 효과가 있었습니다.통합 높이 속성을 설정할 필요가 없습니다.

저의 경우 해결책은 다음과 같습니다.

with listbox
   .IntegralHeight = False
   .Height = myHeight
   .Width = myWidth
   .IntegralHeight = True
   .Height = myHeight
   .Width = myWidth
end with

즐거운 시간 되세요.

이 문제를 해결하기 위한 터무니없이 간단한 방법을 찾았습니다.목록 상자의 맨 아래 라인이 확인란 사이에 있도록 높이를 약간 위 또는 아래로 조정한 다음 Integral Height가 false로 설정되어 있더라도 마지막 항목으로 스크롤할 수 있습니다.

알랭에게 감사합니다.당신의 해결책은 저에게 잘 맞았습니다.

크기 조정 시 ListBox의 높이와 관련된 후속 문제를 발견했는데, 초기 높이에 따라 예측할 수 없는 방식으로 변경되었습니다.크기 조정된 높이가 125% 텍스트 스케일링으로 다른 기계에 표시되었을 때 다시 다릅니다.예를 들어, 358에서 370 사이의 높이를 설정하면 크기가 조정된 높이는 컴퓨터에서는 370.65 또는 371.4이지만 텍스트 스케일링이 125%인 컴퓨터에서는 360.1, 370.25 또는 380.45입니다.이렇게 큰 변동성으로 인해 ListBox는 그 아래에 있는 다른 컨트롤을 가릴 수 있었습니다.

수정 사항은 제가 원하는 최대 높이로 시작하여 크기 조정된 높이가 제가 원하는 최대 높이보다 작을 때까지 초기 높이를 줄이는 것이었습니다.목록 상자를 표시할 때마다 이 작업을 수행합니다.

    Hmax = 372      'Target Height 
    H1 = Hmax
    With SteelForm.Controls.Item("ListBox1")
        Do
            H1 = H1 - 1
            .IntegralHeight = False
            .Height = H1
            .IntegralHeight = True
            .MultiSelect = fmMultiSelectSingle
            .MultiSelect = fmMultiSelectExtended
            DoEvents
        Loop Until .Height < Hmax
    End With

간단한 해결책은 목록에 빈 항목을 추가하는 것입니다.

myListBox.AddItem ""

이렇게 하면 빈 항목이 스크롤 보기에서 벗어나 실제 마지막 항목이 표시됩니다(사용자는 해당 항목이 있는지 알 수 없음).

제가 과거에 포럼에서 본 것은 목록 상자에 빈 행을 추가하는 것입니다.그 정도면 됐다.

Integral Height(적분 높이) 속성을 True(참)로 설정합니다.

언급URL : https://stackoverflow.com/questions/5859459/how-to-fix-an-excel-listbox-that-cant-scroll-the-last-element-into-view

반응형