XLSM을 CSV로 저장하는 동안 "method save as as as as of object _workbook failed" 오류가 발생했습니다.
매크로가 가능한 Excel 워크북을 csv 파일로 저장하여 이전 워크북을 덮어쓰려고 합니다(아래에서는 폴더와 시트의 이름을 변경해야 했지만 문제가 되지 않는 것 같습니다).
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
Sheets("My_Sheet").Copy
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
ActiveWorkbook.Close SaveChanges:=False
ThisWorkbook.Activate
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
때때로 실패합니다.
런타임 오류 1004: 객체 _workbook 실패**의 메서드 저장)
디버거는 다음을 지적합니다.
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
저는 구글을 검색했고 제가 시도한 몇 가지 해결책은 다음과 같습니다.
- 디렉토리가 문자열임을 지정하는 중
- 파일 이름 또는 폴더에 특수 문자가 포함되지 않도록 합니다(여기 참조).
- 워크시트를 .csv로 저장하기 전에 값으로 붙여넣기 복사(여기 참조)
- .csv 코드 번호로 파일 형식 지정(여기 참조)
- 일부 알림 비활성화/재활성화
- 활성 워크북에서 다른 필드를 추가하는 중입니다.암호, 백업 생성 등과 관련하여 다른 이름으로 저장
그러나 최대 50-60회 연속으로 올바르게 실행된 후 어느 시점에서 다시 실패할 수 있습니다.
이 작업에 대해 VBA/Excel 사용을 중지하는 것을 제외한 모든 제안이 곧 발생할 예정이지만 현재로서는 그럴 수 없습니다.
편집: 드구스타프의 제안 덕분에 해결되었습니다.데구스타프가 제안한 코드를 두 가지만 변경했습니다.
ThisWorkbook.Sheets에CurrentWorkbook.SheetsFileFormat:=6에FileFormat:=xlCSV더) (Excel 다의더에강함전버른더)강
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
Dim TempWB As Workbook
Set TempWB = Workbooks.Add
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
ThisWorkbook.Sheets("My_Sheet").Copy Before:=TempWB.Sheets(1)
ThisWorkbook.Sheets("My_Sheet").SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=6
TempWB.Close SaveChanges:=False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
나는 일반적으로 그것을 발견합니다.ActiveWorkbook이 경우의 문제입니다.즉, 워크북(또는 다른 워크북)을 선택하지 않은 상태에서 Excel은 무엇을 해야 할지 모른다는 것입니다.불행하게도 그 이후로copy아무것도 반환하지 않습니다(복사된 워크시트가 좋습니다). 이것이 이 문제에 접근하는 표준 방법입니다.
따라서 이 시트를 새 워크북에 복사하고 워크북에 대한 참조를 얻는 방법으로 접근할 수 있습니다.새 워크북을 만든 다음 시트를 복사합니다.
Dim wkbk as Workbook
Set Wkbk = Workbooks.Add
CurrentWorkbook.Sheets("My_Sheet").Copy Before:=Wkbk.Sheets(1)
Wkbk.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
Wkbk.Close SaveChanges:=False
에서 더 : 또는다음같훨더씬나방있접다습식니이근은서황에상은과▁or.WorkSheet에서는 를합니다를 합니다.SaveAs.복사할 필요가 없습니다.
CurrentWorkbook.Sheets("My_Sheet").SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
워크북이 열려 있는 경우 나중에 원래 이름으로 다시 저장하도록 경고합니다. 하지만 이미 코드에 해당 이름이 있습니다.
1년이 지났지만, 미래의 독자들을 위해 무언가를 추가하겠습니다.
Microsoft는 런타임 오류 1004를 Excel 오류로 간주하지 않기 때문에 Excel 도움말에서 많은 문서를 찾을 수 없습니다.
위의 답변은 100% 유효하지만 문제의 원인을 파악하는 데 도움이 되므로 문제를 방지하거나 조기에 해결하거나 보다 쉽게 해결할 수 있습니다.
이 오류는 간헐적으로 발생하며 전체 경로와 파일 이름으로 저장하면 해결됩니다. 즉, 매크로 중 하나가 자동 파일 복구 후 자동 복구 디렉터리에 .xlsb 파일을 저장하려고 할 수 있습니다.
또는 파일 경로 또는 파일 이름을 직접 편집했을 수 있습니다.
경로 및 파일 이름은 다음을 통해 확인할 수 있습니다. - MsgBox This Workbook.전체 이름
당신은 메시지 상자에서 이것과 같은 것을 볼 것입니다.
C:\Users\Mike\AppData\로밍\Microsoft\Excel\DIARY(버전 1).xlxb
그렇다면 다른 사용자가 위에 언급한 대로 파일을 올바른 경로와 파일 이름에 저장하는 것이 해결책입니다.이 작업은 VBA를 사용하거나 수동으로 수행할 수 있습니다.
이제는 자동 복구 작업을 수행한 후 몇 초가 걸리고 (일상적인 작업이 아닌 경우) 더 빨리 찾을 수 있으므로 올바른 경로와 파일 이름을 사용하여 파일을 수동으로 저장하는 습관이 있습니다.따라서 매크로를 실행하면 이 오류가 발생하지 않습니다.복구 직후 .xlxb 파일을 .xlsm 파일에 수동으로 저장하는 습관은 워크시트를 제공하는 초보자에게는 도움이 되지 않습니다.
하이퍼링크 관련 참고 사항
이 오류 이후:워크시트에 +로 k만든 하이퍼링크가 있으면 "AppData\Roaming\Microsoft\", "\AppData\Roaming\", "..../../AppData/로밍/" 또는 "...파일 복구 후 여러 하이퍼링크에 \내 문서\내 문서\"가 표시됩니다.하이퍼링크를 텍스트 상자에 연결하거나 하이퍼링크 기능으로 생성하여 이러한 문제를 방지할 수 있습니다.
식별하고 수리하는 것이 조금 더 복잡합니다.
먼저 하이퍼링크를 검토하여 오류가 발생한 문자열과 각 오류에 대한 올바른 문자열을 확인합니다.시간이 지나면서, 저는 여러 개를 찾았습니다.
Excel은 '특수로 이동' 메뉴에서 k+로 만든 하이퍼링크를 검색할 수 있는 기능을 제공하지 않습니다.
도우미 열(예: 열 Z)에서 잘못된 하이퍼링크의 식별을 자동화할 수 있으며 공식을 사용할 수 있습니다.
=OR(ISNUMBER(SEARCH("Roaming", Link2Text($C2),1)),ISNUMBER(SEARCH("Roaming", Link2Text($D2),1)))
여기서 링크2텍스트는 UDF입니다.
함수 링크2텍스트(범위로 rng) 문자열 '비활성화하지 마십시오.Z 열에서 '로밍'이 포함된 하이퍼링크를 찾습니다.
' Identify affected hyperlinks
If rng(1).Hyperlinks.Count Then
Link2Text = rng.Hyperlinks(1).Address
End If
End Function
오류를 수정하기 위한 나의 VBA는 다음과 같습니다.
하위 바꾸기_roaming()
올바른 시트 시트("다이어리")를 선택합니다.선택한다.
Dim hl As Hyperlink
For Each hl In ActiveSheet.Hyperlinks
hl.Address = Replace(hl.Address, "AppData\Roaming\Microsoft\", "")
Next
For Each hl In ActiveSheet.Hyperlinks
hl.Address = Replace(hl.Address, "AppData\Roaming\", "")
Next
For Each hl In ActiveSheet.Hyperlinks
hl.Address = Replace(hl.Address, "../../AppData/Roaming/", "..\..\My documents\")
Next
For Each hl In ActiveSheet.Hyperlinks
hl.Address = Replace(hl.Address, "..\..\My documents\My documents\", "..\..\My documents\")
Next
Application.Run "Recalc_BT"
' Move down one active row to get off the heading
ActiveCell.Offset(1, 0).Select
' Check active row location
If ActiveCell.Row = 1 Then
ActiveCell.Offset(1, 0).Select
End If
' Recalc active row
ActiveCell.EntireRow.Calculate
' Notify
MsgBox "Replace roaming is now complete."
End Sub
또한 자동 복구에만 의존하지 않고 정기적으로 백업하는 습관을 들이는 것이 좋습니다.실패할 경우 마지막 전체 백업 이후 아무것도 없습니다.
워크시트는 매 시간 또는 중요한 새 데이터 가져오기 후와 같이 취약한 백업을 수행하는 경우가 많습니다.
+,O [파일 이름 강조], C+, +,V [X] 바로 가기를 사용하면 워크시트가 몇 초 안에 백업됩니다.정기 백업을 사용하면 어젯밤 백업 파일에서 복원할 필요 없이 가장 최근 백업으로 바로 이동할 수 있습니다. 특히 다른 사람에게 요청해야 하는 경우에는 더욱 그렇습니다.
여기서 마지막 답변을 드리지 못한 지 오래되었지만, 오늘의 경험을 공유하고자 합니다.
몇 주 동안 안정적으로 작업한 결과 워크북이 저장된 코드 섹션에서 변경 사항이 없는 상태에서 갑자기 동일한 오류가 발생했습니다.
이전 답변 덕분에 간단한 설명에서 save as 문을 업데이트했습니다.
wb.saveas strfilename
로.
wb.saveas Filename:=strfilename, Fileformat:= xlWorkbookDefault
etvoila: 다시 작동했습니다.
때때로 마이크로소프트 애플리케이션은 정말 이상하게 행동합니다...
경로와 CSV 파일 이름을 문자열 변수로 결합하여 FileFormat에서 처리되는 .csv를 삭제합니다.경로는 드라이브 문자 또는 서버 이름으로 시작하는 절대 경로여야 합니다.Dim strFullFileName as String strFullFileName = "C:\My Folder\My_Sheet"서버에 있는 경우 다음과 같이 나타납니다.strFullFileName = "\\ServerName\ShareName\My Folder\My_Sheet"서버 이름을 서버 이름으로 대체하고 공유 이름을 네트워크 공유 이름으로 대체합니다.\\data101\Accounting\My Folder\My_Sheet ActiveWorkbook.SaveAs Filename:=strFullFileName,FileFormat:=xlCSVMSDOS, CreateBackup:=False
저도 비슷한 문제가 있었지만 워크북에서 추출한 문자열을 기반으로 파일 이름을 만드는 중이었고 때때로 이러한 문자열에 파일 이름이 있을 수 없는 문자가 포함될 수 있습니다.이 캐릭터들을 제거한 것이 저에게 도움이 되었습니다!
"자동"에 공식이 있음에도 불구하고 모든 공식이 계산되지 않는 문제가 있었습니다.왼쪽 하단의 계산을 100번 눌렀더니 마법처럼 작동했습니다.
언급URL : https://stackoverflow.com/questions/28967762/getting-method-saveas-of-object-workbook-failed-error-while-trying-to-save-an
'programing' 카테고리의 다른 글
| '총 연결 수'가 너무 많습니다.정상 상태입니까?MaxScale 2.3.9 (0) | 2023.08.24 |
|---|---|
| 하나를 제외한 모든 클래스 제거 (0) | 2023.08.19 |
| 전화 간격을 사용하여 바코드를 스캔하는 방법 (0) | 2023.08.19 |
| python으로 Excel 호환 CSV 파일을 생성하시겠습니까? (0) | 2023.08.19 |
| jQuery AJAX를 사용하는 서버에 null을 전달할 수 없습니다.서버에서 수신된 값이 "null" 문자열입니다. (0) | 2023.08.19 |