現在の/開いているブックからユーザーのPC上の場所に埋め込みOLEオブジェクト(Excelドキュメント)を保存しようとしています。このOLEオブジェクトは、マクロの実行中に生成されるテンプレート/ダッシュボードです。マクロのこの部分の目的は、ファイルがユーザーのCドライブに存在するかどうかを最初にテストすることです。存在する場合は、そのファイルを開き、この新しく開いた文書にワークブック変数を設定します。私の知る限り、これはExcel 2010とExcel 2013の間で完璧に動作します。ユーザーがファイルをCドライブに保存していない場合、マクロはOLEオブジェクトを開いてドライブに保存する必要があります。これが完了すると、マクロはその場所をポイントしてファイルを開きます。Excel 2010のファイルに埋め込みOLEオブジェクト(Excelドキュメント)を保存する
以下のコードはExcel 2013で100%動作しますが、Excel 2010では、ファイルをドライブに保存しようとするとマクロが異常終了します。ブレークモードでマクロを実行すると、保存がうまくいきます。ランタイム中にクラッシュするだけです。 DoEventsまたはApplication.Waitを使用する可能性がありますか?私は、文書やコンピュータ資源を節約するという技術に慣れていません。
私が気づいたいくつかの点:
- クラッシュが任意のエラーコードを生成しません。単に「応答が停止しました」というメッセージを返します。
- 複数のバージョンの.SaveAsファイル形式:= 52と.SaveCopyAsを試しました。
- OLEオブジェクトは常に「ワークシートイン」として開きます。これは、私が何らかの形でこれを完全に新しいブックに開くといいと思います。私はこのクラッシュが、オブジェクトがワークブックではなく「ワークシート」としてどのように開かれているかに関係していると考えています。
コード:
Dim uName As String
Dim fName As String
Dim wbk As Workbook
Dim sumWB as Workbook
Dim cbrWB as Workbook
Set cbrWB = Workbooks("PreviouslySet")
uName = Left(Environ("AppData"), Len(Environ("AppData")) - 16)
fName = uName & "\OTPReport" & ".xlsm"
If Dir(fName) = "" Then
Set oEmbFile = cbrWB.Worksheets("CBRDATA").OLEObjects("OTPReport")
oEmbFile.Verb 0
For Each wbk In Workbooks
If InStr(1, wbk.Name, "Worksheet in", vbTextCompare) > 0 And InStr(1, wbk.Name, Left(cbrWB.Name, Round(Len(cbrWB.Name)/2)), vbTextCompare) > 0 Then
Set sumWB = Workbooks(wbk.Name)
End If
Next wbk
With sumWB
.Activate
.Application.DisplayAlerts = False
'==ISSUE EXISTS HERE==
.SaveCopyAs (fName)
.Close
End With
Set sumWB = Nothing
Set sumWB = Workbooks.Open(fName)
Else:
Set sumWB = Workbooks.Open(fName)
End If
あなたは答えではなく、あなたの質問を編集するなど、あなたのソリューションを投稿する必要があります。 –
ああ、そうです。私はStacketiquetteが貧弱だと思う。 – Citanaf