2016-11-19 8 views
1

VBAへの新着ですね。私は、一度クリックするとダイアログボックスが開き、スプレッドシートにファイルを添付することができるボタンを作りたがっています。私は基本的にマクロを記録し、Googleの助けを借りてコードを編集しました。できます。ファイル名が変更されると、ファイル名が定期的に更新されるという問題のみです。名前が変更されると、コードが壊れます。Excel - Excelファイルの名前を変更するとVBAコードが壊れます - 解決方法はありますか?

わかっていれば、コードはファイル名とワークシート名の両方にリンクされています。ワークシートは変更されませんが、ファイル名は間違いありません。コードをファイル名から独立させる方法はありますか?誰もが、コードはかなり基本的なものです

を使用することができ、

Excelファイルは、他の人が/編集を表示することができsharedrive上にあるので、ボタンを付けたファイルを作成するとよいでしょう。エクセル、オープンVisualBasicの窓、オンと私はしたいワークシートタブ用シートの上に、私は以下の入った:

Sub AttachEmail() 

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

ActiveSheet.OLEObjects.Add(Filename:=FileSelected, Link:=False, DisplayAsIcon:=False).Select 
End Sub 
+0

コードにはどのような問題がありますか? – user3598756

+0

私のExcelファイルの名前を変更すると、コードは機能しなくなります。私の知る限りでは、コードは以前のファイル名にリンクされています。ファイル名が頻繁に更新され、異なるユーザーによって更新されるため、この問題を自動的に解決する方法があることを期待していました。 – CaptainObv

+0

コードが「動作しない」または「破損しています」という方法がたくさんあります。何が起きているかを知ることが重要です。この場合、まずファイルの名前を変更するとマクロが無効になることが考えられます。 – arcadeprecinct

答えて

1

documentationからのFileDialogオブジェクトに対して:

各ホストアプリケーションのみを作成することができます FileDialogオブジェクトの単一のインスタンスです。したがって、複数のFileDialogオブジェクトを作成しても、FileDialog オブジェクトの多くのプロパティは保持されます。 したがって、ダイアログボックスを表示する前に、すべてのプロパティを適切に設定してください。

あなたのExcelインスタンスが終了していないと、これらのプロパティの1つが持続していると思われます(2回目の使用時にエラーが発生します)。

あなたが受け取っているメッセージに基づいて、最も可能性の高い候補がInitialFileName(私の強調)です:あなたは無効なパスを指定した場合

、最後に使用したパスが使用されています。 無効なパスが使用されたときに がユーザーに警告します。ワークブックがすでに保存されていない場合、これがデフォルトになりますことを

With myFile 
    .Title = "Choose File" 
    .AllowMultiSelect = False 
    'Add this. 
    .InitialFileName = ActiveWorkbook.Path 'Or ThisWorkbook.Path 

注:

は、私はあなたが常に常に有効な値を取得することを保証するために、次のコード行を追加したいですユーザーのドキュメントフォルダ。

+0

それは素晴らしい解決策のように聞こえましたが、私は試してみましたが、同じエラーを悲しんでいました。 (私はThisとActive Workbookの両方を試して、リボンのマクロボタンを再接続しました)。 (私がなぜ再付着したかに関する私の他のコメントを参照) – CaptainObv

関連する問題