내 파일에는 50개의 시트가 들어 있으며 각 시트는 표준 형식입니다. 이름을 Form1, Form2, Form3으로 지정하겠습니다.
보고 싶은 양식을 선택하여 원하는 양식을 찾기 위해 시트 사이를 탐색할 필요가 없도록 인쇄 시트를 만들고 싶습니다. 그리고 나는 프린터로 보낼 때마다 계산되는 이 인쇄 시트에 카운터를 갖고 싶습니다.
나는 지금까지 무엇을 했는가? 저는 M1이 양식 이름이 포함된 드롭다운 목록인 이 수식을 만들었습니다. 따라서 Form2를 보려면 드롭다운 목록에서 Form2를 선택하면 수식이 모든 Form2 시트를 표시합니다.
=IF($M$1="Form1";IF('Form1'!A1="";"";'Form1'!A1);"")&IF($M$1="Form2";IF('Form2'!A1="";"";'Form2'!A1);"")&IF($M$1="Form3";IF('Form3'!A1="";"";'Form3'!A1);"")
모든 양식이 표준화되어 있으므로 잘 작동합니다.
선택한 양식을 선택한 후 회사의 ID 번호를 입력한 후 인쇄해야 합니다.
이 시트에 내가 인쇄한 횟수를 계산하는 카운터를 만드는 것이 가능한지 알고 싶습니다. 또는 무엇이든 저장하거나 변경할 때 시간순으로 계산되는 모든 것...
답변1
귀하의 모든 요청을 수용할 수 있습니다. 하지만 VBA만 사용하는 것이 두렵습니다.
드롭다운을 유지하면서 매크로를 실행하는 버튼도 추가하세요.
매크로에서 드롭다운이 있는 셀을 읽고 인쇄할 적절한 시트를 보냅니다. 그런 다음 드롭다운 및 버튼과 동일한 페이지의 셀 집합에 있을 수 있는 적절한 카운터를 업데이트합니다.
저장 횟수를 계산하려면 before_save 함수를 사용하는 매크로가 필요합니다. 검색해 보세요. 내 블로그에 이에 관한 기사가 있을 수도 있을 것 같은데, 기억이 나지 않습니다. 해당 기사를 작성한 지 몇 년이 지났기 때문입니다. 해당 셀에 1을 추가하기만 하면 된다는 점에서 원리는 이전 매크로와 동일합니다.
답변2
다른 50개 시트 중 하나의 내용을 표시하는 "인쇄 시트"를 작성하는 다소 깔끔한 방법은 셀을 A1
다음으로 설정하는 것입니다.
=INDIRECT($M$1 & "!A1")
보려는 셀의 정규화된 이름처럼 보이는 텍스트 문자열을 작성한 다음 함수를 사용하여 INDIRECT()
해당 문자열을 역참조합니다(즉, 이를 셀 주소로 처리하고 식별된 셀의 내용을 검색합니다). . 이를 사용하면 를 추가할 때 수식을 변경할 필요가 없습니다 Form51
. 경고:
- 이로 인해 Excel은 다음과 같은 경우에 간접 셀을 "다시 계산"하는 데 많은 작업(예: 많은 시간 소요)을 수행하게 될 수 있습니다.아무것(뿐만 아니라
M1
) 변경됩니다. 지금보다 더 나빠질지는 잘 모르겠습니다. - 업데이트할 때 데이터를 변경하거나 "인쇄 시트"에 새 데이터를 입력하려는 유혹을 피하십시오
Form42
. (물론 지금 이런 문제가 있습니다.) 인쇄 시트를 보호하면 이러한 사고로부터 자신을 보호할 수 있습니다.
인쇄 시트를 구성하는 다른 방법이 있습니다. 예를 들어 VBA를 사용하여
INDIRECT()
호출을 대체할 수 있지만 보다 원활하게 작동하는 사용자 정의 함수를 생성하거나- 변경할 때마다 실제로 모든 데이터를 인쇄 시트에 복사합니다 .
Formnn
M1
VBA 루틴 을 작성하여 변경 사항을 계산할 수 있습니다 Worksheet_Change
.
인쇄할 때 시트의 논리를 계산/감지할 수 있는 방법이 없습니다. 그러나 VBA에서 인쇄 루틴을 작성하면 원하는 효과를 얻을 수 있습니다. ㅏ
PrintOut , , , True
명세서가 귀하를 위해 시트를 인쇄해 드립니다. 원하는 다른 작업을 추가하세요(예: 카운터 증가). (인쇄하는 것을 기억하면 됩니다.이 매크로를 사용하여.) 네 번째 매개변수 는 다음과 PrintOut
같습니다.시사True
, 시트를 인쇄하기 전에 Microsoft Excel에서 인쇄 미리 보기를 호출하도록 하거나(따라서 취소 옵션 제공) False
무조건 즉시 시트를 인쇄하도록(또는 생략) 설정합니다 .
보다MS Office에 VBA를 어떻게 추가하나요? 정보를 얻으려면 글쎄요.