
시트, 테이블 또는 선택 항목을 다른 파일 형식으로 내보내려면 어떻게 해야 합니까?현재 활성 문서를 변경하지 않고?
우리의 기본 데이터 작업 환경은 Excel이며, 여기서는 원하는 결과를 얻기 위해 서식과 수식을 광범위하게 사용합니다. 그런 다음 .CSV
다른 프로그램과의 상호 운용성을 위해 결과가 저장됩니다 .
"파일 >>다른 이름으로 저장>> 다른 유형으로 저장 >> CSV"를 사용하면 .csv 파일이 생성됩니다.그리고활성 문서가 로 변경됩니다 saved_file.csv
. 이 새로운 형식으로 인해 기능이 손실되고 형식이 지정된다는 경고가 있지만 그 외에는 사용자 인터페이스가 변경되지 않습니다. 볼드체와 이탤릭체, 다양한 글꼴과 크기, 배경 셀 채우기, 정의된 테이블 범위 등이 있습니다. 셀의 모든 수식은 그대로 유지됩니다.
이것은 재앙이 일어나기를 기다리고 있습니다. 사용자는 작업으로 돌아와 모든 것이 정상이라고 생각하고 곧 현재 형식이 어떤 마법도 지원하지 않는다는 사실을 잊어버리고 중요한 작업(tm)을 계속합니다. 점심 시간이 되면 Excel을 닫고 항상 보기 때문에 읽지 않는 성가신 대화 상자에 예를 두 번 누르고 문 밖으로 나갑니다. ...점심 식사 후 사용자가 돌아와서 초기 다른 이름으로 저장과 종료 사이의 모든 작업이 사라졌음을 깨달았습니다.
"파일 >>내보내다"는 불행히도 "다른 이름으로 저장"에 대한 또 다른 탐색 경로일 뿐이며 활성 문서를 "some_file.csv"로 변경합니다.
우리에게 필요한 것은 일부 데이터를 다른 파일 형식으로 내보내고 활성 문서 "our-real-data.xlsx"를 유지하는 것입니다.
어떻게 할 수 있나요? 원클릭 실행을 위해 메뉴나 리본에 추가하시겠습니까?
조직의 모든 사람과 어떻게 공유할 수 있나요? (개별 사용자에게 VBA 편집기 등을 열도록 요청하지 않음)
답변1
우리에게 필요한 것은 일부 데이터를 다른 파일 형식으로 내보내고 활성 문서 "our-real-data.xlsx"를 유지하는 것입니다.
CSV_tools.xla
귀하가 언급한 이후 CSV로 내보내는 빠른 VBA 추가 기능을 구성했습니다. 새로운 사용자가 더 쉽게 이해할 수 있도록 가능한 한 적은 코드를 사용하려고 노력했습니다.
그것은 무엇을 하는가?
- 추가 기능이 CSV를 저장할 위치를 묻습니다. 기본 폴더는 XLS가 저장되는 폴더입니다.
- 추가 기능은 지역 시스템 설정과 관련하여 쉼표 또는 세미콜론을 구분 기호로 사용해야 하는지 자동으로 감지합니다.
- 현재 활성 Excel 시트의 모든 값은 XLS 파일 이름을 딴 새 CSV 파일로 내보내집니다.
- 기존 XLS는 전혀 손대지 않습니다.
설치
- 다운로드애드인그리고 아래에 저장하세요
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
- Excel을 열고 아래에서 활성화하십시오.
- Excel 2003: 메뉴 모음 → 도구 → 추가 기능
- Excel 2007: Excel 옵션 → 추가 기능 → 이동
- Excel 2010-13: 파일 탭 → 옵션 → 추가 기능 → 이동
Excel을 다시 시작하고 메뉴 표시줄을 살펴보세요.
VBA 코드
Function ExportCSV()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
ChDrive (ActiveWorkbook.Path)
ChDir (ActiveWorkbook.Path)
strName = fso.GetBaseName(ActiveWorkbook.Name)
On Error GoTo 0
strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
delimiter = Application.International(xlListSeparator)
If Not strFilename = False Then
Open strFilename For Append As #1
For Each rngRow In ActiveSheet.UsedRange.Rows
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Print #1, strRow
Next
Close #1
End If
End Function
다양한 사용자를 위한 자동 업데이트
모든 사용자가 Excel에서 추가 기능을 활성화하면(자동화할 수 없음) .xla
네트워크 공유, Robocopy 또는 유사한 도구를 통해 새 파일 버전을 복사할 수 있습니다. 그러나 문제를 해결하는 방법이 너무 다양하기 때문에 이는 별도의 질문이어야 합니다.
VBA 괴짜들에게 가장 흥미로운 부분은
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Join() 함수를 사용하여 범위(이 경우 단일 행)를 2D 배열로 변환한 다음 1D 배열로 변환하고 마지막으로 단일 문자열로 변환합니다.
답변2
사용자에게 해당 데이터의 복사본을 열도록 안내합니다.
Office 문서를 선택할 때 아이콘을 마우스 오른쪽 버튼으로 클릭하고 새로 만들기를 클릭할 수 있습니다. 원본을 기반으로 새 문서/시트/프레젠테이션이 생성됩니다. 사용자는 다른 이름으로 저장을 수행하여 내보낼 수 있습니다.
그래도 이렇게 걱정된다면 백업도 잘 하시길 바랍니다...