• ベストアンサー

ブックのopenについて

デスクトップにファイル名「A.xls」と「B.xls」が有ります。「B.xls」はファイル名が変わるため「A.xls」のsheet1のセルA1に「B.xls」のファイル名を記載して「A.xls」と「B.xls」を共に開き「A.xls」にマクロを記述して処理をしています。この処理をする際に最初から「B.xls」を開かずにマクロでセルA1に記載したファイル名を使って「B.xls」ファイルを開くための記述を教えてください。現在のマクロの最初の部分は以下のようになっています。よろしくお願いします。 Sub Macro1() Dim nextyearbookname As String nextyearbookname = Range("A1") & ".xls"   ThisWorkbook.Activate Worksheets("sheet1").Range("B20:B21").Select Selection.Copy  Windows(nextyearbookname).Activate

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>nextyearbookname = Range("A1") & ".xls" sheets("シート名").select nextyearbookname = Range("A1") & ".xls" とか nextyearbookname = sheets("シート名").Range("A1") & ".xls" などと、シート名を指定しましょう。 あとは、 Workbooks.Open "パス名" & nextyearbookname や、 Workbooks.Open Thisworkbook.Path & "\" & nextyearbookname で、ファイルを開く事ができます。 また、無事に開く事ができた場合は、nextyearbookname ブックがアクティブになっているので、続けてマクロを実行する場合はブック名やシート名に注意してください。 場合によっては、エラーを防止するために下記のようにDirコマンドを利用して、開く前にファイルの有無をチェックした方が良い場合もあります。

参考URL:
http://www.officetanaka.net/excel/vba/file/file06.htm
hoshi7777
質問者

補足

ありがとうございました、もう一つ教えてください。 A.xlsとB.xlsとはどちらもファイル名が変わります、 そのつどセルA1に相手のファイル名を記入します、A.xlsとB.xlsには同じマクロを記述しています。 複写は値複写です。以下に記述したマクロを書きます、Selection.PasteSpecial Paste:=xlPasteValues,_ Operation:=xlNone, SkipBlanks:=False,_ Transpose:=False で「実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーです」とエラーが出たり正常に処理されたりします、何所が悪いのでしょうか。 尚、教えていただいたworkbooks.open_ thisworkbook.path &"\" nextyearbooknameを記述せず 両方とも開いて実行しても同様にエラーが出たり正常に処理されたりします。A.xlsもB.xlsもシート名は"第一表"です。よろしくお願いします。 Sub 地方税() Dim nextyearbookname As String nextyearbookname = Sheets("第一表").Range("A1")_ & ".xls" workbooks.open thisworkbook.path &"\"_ nextyearbookname ThisWorkbook.Activate Worksheets("第一表").Range("d47:v54").Select Application.CutCopyMode = False Selection.Copy Windows(nextyearbookname).Activate Worksheets("第一表").Range("d58").Select Selection.PasteSpecial Paste:=xlPasteValues,_ Operation:=xlNone, SkipBlanks:=False,_ Transpose:=False ThisWorkbook.Activate Worksheets("第一表").Range("w48:y52").Select Application.CutCopyMode = False Selection.Copy Windows(nextyearbookname).Activate Worksheets("第一表").Range("w59").Select Selection.PasteSpecial Paste:=xlPasteValues,_ Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Worksheets("第一表").Range("A2").Select ThisWorkbook.Worksheets("第一表").Activate Application.CutCopyMode = False Range("A2").Select End Sub

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1さんの回答の通りですが、、 Workbook型の変数に代入しておくと後の処理が楽です。 Sheet1!A1に「B.xls」のように拡張子付きでブック名があるとして、 Sub Test() Dim wb As Workbook, fName As String  'マクロのブックと同じパスにある指定したファイルを開く  fName = ThisWorkbook.Path & "\" & _      ThisWorkbook.Worksheets("Sheet1").Range("A1").Text  '存在を確認  If Dir(fName) = "" Then    MsgBox fName & vbCrLf & "そんなファイルは見つからんよ", vbCritical    Exit Sub  End If  '変数wbにセット  Set wb = Workbooks.Open(fName)  'コピーして、マクロのあるブックのSheet1!B20にコピー  wb.Worksheets("Sheet1").Range("B20:B21").Copy _    Destination:=ThisWorkbook.Worksheets("Sheet1").Range("B20")  '終わったら開いたファイルを閉じる  wb.Close End Sub

関連するQ&A