2015-10-27 2 views
2

Я пытаюсь написать код, который подскажет пользователю путь к файлу .xlsx, а затем откройте эту книгу. В конце концов, я хочу, чтобы VBA копировал данные из книги, которую она открывает. Но я не могу получить VBA, чтобы открыть книгу.Проблема капитализации с Workbooks.Open using VBA в Excel 2016

Вот мой код:

Sub Select_File_Or_Files_Mac() 
Dim MyPath As String 
Dim MyScript As String 
Dim MyFiles As String 
Dim MySplit As Variant 
Dim N As Long 
Dim Fname As String 
Dim mybook As Workbook 

On Error Resume Next 
MyPath = MacScript("return (path to documents folder) as String") 
'Or use MyPath = "Macintosh HD:Users:Ron:Desktop:TestFolder:" 

' In the following statement, change true to false in the line "multiple 
' selections allowed true" if you do not want to be able to select more 
' than one file. Additionally, if you want to filter for multiple files, change 
' {""com.microsoft.Excel.xls""} to 
' {""com.microsoft.excel.xls"",""public.comma-separated-values-text""} 
' if you want to filter on xls and csv files, for example. 
MyScript = _ 
"set applescript's text item delimiters to "","" " & vbNewLine & _ 
      "set theFiles to (choose file of type " & _ 
     " {""org.openxmlformats.spreadsheetml.sheet""} " & _ 
      "with prompt ""Please select a file or files"" default location alias """ & _ 
      MyPath & """ multiple selections allowed true) as string" & vbNewLine & _ 
      "set applescript's text item delimiters to """" " & vbNewLine & _ 
      "return theFiles" 

MyFiles = MacScript(MyScript) 
On Error GoTo 0 

If MyFiles <> "" Then 
    With Application 
     .ScreenUpdating = False 
     .EnableEvents = False 
    End With 

    MySplit = Split(MyFiles, ",") 
    For N = LBound(MySplit) To UBound(MySplit) 

     ' Get the file name only and test to see if it is open. 
     Fname = Right(MySplit(N), Len(MySplit(N)) - InStrRev(MySplit(N), Application.PathSeparator, , 1)) 
     If bIsBookOpen(Fname) = False Then 

      Set mybook = Nothing 
      On Error Resume Next 
      Set mybook = Workbooks.Open(MySplit(N)) 
      On Error GoTo 0 

      If Not mybook Is Nothing Then 
       MsgBox "You open this file : " & MySplit(N) & vbNewLine & _ 
         "And after you press OK it will be closed" & vbNewLine & _ 
         "without saving, replace this line with your own code." 
       mybook.Close SaveChanges:=False 
      End If 
     Else 
      MsgBox "We skipped this file : " & MySplit(N) & " because it Is already open." 
     End If 
    Next N 
    With Application 
     .ScreenUpdating = True 
     .EnableEvents = True 
    End With 
End If 

    Cells(1, 1) = MyFiles 

    Set mybook = Workbooks.Open(MyFiles) 

    End Sub 

    Function bIsBookOpen(ByRef szBookName As String) As Boolean 
    ' Contributed by Rob Bovey 
On Error Resume Next 
bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing) 
    End Function 

Когда я запускаю код, я получаю 1004 во время выполнения ошибки изречения файла не может быть найдена с путем к файлу заглавных букв. Это странно, так как пользователь должен выбрать файл во всплывающем окне, чтобы файл был там. У меня также есть код, записывающий путь к ячейке 1,1 в электронной таблице. Странно, что путь к файлу, который программа печатает, имеет надлежащую оболочку как фактический путь к файлу, но ошибка находится во всех шапках. Я думаю, проблема в том, что unix чувствителен к регистру, и я запускаю это на OSX. почему Excel помещает путь файла во все кепки? То же самое происходит, если я жестко закодировать путь к файлу Workbooks.Open (прямой путь к файлу здесь)

Я использую код, который я нашел на https://msdn.microsoft.com/en-us/library/office/hh710200(v=office.14).aspx

ответ

0

это, кажется, недостающее

' Change drive/directory to MyPath. 
ChDrive MyPath 
ChDir MyPath 
+0

Tsolina, я введите эти две строки кода, и теперь я получаю ошибку времени выполнения '76' –