Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Microsoft 365)
EXCEL2010と2021およびVBAの互換性について
投稿日時: 24/01/05 20:14:04
投稿者: Angels17OT

下記コードは以前EXCEL2010で作成したコードで、指定したフォルダー内のEXCELファイルの項目行を指定して貼り付けられるようにしたものですがEXCEL2021やOFFICE365のEXCELで開いたところ指定したフォルダー内のEXCELファイルが表示されません。いろいろ調べてみたのですが何が原因なのか分かりません。
ご教授を宜しくお願いいたします
 
Option Explicit
Sub 集約()
    Dim myPath As String
    Dim fName As String
    Dim done As Boolean
    Dim hdLines As Long
    Dim sh As Worksheet
    Dim t As Long
    Dim fBk As Workbook
    Dim tBk As Workbook
    Application.ScreenUpdating = False
    'フォルダの選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not .Show = True Then Exit Sub 'キャンセルボタン
        myPath = .SelectedItems(1) & "\"
    End With
    'ヘッド行数の指定
    hdLines = Application.InputBox("各シートのヘッダー部分の行数を指定してください", Type:=1)
    If hdLines = 0 Then Exit Sub 'キャンセルボタン
     
    fName = Dir(myPath & "*.xlsx") 'フォルダからエクセルブックを抽出
      
    Do While Len(fName) > 0 '抽出が終われば空白値が返る
        Set fBk = Workbooks.Open(myPath & fName)
        For Each sh In fBk.Worksheets
            If Not done Then '最初
                sh.Copy 'シートをコピーして新規ブックとする
                Set tBk = ActiveWorkbook
                done = True
            Else
                With tBk.Sheets(1)
                    t = .UsedRange.Row + .UsedRange.Rows.Count
                    sh.Rows(hdLines + 1 & ":" & sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1).Copy .Range("A" & t)
                End With
            End If
        Next
        fBk.Close False
        fName = Dir() '次のブックを抽出
    Loop
      
    If tBk Is Nothing Then
        MsgBox "フォルダにブックがありません"
    Else
        '無条件上書き保存
        Application.DisplayAlerts = False
        tBk.SaveAs ThisWorkbook.Path & "\結合ブック.xlsx"
        Application.DisplayAlerts = True
        tBk.Close
        MsgBox "結合して保存しました。"
    End If
          
End Sub

回答
投稿日時: 24/01/05 22:15:14
投稿者: simple

標準的な操作のように見受けますので、製品の仕様上の問題ではないように思います。(質問者さんも同じ見解でしょう)
(もちろんOSや製品のupdateに伴うなんらかの不具合は別です。)
あるとすればWindows11に関するものかもしれませんが、そうであればもっと大問題になっているはず。
 
いずれにせよ、想定と異なる結果となるケースについて、
ステップ実行などを行い、問題をさらに特定されてはいかがでしょうか。
 
以下は既に確認済みかと思いますが、念のため申し添えます。
1.対象ファイルが.xlsmファイルであり、もともと対象から除外されていることはないですか?
2.Application.DisplayAlerts = Falseが想定外のことを隠してしまっていませんか?
  こうした局面では、これらはコメントアウトしたほうがいいでしょう。
  Application.ScreenUpdating = False も同様です。

回答
投稿日時: 24/01/05 22:30:57
投稿者: WinArrow

Excel2010とEcel2013以降では、
画面制御の仕組みが変わっています。
 
その関係で画面表示に違いが合うかもしれません。
 
ステップ実行で、確認してみましょう。
 
Ecel2019の環境でテストしましたが、問題は見あたりませんでした。

投稿日時: 24/01/06 08:54:30
投稿者: Angels17OT

simple様
WinArrow様
 
おはようございます。simple様のご指摘いただきました下記について確認しましたが、フォルダ内にはxlsxファイルは入っております。2についても試した見ましたが駄目でした。
会社ではEXCEL2021使用、自宅ではOFFICE365のEXCELを使用しています。
 
1.対象ファイルが.xlsmファイルであり、もともと対象から除外されていることはないですか?
2.Application.DisplayAlerts = Falseが想定外のことを隠してしまっていませんか?
  こうした局面では、これらはコメントアウトしたほうがいいでしょう。
  Application.ScreenUpdating = False も同様です。
 
また、またネットで調べて下記を実行してみました。
@EXCEL2010で作成したコードをEXCEL2021で開き、 [ファイル] > [情報] > [変換] をクリックして、現在のファイル形式に変換します。 [変換]という項目がなく実行できませんでした。
 
A[ファイル] > [情報] > [問題のチェック] > [互換性の確認] をクリックして、以前のバージョンでは動作しない機能が使用されていないかチェックします。チェックしましたが互換性に問題なしのメッセージが出てきて来ました。
 
B[ファイル] > [オプション] > [詳細設定] > [一般] の [VBA マクロの設定] で、 [VBA プロジェクト オブジェクト モデルへのアクセスを信頼する] にチェックを入れます。[一般] の [VBA マクロの設定]項目がなかったので、[オプション] > [トラストセンター] >[トラストセンターの設立] で各項目をチェックしましたが特に問題がないように見えました。
今後もネットその他を調べてみます。アドバイスをいただければ幸いです。
なお、本日は夕方まで出かけますので返信できないと思います。

回答
投稿日時: 24/01/06 19:21:28
投稿者: simple

ひょっとして、
   'フォルダの選択
   With Application.FileDialog(msoFileDialogFolderPicker)
     If Not .Show = True Then Exit Sub 'キャンセルボタン
     myPath = .SelectedItems(1) & "\"
   End With
のところでファイルが表示されない、と指摘しているんでしょうか?
 
Application.FileDialog(msoFileDialogFilePicker)とは違って、
それはフォルダーピッカーですから、フォルダー直下のフォルダ群は示しますが、
ファイルそのものは表示しませんよ。それは昔からそうじゃないですか?
私の手元のExcel2019でもそうなっています。

回答
投稿日時: 24/01/06 19:29:09
投稿者: simple

「フォルダを選択するダイアログ」
http://officetanaka.net/excel/vba/tips/tips39.htm
がよく参考にされる記事かと思いますが、
ファイルが表示されるフォルダピッカーはひとつもありません。

投稿日時: 24/01/06 20:00:15
投稿者: Angels17OT

simple 様
 
ありがとうございます。ご指摘のようにフォルダしか表示されませんでした。
もう一度コードを見直してみます。
 

回答
投稿日時: 24/01/06 20:06:05
投稿者: simple

ん?
そもそもの質問は何だったんですか?
私のコメントはそれの回答になっていたんでしょうか?
 
コードを見直すとは?どういう意味でしょうか?
ファイルは表示しない設計がそのとおりに実現しているなら、
何を見直すんですか?

投稿日時: 24/01/06 20:29:49
投稿者: Angels17OT

simple 様
  
すみません。説明不足でした。
指定したフォルダ内の複数のxlsxファイルを読み込み、項目行以下のデータを貼り付ける作業をしたかったのです。コードを見直すのではなくコードの追加修正してできないか?調べようと思いました。

回答
投稿日時: 24/01/06 20:36:26
投稿者: simple

https://excel-ubara.com/excelvba1/EXCELVBA374.html
を参考にGetOpenFileNameをMultiSelect:=Trueで利用する方法を検討してください。
 
なお、Excelのversionの違いは関係なかったということですね。
以前使った時も同じだったと思います。
単に質問者さんが仕様を勘違いしていたということですね?

投稿日時: 24/01/06 20:59:55
投稿者: Angels17OT

simple 様
 
ありがとうございます。
以前使った時は出来ていたように思ったのですが 勘違いだったようですね。
アドバイスいただいたことを参考にしてイメージ通りに出来るまでチャレンジしてみます。
ひとまず解決済みとして終了したいと思います。もし思い通りに出来なければ、また投稿させていただきます。
ありがとうございました。