2016-07-21 1 views
0

여기 내 작은 문제를 도와 줄 수 있기를 바랍니다.데이터가 실현되지 않고 콤보 상자에 저장됩니다.

내 파일은 3 개의 워크 시트로 구성되어 있습니다. 1. 데이터 일부 계산

내가 파일을 열

을 만들기 위해 워크 시트를 돕는 2. 보고서 3. 나는 어떤 요청을 시작하는 계산을 구현하기 위해 버튼을 클릭합니다. 이 요청은 먼저 워크 시트 1 (데이터)의 데이터를 워크 시트 3 (돕는 워크 시트)에 복사합니다. 추가 요청 (모두 userforms에서 완료) 후에 워크 시트 3의 데이터는 요청 된 데이터에 대해 필터링됩니다. userform은 워크 시트 3에서 데이터를 가져오고 scritping 사전을 통해 콤보 상자에 표시됩니다.

여기에 문제가 있습니다.

내 데이터는 세 개의 스프레드 시트에 포함되어 있습니다. 워크 시트 2의 단추를 누르면 요청이 처음으로 수행됩니다. (복사, 필터 및 계산을 구현하기 위해 버튼을 다시 클릭하면) 필터가 잘못 설정되어 계산이 다시 수행됩니다. 그러나 워크 시트 3을 열었을 때 (현재보기는 워크 시트 2가 아닌 워크 시트 3에 있고 단추가있는 경우) 편집기 창에서 수동으로 요청 및 계산을 시작하면 필터 및 계산이 항상 올바르다.

나는 combobox가 사전을 생성 할 때 오류가 있다고 생각하고 데이터를 가져 와서 필터를 적용합니다. 필터는 항상 첫 번째 요청에서 설정된 필터입니다. 추가 요청이 있으면 필터가 변경되지 않고 첫 번째 요청의 필터가됩니다. 요청 및 계산을 수행 한 후 재설정해야 할 수도 있습니까? 난 정말 내가 진행할 수 :(

감사

라파을 누군가가 나를 도울 수 있기를 바랍니다

Sub UserForm_Initialize() 

'Taking the data from the helping working sheet 

    Dim objDic As Object 
    Dim lngZ As Long 
    Dim i As Integer 

    Set objDic = CreateObject("Scripting.Dictionary") 

    With Sheets("helpsheet") 

    For i = 12 To Sheets("helpsheet").Cells(.Rows.Count, 3).End(xlUp).Row 
    If Sheets("helpsheet").Rows(i).Hidden = False Then 
    ComboBox2.AddItem .Cells(i, 3) 
    objDic(.Cells(i, 3).Value) = 0 
    End If 

    Next 

    End With 

    Me.ComboBox2.List = objDic.keys 

    With Me.ComboBox2 
    .AddItem "all areas" 
    End With 

End Sub 

:

나는 정의 폼/콤보/scritping 사전에 대해 다음 코드를 사용

답변

1

필터를 실행하고 해당 시트에서 데이터를 복사하기 전에 원본 시트를 먼저 활성화/선택하는 것이 좋습니다.

물론 사람들은 코드에서 Sheets("SheetName").select을 사용해서는 안되지만 내 오류를 해결하는 한 나는 그것을 할 것이라고 말합니다. :)

코드를 실행하기 전에 Sheets("YourSource").select을 넣으십시오. 시트 2 (단추가있는 위치)로 돌아가려면 Sheets("Sheet2Name").select을 사용하십시오.

희망을 도울 수 있습니다.

0

당신은 항상 전체 범위 참조를 사용하는 경우 어떤 문제

내 추측에 부합되지 않는 경우는 다른 (도시하지 않음) 코드 당신이있어 것입니다 :

  • 만드는 일부 시트 활성화/하지 완전히 참조 범위 변수

를 사용하여 2 시작

  • 에 대해 "나쁜 환경"을 만들어 선택 다음과 같이

    당신은 BTW 당신이 UserForm_Initialize 코드를 리팩토링 할 수 우리가 당신에게

    도움이 도움이되는 다른 코드를 표시 할 수 있습니다

    Option Explicit 
    
    Sub UserForm_Initialize() 
        Dim objDic As Object 
        Dim i As Long 
    
        Set objDic = CreateObject("Scripting.Dictionary") 
    
        With Sheets("helpsheet") 
         For i = 12 To .Cells(.Rows.Count, 3).End(xlUp).Row 
          If Not .Rows(i).Hidden Then objDic(.Cells(i, 3).Value) = 0 
         Next 
        End With 
    
        With Me.ComboBox2 
         .List = objDic.keys 
         .AddItem "all areas" 
        End With 
    End Sub 
    

    하거나, 그것을 아래로 단축 조금 더 :

    Sub UserForm_Initialize() 
        Dim objDic As Object 
        Dim cell As Range 
    
        Set objDic = CreateObject("Scripting.Dictionary") 
    
        For Each cell In Sheets("helpsheet").Columns(3).SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible) 
         objDic(cell.Value) = 0 
        Next cell 
    
        With Me.ComboBox2 
         .List = objDic.keys 
         .AddItem "all areas" 
        End With 
    End Sub 
    
  • 0

    해결책을 찾았습니다. 매우 간단합니다.

    콤보 박스를 재설정하려면 END 전에 END를 추가해야합니다. 보결. 이렇게하면 모든 것이 값이나 속성없이 초기 상태가됩니다.

    워크 시트의 아무 것도 볼 수 없기 때문에 워크 시트를 활성화하거나 선택하지 않았습니다. 하지만 어쨌든 고마워요 :

    +0

    'END '를 사용하면 매우 좋습니다! 대신 내 솔루션을 사용해보십시오. – user3598756

    관련 문제