2016-09-06 9 views
0

フォルダから複数の画像を挿入します。プログラムは、フォルダの先頭から開始し、降順でピクチャを挿入するはずですが、そうではありません。複数の画像をフォルダから降順に挿入する

最初の3〜5枚の写真はプレゼンテーションで最後に表示され、他のすべての表示は完全な順序です。

Sub createTransModel() 

    Dim oSlide As Slide 
    Dim oPicture As Shape 
    Dim myFile As String 
    Dim myFolder As String 
    Dim pptLayout As CustomLayout 
    Dim fileName As String 
    Dim rotSlide As Slide 

    Set pptLayout = ActivePresentation.Slides(1).CustomLayout 
    myFolder = GetFolderPath() 
    myFile = Dir(myFolder & "*.png") 

    Do While myFile <> "" 
     Set oSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, _ 
     ppLayoutBlank) 
     Set oPicture = oSlide.Shapes.AddPicture(myFile, _ 
      msoFalse, msoTrue, 1, 1, _ 
      ActivePresentation.PageSetup.SlideWidth, _ 
      ActivePresentation.PageSetup.SlideHeight) 

     myFile = Dir 
    Loop 

    fileName = inputBox("Please enter the filename") 
    ActivePresentation.SaveAs (fileName & ".pps") 
End Sub 


Public Function GetFolderPath() As String 


    Dim myFile As Object 
    Dim fileSelected As String 
    Dim path As String 
    Dim objPPT As Object 
    Dim i As Integer 
    Dim folderFromPath As String 
    Dim directory As String 

    directory = "M:\tm\public\Conti_Anlage\Voith Proben" 

    Set myFile = Application.FileDialog(msoFileDialogOpen) 
    With myFile 
     .InitialFileName = directory 
     .Title = "Choose File" 
     .AllowMultiSelect = False 
     If .Show <> -1 Then 
     Exit Function 
     End If 
     fileSelected = .SelectedItems(1) 
    End With 


    For i = Len(fileSelected) To 1 Step -1 
     If Mid(fileSelected, i, 1) = "\" Then 
      folderFromPath = Left(fileSelected, i) 
      Exit For 
     End If 
    Next 

    GetFolderPath = folderFromPath 

End Function 
+0

スワップされた最初と最後のものがファイルダイアログで使用されているエクスプローラで交換されている可能性があります(回避方法が多すぎる古いバグです)。その場合、リストの最初と最後の項目を交換するだけです。 – Christoph

+0

私もそのバグを持っていましたが、すでにそれを修正しました。コードではないが投稿した。そのバグはそれとは独立しているようです。 – Christian

+0

これはあなたの問題ではありません。ファイルを手動でループしていて、ファイルダイアログで複数を選択していません。 – Christoph

答えて

0

ご注文の問題を解決するためにここに物事のカップル
1.がありますが、あなたは(「for」ループを使用すなわち:For Each oFile in oMyFolder.Files)フォルダ内のすべてのファイルを得ることができ、その後、彼らに道を注文あなたはそれらを(多分配列で)欲しいです。これで追加できます。
2.あなたの 'GetFolderPath'関数:私は、あなたがファイルを選択してから、選択したファイルのフォルダを返すことを望みます。あなたは 'Application.FileDialog(msoFileDialogFolderPicker)'を使うことができます。これにより、ユーザーにフォルダの選択が求められます。この方法では、フォルダの抽出について心配する必要はありません。まだ選択したファイルのフォルダを取得したい場合は、 'File System'オブジェクトを見てください。これを使用してフォルダを取得することができます(filesystemobject.GetParentFolderName(MyFile)

0

Windowsエクスプローラウィンドウに表示されるファイルの順序は、ファイルエクスプローラの設定によって異なります。ファイルは、名前順、サイズ順、またはさまざまな方法でアルファベット順に表示されます。これはファイルエクスプローラのやり方であり、ファイルがディスク上に現れる実際の順序とは関係ありません。

Dir $を繰り返し呼び出すと、ディスクに表示される順序でファイルが表示されます。あなたが特定の順序でそれらを必要とするならば、それらを並べ替えるか、Dirによって返されたい順番でフォルダにコピーする必要があります。

関連する問題