입력 된 암호를 기반으로 Sheet1을 필터링하는 VBA 코드를 만들려고합니다. 나는 2 개의 시트를 가진 엑셀 파일을 가지고 있고 sheet2는 컬럼 B의 패스워드와 컬럼 A의 "필터"를 가지고있다. 나는 엑셀 파일을 배포하고 당사자들에게 해당 패스워드를 줄 것이고, 패스워드를 다른 사람들의 패스워드로 입력 할 것이다. 파티가 삭제됩니다. 코드 :VBA - 입력 된 암호를 기반으로 표시된 셀 필터링
Sub Open_with_password()
pas = Application.InputBox("Input password")
If pas = False Or pas = "" Then Exit Sub
Application.ScreenUpdating = False
a = 0
For i = 1 To Sheet2.Range("A1").End(xlDown).Row
If Worksheets("Sheet2").Cells(i, 2) = pas Then
c = Worksheets("Sheet2").Cells(i, 1) 'the agency corresponding with the password
a = a + 1
End If
Next
'Check for password
If a = 0 Then
MsgBox "Wrong password. Report can not be accessed"
ActiveWorkbook.Close False
Sheet2.Visible = xlSheetVeryHidden
Sheet1.Visible = xlSheetVeryHidden
Exit Sub
'If correct password
Else:
Sheet1.Visible = xlSheetVisible
Worksheets("Sheet1").Select
Worksheets("Sheet1").Unprotect Password = "XYZ"
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
'Filter according to input password
If c <> "Admin" Then ActiveSheet.Range("$A$2:$AQ$500000").AutoFilter Field:=17, Criteria1:=c
Set rCell = ActiveSheet.AutoFilter.Range.Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells(1, 1)
Rows(rCell.Row).Select
Range(Selection, Selection.End(xlDown)).Copy
Worksheets("Sheet1").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("A2").Select
'If Admin
If c = "Admin" Then
Sheet2.Visible = xlSheetVisible
Sheet1.Visible = xlSheetVisible
End If
End If
Application.ScreenUpdating = True
End Sub
내가 지금까지 만난 문제는 다음과 같습니다 내가 파일을 열 때 사용자가 아무 것도 볼 수 없습니다 동안
1. 입력 상자가 자동으로 표시되지 않습니다, 이상적으로는 보여줄 것이다.
2. 다른 모든 것을 삭제한다고 생각되는 부분에 도달하면 암호 (필터 작동)에 따라 필터링합니다. 내가
많은
도와 주셔서 감사합니다에 대한 당신의 대답은 암호 부분을 해결 @Sgdva. 나는 그것을 "사적인"것으로 잊었다. Howver 그것은 여전히 다음 라인에 오류 1004를주었습니다 :'Selection.PasteSpecial Paste : = xlPasteValues, ' 복사 & 붙여 넣기 영역이 겹칠 수 없다고 말하면서 원하는 모든 행을 선택하고 붙여 넣지 않습니다. – Tiago
'Selection.PasteSpecial'을 사용하지 않았습니다. 게시 된 코드와 정확히 일치합니까? 영역이 겹칩니다. 셀을 병합 했습니까? – Sgdva
나에게 준 내용을 정확히 복사했으며 다른 데이터 위에 복사하지 않습니다. 어쩌면 필터로 인해 ... – Tiago