2017-08-21 8 views
1

私はVBAの新機能を使用しているため、インターネットからコピーした後はほとんどのコーディングが記録または変更されます。ブックの名前を変更した後でvbaが動作しない

実行した手順を記録した後、マクロがファイル名とシート名を記録することに気付きました。

したがって、記録されたマクロの名前と似ていないファイルを開くと、マクロが機能しません。

たとえば、ファイルBはマクロに登録されている名前ですが、今はファイルCでマクロプログラムを実行したいが失敗します。

私はそれを回避できる方法はありますか?

Sub trial() 

Dim wb, wb2, wb3 As Workbook 

Dim fn As String 

Set wb = ActiveWorkbook 

With Application.FileDialog(msoFileDialogOpen) 
.AllowMultiSelect = False 
If .Show = -1 Then 
fn = .SelectedItems(1) 
Set wb2 = Workbooks.Open(fn) 
Else 
MsgBox "You cancel the process." 
End If 
End With 

Dim SheetName As String 

'this is the place i would like to edit 
Windows("SPC July BPW341CL - Copy.csv").Activate 
    Sheets("SPC July BPW341CL - Copy").Select 
    Sheets("SPC July BPW341CL - Copy").copy after:=Workbooks(_ 
     "New Microsoft Excel Worksheet.xlsm").Sheets(4) 
      Sheets("SPC July BPW341CL - Copy").Activate 


SheetName = Format(Date, "yyyymmdd") 'Change the format as per your requirement 
ActiveSheet.Name = SheetName 


    Set wb3 = Application.ActiveWorkbook 

    Sheets("Summary").Activate 
    Range("A1").Select 

     For Each ws In wb3.Worksheets 
      If ws.Name <> "Compare to RGB" And ws.Name <> "Summary" Then 
       For i = 1 To 5 
        Selection.Value = ws.Name 
        Selection.Offset(0, 1).Select 
      Next 
     End If 
    Next 

End Sub 

答えて

1

あなたはほぼそこにいます。上部に

は、あなたは、コードの後半で使用することができたブックへの参照を作成している:

Set wb2 = Workbooks.Open(fn) 

これは、後でコード内で使用することができ、ブックへの参照を作成します。

あなたは、コードがある場合:

Windows("SPC July BPW341CL - Copy.csv").Activate 
Sheets("SPC July BPW341CL - Copy").Select 
Sheets("SPC July BPW341CL - Copy").copy after:=Workbooks(_ 
    "New Microsoft Excel Worksheet.xlsm").Sheets(4) 
     Sheets("SPC July BPW341CL - Copy").Activate 

を私はこれが記録されたコードであると推定?あなたは以前に作成した参照を使用することができるはずです。

wb.Sheets("SPC July BPW341CL - Copy").Select 
wb.Sheets("SPC July BPW341CL - Copy").copy after:=wb2.Sheets(4) 

など

これは、私はあなたがしたいシートに完全には明らかではないだからあなたは、それが何をしたいのか正確に行えない可能性がありどのワークブックからのコピー。しかし、あなたは一般的な構文が正しいです。

あなたはこれが

dim oSheet as worksheet 
set osheet = wb.sheets("sheetname") '//to set via name, Or 
set oSheet = wb.sheets(4)   '//Or to set via index 

など

希望のような、インデックスシートを支援することができます。

編集:その他の注意点: 1.常にコードの先頭にOption Explicitを使用してください。 2.)Dim wb、wb2、wb3としてワークブック - この行は3つのワークブックオブジェクトを宣言しません。代わりに、実際には2つのバリアントとワークブックが宣言されています。 Dim wb As Workbook, wb2 As Workbook, wb3 As Workbook

+0

ありがとう、答えは@イングランドですが、私はまだ私のVBAで何を変えるべきかはっきりしていません。私はfnというリファレンスを作ったと言いますが、それはそうですか?上記のVBAのすべての名前を代わりにfnで置き換えることが可能ですか?たとえば、 /Windows( "SPC July BPW341CL - Copy.csv")。/をアクティブにする/ /Windows("fn").Activate/に置き換えられますか? 今のところ、ファイル名「SPC July BPW341CL - Copy.csv」を変更して、異なる名前の他のブックをマクロでも実行できるようにしたいだけです。 – Fong

+0

マクロで何をしたいか説明してください。ユーザーがExcelファイルを選択できるようにしたら、何ができますか? – ainwood

+0

ファイルAはデータをコンパイルするためのもので、ファイルBをZに変換するもので、さらには生データです。私がする必要があるのは、ユーザーが入力ファイル(File B to Z)を選択し、その中のすべてのデータをFile Aにコピーして、それらを1つのファイルで一緒にコンパイルすることです。そうすることで、生データに応じてファイル名が時々刻々と変わるので、すべてのファイル名をリストすることはできません。だから、私は方法でそれをプログラムすることができますので、ユーザーはファイル名を非常に一度変更するのではなく、任意のファイルを選択することができます。 – Fong

関連する問題