programing

VBA 단일 시트를 CSV로 저장(전체 워크북이 아님)

javajsp 2023. 5. 4. 18:39

VBA 단일 시트를 CSV로 저장(전체 워크북이 아님)

개별 Excel 시트를 csv로 저장하고 각 시트를 별도의 csv 파일로 내보내기 - 워크북에 단일 워크시트를 저장하고 싶습니다.

내 xlsm 파일에 있는 내 코드는 params와 data sheet가 있습니다.붙여넣은 값으로 데이터의 워크시트 복사본을 만든 다음 이를 csv로 저장하려고 합니다.현재 제 전체 워크북이 이름을 바꾸고 csv가 됩니다.

Excel 워크북에서 단일 시트를 "csv로" 저장하려면 어떻게 해야 합니까?

있습니까?Worksheet.SaveAs아니면 데이터 시트를 다른 워크북으로 이동하여 저장해야 합니까?

코드 샘플

' [Sample so some DIMs and parameters passed in left out] 
Dim s1 as Worksheet
Dim s2 as Worksheet

Set s1 = ThisWorkbook.Sheets(strSourceSheet)
' copy across
s1.Range(s1.Cells(1, 1), s1.Cells(lastrow, lastcol)).Copy

' Create new empty worksheet for holding values
Set s2 = Worksheets.Add

s2.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

' save sheet
s2.Activate
strFullname = strPath & strFilename


' >>> BIT THAT NEEDS FIXIN'
s2.SaveAs Filename:=strFullname, _
     FileFormat:=xlCSV, CreateBackup:=True

' Can I do Worksheets.SaveAs?

Windows 10 및 Office 365 사용

이 코드는 저에게 잘 맞습니다.

Sub test()

Application.DisplayAlerts = False

ThisWorkbook.Sheets(strSourceSheet).Copy
ActiveWorkbook.SaveAs Filename:=strFullname, FileFormat:=xlCSV, CreateBackup:=True
ActiveWorkbook.Close

Application.DisplayAlerts = True

End Sub

전체 strSourceSheet 시트의 복사본을 만드는 것입니다. 그러면 새 워크북이 열리고 .csv 파일로 저장할 수 있습니다. 그러면 원래 파일의 파일 이름이 손상되지 않고 새로 저장된 .csv 파일이 닫힙니다.

이것은 상당히 일반적입니다.

Sub WriteCSVs()

Dim mySheet As Worksheet
Dim myPath As String

'Application.DisplayAlerts = False

For Each mySheet In ActiveWorkbook.Worksheets

    myPath = "\\myserver\myfolder\"

    ActiveWorkbook.Sheets(mySheet.Index).Copy
    ActiveWorkbook.SaveAs Filename:=myPath & mySheet.Name, FileFormat:=xlCSV, CreateBackup:=True
    ActiveWorkbook.Close

Next mySheet

'Application.DisplayAlerts = True

End Sub

워크북을 CSV 파일로 저장하기만 하면 됩니다.Excel은 단일 시트에 저장 중이라는 대화 상자 경고를 팝업으로 표시하지만 다음을 사용하여 경고를 억제할 수 있습니다.Application.DisplayAlerts = False.

하지만 그것을 다시 사실로 되돌리는 것을 잊지 마세요.

몇 년 후에 이 질문을 하게 되면서, 저는 제 자신에게 훨씬 더 효과적인 방법을 발견했습니다.저장하려는 워크시트가 크고 계산이 가득하며 새 시트에 복사하는 데 불편한 시간이 걸리기 때문입니다.

프로세스 속도를 높이기 위해 현재 워크시트를 저장한 다음 다시 열면 원하지 않는 .csv 창이 닫힙니다.

Sub SaveThisSheetInParticular()

Dim path As String
path = ThisWorkbook.FullName
Application.DisplayAlerts = False

Worksheets("<Sheet Name>").SaveAs Filename:=ThisWorkbook.path & "\<File Name>", FileFormat:=xlCSV

Application.Workbooks.Open (path)
Application.DisplayAlerts = True
Workbooks("<File Name>.csv").Close

End Sub

여기서 시트와 csv 파일 이름은 매크로 작성자(나) 외에는 아무도 그것들을 조작해서는 안 되기 때문에 하드 코딩됩니다.그러나 매크로가 호출될 때마다 활성 시트 이름을 저장하고 사용하여 현재 시트를 내보낼 수 있습니다.

여러 개의 시트를 사용하여 이 작업을 수행할 수 있습니다. 닫기 문에서 마지막 파일 이름을 사용하면 됩니다.

Worksheets("<Sheet 1>").SaveAs Filename:=ThisWorkbook.path & "\<File 1>", FileFormat:=xlCSV
Worksheets("<Sheet 2>").SaveAs Filename:=ThisWorkbook.path & "\<File 2>", FileFormat:=xlCSV

[...]

Workbooks("<File 2>.csv").Close

언급URL : https://stackoverflow.com/questions/34155718/vba-saving-single-sheet-as-csv-not-whole-workbook