Excel 자동 저장 매크로


0

특정 셀의 값이 1 증가 할 때마다 엑셀 통합 문서를 자동 저장하는 매크로를 만들려고합니다.

아래에 게시 할 셀이 변경 될 때마다 자동 저장 코드가 있습니다.

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A2")) Is Nothing Then
        ThisWorkbook.Save
    End If
End Sub

그러나 셀의 값이 하나 증가 할 때만 매크로 코드를 실행하는 것처럼 보이지는 않습니다. 즉, 셀 값은 10이고 셀 값이 11 일 때만 통합 문서를 저장합니다.

고맙습니다.


세포를합니까? A2 ~을 포함하다 공식 또는 유형 상수 ?
Gary's Student

아니. 엑셀 시트는 Access Database에 연결되어 있으며 그 곳에서 값을 가져옵니다.
Victor Ferreira

VBA에 대한 전문가가 아니지만 Excel 시트의 DB에 액세스하여 테이블을 만들고 '데이터 모델에 추가'아래에 연결을 넣으면 데이터가 새로 고침 될 때마다 Worksheet_TableUpdate 이벤트를 실행할 수 있다고 생각합니다. Access DB에서. 의도 한 셀의 초기 값은 Workbook_Open () 이벤트의 Public Global 변수에 저장하고 Access 데이터베이스에서 테이블을 새로 고칠 때마다 발생하는 Worksheet_TableUpdate 이벤트의 비교를 위해 나중에 액세스 할 수 있습니다.
patkim

내가 가진 문제는 내가 가지고있는 매크로는 셀 A2가 변경 될 때만 실행될 예정이지만 Excel에 Access가 연결되어 있고 자동 업데이트 (필수 사항 임) 이후 데이터가 새로 고침 될 때마다 매크로가 셀로 감지됩니다. 변경 및 자동 저장, 그러면 작업을 위해 사용하고있는 다른 스크립트가 실행되지 않습니다. 셀 "A2"가 1보다 큰 경우에만 자동 저장하는 것이 좋습니다. 카운트 또는 자동 증가와 마찬가지로 확실하지 않습니다. 감사!
Victor Ferreira

답변:


1

이 코드를 사용해보고 문제가 생길 경우 되돌려 놓으십시오. 작은 가정이나 제약 조건은 시트가 데이터베이스에서 최소 한 번 새로 고쳐지고 기존 내용이 삭제되지 않고 필요에 따라 다시 새로 고쳐집니다. 저장 후 닫히기 전에 데이터를 지운 다음 다른 해결책이 필요할 때마다 빈 용지를 여는 경우에 대비하십시오.

ALT + F11 - & gt; VBA 편집기 - & gt; ThisWorkbook - & gt; 일반 - & gt; 선언

Public Prev_Val As Variant

Workbook_Open () 이벤트

Private Sub Workbook_Open()
   ThisWorkbook.Prev_Val = Sheet1.Range("A2").Value
End Sub

Sheet1 또는 Sheet Codename - Worksheet_Change (ByVal 대상 범위로) 이벤트가 무엇인지. Sheet1을 Sheet1 또는 Sheet2 정도의 시트 코드 이름으로 바꾸십시오.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A2")) Is Nothing Then
    If Sheet1.Range("A2").Value = ThisWorkbook.Prev_Val + 1 Then
        ThisWorkbook.Save

    End If
    ThisWorkbook.Prev_Val = Sheet1.Range("A2").Value
End If

End Sub

이제 통합 문서를 열면 Public 변수 Prev_Val이 A2에 값을 저장하고 비교를 위해 그 값을 사용하고 통합 문서를 삭제할 때까지이 값을 A2의 최신 업데이트로 유지합니다.


이봐 요! 답장을 보내 주셔서 감사합니다. 현재 코드를 시험 중이며 어떻게 진행되는지 알려 드리겠습니다. 호기심에서 벗어나 워크 북의 자동 저장을 이전 값 (예 : new_val & gt; prev_val과 같은 것)보다 높을 때마다 Prev_Val이 자동으로 저장되도록 +1 (+1) 할 때 워크 북을 변경하려면 ThisWorkbook.Save 그게 가능할까요?
Victor Ferreira

편집 : 나는 내 액세스 데이터베이스에 연결되어있는 xlsm 파일에서 스크립트를 실행할 때 데이터베이스가 업데이트를 중지하고 주 서버 DB에서 값을 쓰지 않기 때문에 코드가 작동하는지 테스트 할 수 없습니다. 이상한. 어쩌면 나는 나쁜 연결을 만들었을 것입니다. 나는 더 시험 할 것이다.
Victor Ferreira

Nr.2 편집 : 그러나 Excel을 새로 고침 할 때마다 자동 저장됩니다. 코드를 테스트 한 결과 제대로 작동합니다. 예를 들어 10에서 9로 변경하면 저장되지 않습니다. 셀 A2에서 10에서 11로 변경하면 저장되며 그럴 수 있지만 다시는 매번 ODBC는 자동으로 관계없이 자동으로 액세스하는 ODBC를 통해 자동으로 새로 고칩니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
Victor Ferreira

승인. Worksheet_TableUpdate 이벤트 또는 다른 이벤트와 같은 경우에 ThisWorkbook.Save 또는 다른 코드에 입력 된 코드가 있는지 확인하십시오.
patkim

편집 Nr.3 : 코드를 변경하고 완전히 의도 한대로 작동하는 것 같습니다. 내가 변경 한 유일한 것은 Sheet1.Range ( "A2"). Value = ThisWorkbook.Prev_Val + 1 Then If If Me.Range ( "A2"). Value & gt; ThisWorkbook.Prev_Val 그럼. 나는 그것이 내 사건에 더 효과적 일 것이라고 생각한다. 시험을 계속하고 더 게시 할 것입니다. 저를 올바른 방향으로 이끌어 주셔서 감사합니다!
Victor Ferreira
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.