• ベストアンサー

excel2007のマクロに関して

私VBAがまったくわかりません ここ何日かいろいろやっているのですが、全くできないので教えていただければ嬉しいです。 見積書(ファイル名:00001)(sheet1)からボタンを押すと別ファイルの請求書(sheet2)が開き「宛名」「金額」等の特定のセルをコピー貼り付けを自動で行うVBAを作りたいと思っております。 ファイルを開いてコピー貼り付けは出来たのですが、見積書のファイル名はボタンを押す時点で毎回違うファイル名なのでそこがクリアできません。 なにとぞご指導ほど、お願いいたします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

>に変更してwkにファイル名を入れてみたのですが動きません・・・ wkは変数ですよね Workbooks("wk").Worksheets("Sheet1").Range("d5").Copy でなくて Workbooks(wk).Worksheets("Sheet1").Range("d5").Copy でないと、wkというブックを指定していることになっていますよ。 Private Sub CommandButton1_Click() Workbooks.Open "C:\Documents and Settings\maehrakana\My Documents\b.xls" ThisWorkbook.Worksheets("Sheet1").Range("d5").Copy Workbooks("b.xls").Worksheets("Sheet1").Range("A1").PasteSpecial ThisWorkbook.Worksheets("Sheet1").Range("A4").Copy Workbooks("b.xls").Worksheets("Sheet1").Range("d1").PasteSpecial End Sub で十分ですよ。

Eccentrici
質問者

お礼

できました! 有難う御座いました。 もっと勉強します。

その他の回答 (4)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

>こんなんで動きましたけど問題あります? 問題はないですよ。(希望の動作になっていると思いますので) コピーと貼り付け と 値を入れる場合の違いは 1、セルの書式、フォントなどまでコピーされてしまう。 2、わずかですが、コピーのために動作が増える(メモリーを使う) 位でしょうか。 理解した上に、使い分けてください。

Eccentrici
質問者

補足

前回のだと毎回違う見積書のファイル名に対応していないので (b.xlsが請求書ファイルとしてます。) Private Sub CommandButton1_Click() Dim wk As String wk = ThisWorkbook.Name Workbooks.Open "C:\Documents and Settings\maehrakana\My Documents\b.xls" Workbooks("wk").Worksheets("Sheet1").Range("d5").Copy Workbooks("b.xls").Worksheets("Sheet1").Range("A1").PasteSpecial Workbooks("wk").Worksheets("Sheet1").Range("A4").Copy Workbooks("b.xls").Worksheets("Sheet1").Range("d1").PasteSpecial End Sub に変更してwkにファイル名を入れてみたのですが動きません・・・ これは何が問題なんでしょうか? 何度もすみません

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

No2です。 ちょっとしくじった感じなので して Workbook("請求書.xls").Range("D7").Value=Workbook("見積書.xls").Range("B3").Value は して Workbook("請求書.xls").,Sheet("Sheet1").Range("D7").Value=Workbook("見積書.xls").Sheet("Shhet2").Range("B3").Value で考えてください。 請求書のブックのSheet1のシートのD7セルは 見積のブックのSheet2のB3セルにします という 命令です。

Eccentrici
質問者

補足

Private Sub CommandButton1_Click() Workbooks.Open "C:\Documents and Settings\maehrakana\My Documents\b.xls" Workbooks("a.xls").Worksheets("Sheet1").Range("A2").Copy Workbooks("b.xls").Worksheets("Sheet1").Range("A1").PasteSpecial Workbooks("a.xls").Worksheets("Sheet1").Range("A4").Copy Workbooks("b.xls").Worksheets("Sheet1").Range("d1").PasteSpecial End Sub こんなんで動きましたけど問題あります?

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

Private Sub CommandButton1_Click() ですので、多分、ユーザーフォーム上のボタンからの操作なのですよね 確認はしていないですが、ほかのブックのSlectionが可能なのでしょうかね。 特定のセルのコピー、貼り付けという動作をイメージされていますが 無駄な動作が多いだけです。 マクロの記録から得られたコードだと思いますが、 Windows("見積書.xls").Activate Range("B3").Select Selection.Copy Windows("請求書.xls").Activate Range("D7").Select  ← ここで引っかかります。 ActiveSheet.Paste Windows("見積書.xls").Activate Range("F12").Select Application.CutCopyMode = False の部分を Windows("請求書.xls").Range("D7").Value=Windows("見積書.xls").Range("B3").Value の一行で置き換える発想にしてみてください。 ひょっとして Workbook("請求書.xls").Range("D7").Value=Workbook("見積書.xls").Range("B3").Value と書き換える必要があるかもしれません。

  • emuancha
  • ベストアンサー率29% (478/1614)
回答No.1

こんにちは。直接のアドバイスではありませんが・・・ > 私VBAがまったくわかりません http://www.moug.net/index.html の即効テクニックを眺めるだけで,かなりの勉強になりますよ。 ファイルでも良いですが,ブックです。私ならば,マクロブック(マクロだけのブック)を作り,その中で見積書と請求書を選択するなどの方法で作成するかな! そんなに難しい事ではないと思います。 出来ればコードを添付して,どうしたいのか質問した方が良いです。また,モーグのExcelVBA掲示板の方が,プロからの的確なアドバイスがもらえでしょう。ただし,丸投げは嫌われます。一生懸命な人には,非常に優しいサイトです。

Eccentrici
質問者

補足

いちおう書いてはいるんですけど駄目なんです。 Private Sub CommandButton1_Click() Range("J3").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True Windows("見積書.xls").Activate Range("B3").Select Selection.Copy Windows("請求書.xls").Activate Range("D7").Select  ← ここで引っかかります。 ActiveSheet.Paste Windows("見積書.xls").Activate Range("F12").Select Application.CutCopyMode = False Selection.Copy Windows("請求書.xls").Activate Range("F9").Select ActiveSheet.Paste Range("F9,G9:G10").Select Range("G9").Activate Windows("見積書.xls").Activate Range("D14").Select Application.CutCopyMode = False Selection.Copy Windows("請求書.xls").Activate Range("F11").Select ActiveSheet.Paste End Sub 何が悪いんでしょうか?

関連するQ&A