문제

Visual Basic을 사용하여 Autodesk Inventor 용 매크로를 작성합니다. 파일 대화 상자를 호출하는 매크로를 만들었습니다. 아래 코드를 참조하십시오. 모든 것이 사용자가 파일 이름을 기간 동안 파일 이름과 숫자를 다음과 같은 숫자로 전환하는 경우를 제외하고는 잘 작동합니다.

예를 들어 사용자가 TestFile.test를 상자에 넣고 확인한 경우 확인을 취하십시오. .FileName을 사용하여 그들이 무엇을 넣었는지 물어볼 때, 나는 "testfile.test"를 얻습니다. 내가해야 할 것처럼.

그러나 사용자가 TestFile.1 또는 TestFile.10 또는 TestFile.1mdksj 또는 숫자가 0보다 큰 숫자가 직접 "TestFile"을 되돌릴 수있는 한 숫자를 직접 뒤 따르는 경우. 어떤 이유로, 기간과 기간이 끝난 후 모든 것이 제거됩니다.

이 이유는 무엇입니까? 이것은 Visual Basic의 버그입니까 아니면 뭔가 잘못하고 있습니까?

'Set up the file dialog
Dim oFileDlg As FileDialog
' Create a new FileDialog object.
Call ThisApplication.CreateFileDialog(oFileDlg)
'Define the filter to select part and assembly files or any file.
oFileDlg.Filter = "All Files (*.*)|*.*"
'Define the part and assembly files filter to be the default filter.
oFileDlg.FilterIndex = 1
'Set the title for the dialog.
oFileDlg.DialogTitle = "Save File As"
'Tell the dialog box to throw up and error when cancel is hit by user
oFileDlg.CancelError = True

'Show the file dialog
On Error Resume Next
oFileDlg.ShowSave

'save the user specified file
Dim newFileName As String
newFileName = oFileDlg.FileName
.

업데이트 :

나는 기간을 다루는 동안 일을 여전히 일하게하기 위해 다음 "해킹"을 수행하였습니다.

oFileDlg.fileName = sFname & "."
oFileDlg.ShowSave
fullName = Left$(oFileDlg.fileName, Len(oFileDlg.fileName) - 1)
.

Windows 7 및 Windows 10 및 Windows 10에서는 꽤 많이 작동했습니다. 불행히도 Windows 10 Creative Update는 파일 대화 상자가 작동하는 방식을 변경 한 것으로 보입니다. 위의 코드를 사용하면 이름에 기간이없고 이름에 기간이 있으면 왼쪽의 첫 번째 기간부터 첫 번째 기간부터 모든 것을 자르지 않으면 FullName이 비어있게됩니다.

나는 Windows 10에서 무엇이 바뀌 었는지는 확신하지 못해, 그러나 그것은 내 해킹을 꽤 파괴했다. Windows 7은 Creative Update가 작동하기 전에 Windows 7이 미세하고 Windows 10을 작동합니다. 나는 위에서 언급 한 Windows 버전에서 모든 것을 다시 일하게하기 위해 다음을 수행했습니다.

oFileDlg.fileName = sFname & ".00"
oFileDlg.ShowSave
fullName = Left$(oFileDlg.fileName, Len(oFileDlg.fileName) - 3)
.

도움이 되었습니까?

해결책

이것은 VB 속성이지만 VBA까지도 확장 될 수 있습니다. 설정 저장 설정을 설정하여 중도 확장을 지원 하시겠습니까? 다음과 같이 시도하십시오 :

SupportMultiDottedExtensions = True
.

이 설정은 파일 이름의 기간을 사용하는 것을 의미하는 점선 확장을 사용하는 데 사용됩니다. 설명서 및 정보는이 MSDN 참조를 참조하십시오. http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.supportmultidottedExtensions.aspx#y129

이렇게 기사는 파일 이름의 기간이있는 구 SaveAs 대화 상자가 확장자를 반환하지 않습니다

편집

Autodesk 문서를 확인한 후, 어렵고 불쾌한 작업, 내 의견으로는 실제로 MultidottedExtensions에 대한 지원이 없음으로 보입니다. 그러나 나는 매우 밀접하게 적응 한 vbaexpress에서 함수를 찾았습니다. 이 기능을 사용할 수없는 문자를 포함하여 문자열을 필터링하는 데 사용할 수 있습니다. Jimmy Pena의 블로그는 http : // www. jpsoftwaretech.com/excel-vba/validate-filenames/ . 나는 실질적으로 기간을 추가하고 코드에 대체를 추가했습니다.

'A function for filtering strings, with a focus on filenames.
Function FilterFileNameString(stringToScrub As String) As String
'Filters a filename string - or any string for that matter.
Dim FilteredString As String

  'A highly nested replace function.
  FilteredString = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(stringToScrub, ".","|", ""), ">", ""), "<", ""), Chr(34), ""), "?", ""), "*", ""), ":", ""), "/", ""), "\", "") 

  'Returns filtered string.
  FilterFileNameString = FilteredString 
End Function
.

Jimmy Pena의 블로그에는 재귀 버전이 포함되어 있지만, 그가 추천하지는 않지만

문자열을 다른 문자로 파일 이름으로 필터링 할 수 있습니다.이 경우 공백입니다. 그러나 밑줄이나 당신이 즐겁게하는 다른 캐릭터를 사용할 수 있습니다.

버전 관리 또는 유사한 목적을 위해 기간을 사용하려고 시도하고 Inventor는 사용자에게 사용하지 않을 것입니다. 그러한 표시를 제공 할 수있는 다른 문자 또는 문자 집합을 강력히 조언 할 것이고 밑줄을 제공 할 수 있습니다. _ ", 번호 매기기 시스템,"001 ","002 ", 레터링 시스템,"AAA ","AAB ", 또는 초점에 대해 의미가 무엇이든간에.

응용 프로그램을 사용자 친화적으로 만드는 경우, 원하는 파일 형식에 저장하기 전에 입력 한 문자열을 필터링하고 기간 필터링이 슬픔을줍니다. 추가 단계를 추가 할 수 있지만 사용자에게 불필요한 추가 번거 로움을 제지하지 않고 Pesky 잘못된 문자를 필터링하는 것이 가장 좋고 쉬운 방법 일 수 있습니다.

~ jol

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top