• ベストアンサー

現在開いているbook全てを対象に処理したい

Excel VBA で質問です。 現在開いている全てのbookを対象に処理したい場合どうすればよろしいでしょうか? *内容* Sub グラフ参照先変更() Dim wb As Workbooks Dim ws As Worksheet Dim myAd As String Dim myChart As ChartObject myAd = "A40:A70,I40:I70,N40:N70,S40:S70,X40:X70" >For Each wb In Workbooks For Each ws In Worksheets For Each myChart In ws.ChartObjects myChart.Chart.SetSourceData Source:=ws.Range(myAd), PlotBy:=xlColumns Next myChart Next ws Next wb End Sub >で現在エラーが起きています。 アドバイスよろしくお願い致します。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>For Each ws In Worksheets さらに、 For Each ws In wb.Worksheets にしないとせっかく列挙したブックが無視されます。

u-mesh12
質問者

お礼

結果が得られるようになりました。アドバイスありがとうございましたm(__)m

その他の回答 (1)

noname#10813
noname#10813
回答No.1

Dim wb As Workbooks を Dim wb As Workbook に変えると大丈夫だと思います。

u-mesh12
質問者

お礼

#2さんの補足と合わせて、結果が得られるようになりました。アドバイスありがとうございました。

関連するQ&A

  • グラフのデータ範囲をCellsで指定するとエラー

    あるサイトを参考に、VBAでChartType が xlStockOHLC 形式のグラフを作成しようとしています。 ところがデータ範囲の指定方法で .SetSourceData Source:=wsdata1.Range("b1:e100"), PlotBy:=xlColumns あるいは i = 100 .SetSourceData Source:=wsdata1.Range("b1:e" & i), PlotBy:=xlColumns とすれば、正常に動作しますが、 .SetSourceData Source:=wsdata1.Range(Cells(1, 2), Cells(100, 5)), PlotBy:=xlColumns とすると、Rangeメソッドは失敗しました。_worksheetオブジェクト となります。 両者は同じ範囲を指定しているつもりなのですが、どこが間違いでしょうか。 Option Explicit Sub sample() Dim ws As Worksheet Dim wsdata0, wsdata1 As Worksheet Dim topPosition As Double Dim leftPosition As Double Dim width As Double Dim height As Double Dim chartObj As ChartObject Dim chart0, chart1 As chart Dim i As Integer 'グラフを作成するシートを指定 Set ws = Worksheets("Sheet1") Set wsdata0 = Worksheets("saya00") Set wsdata1 = Worksheets("saya01") 'グラフを表示させる位置を取得 ※例としてセル「G2」の位置を取得 With ws.Range("a1") leftPosition = .Left topPosition = .Top End With 'グラフの横と縦のサイズを設定 width = 1000 height = 500 'ChartObjectオブジェクトを作成 Set chartObj = ws.ChartObjects.Add(leftPosition, topPosition, width, height) 'ChartObjectオブジェクトの名前を設定 chartObj.Name = "saya" 'Chartオブジェクト(グラフ)を作成 Set chart0 = chartObj.chart With chart0 'グラフの作成元としてセル「B2」から一覧の範囲を指定 ' .SetSourceData Source:=wsdata.Range("b1:e100"), PlotBy:=xlColumns ' .SetSourceData Source:=ws.Range("b1:e100"), PlotBy:=xlColumns ' i = 100 ' .SetSourceData Source:=wsdata1.Range("b1:e" & i), PlotBy:=xlColumns .SetSourceData Source:=wsdata1.Range(Cells(1, 2), Cells(10, 5)), PlotBy:=xlColumns 'グラフの種類を「折れ線グラフ」に指定 .ChartType = xlStockOHLC 'グラフのタイトルを表示 .HasTitle = True 'グラフのタイトルを設定 .ChartTitle.Text = "saya-1" 'グラフのタイトルのフォントサイズを設定 .ChartTitle.Font.Size = "12" End With '後片付け Set chart0 = Nothing Set chart1 = Nothing Set chartObj = Nothing End Sub

  • VBAですべてのワークシートを処理したい

    ブック内の全ワークシートに対して同じ処理をするために、 For each ワークシート in Worksheets ~処理~ Next ワークシート を使ってみたのですが、その時にアクティブになっているシートしか処理されません。たとえば次のようなシンプルなコードでも、同様です。何が抜けているのでしょうか。 Sub allworksheets() Dim WS As Worksheet For Each WS In Worksheets Range("a1") = "123" Next WS End Sub マクロの勉強を始めたばかりで、基本的なことでつまづいてます。よろしくお願い致します。

  • EXCEL2007 VBA グラフサイズ修正バグ?

    下記のようなグラフのサイズ調整するVBAプログラムをEXCEL2007で動かしました。 VBEで実行すると正常に動作します。 シートに図形を設置し、その図形にマクロを登録して実行すると、 グラフが3画面位広がってしまいます。 図形にマクロ登録してグラフ調整を正常に動かすことはできないのでしょうか? ----------------------------------------------------- 'グラフの再調整を行うサブルーチン Sub chartRerange()  Dim wb As Workbook  Dim strWbName As String  Dim myRng1, myRng2, myRng3 As Range  Dim myChart As Shape  Dim rngTarget As Range      '開いているすべてのワークブックを処理対象とする  For Each wb In Workbooks   strWbName = wb.Name      '「月度」が含まれているならば処理   If InStr(strWbName, "月度") <> 0 Then    Set myRng1 = wb.Worksheets(2)    Set myRng2 = wb.Worksheets(3)        For Each myChart In myRng1.Shapes     'グラフならば     If (TypeOf myChart.OLEFormat.Object Is ChartObject) Then            Select Case myChart.Name       Case "chart1"        Set rngTarget = Range("B24:AG42")      End Select             'グラフを指定したエリアに配置する      With myChart        .Top = rngTarget.Top        .Left = rngTarget.Left        .Width = rngTarget.Width        .Height = rngTarget.Height      End With     End If    Next   End If  Next      MsgBox "処理完了"      Set wb = Nothing   Set myRng1 = Nothing   Set myRng2 = Nothing   Set myChart = Nothing   Set rngTarget = Nothing End Sub

  • どちらを使った方がいいでしょうか?

    Sub test1() Dim ws As Worksheet For Each ws In Worksheets Debug.Print ws.Name Next End Sub Sub test2() Dim ws As Variant For Each ws In Worksheets Debug.Print ws.Name Next End Sub どちらも問題なく実行されますが、 VBA的にどちらを使った方がいいでしょうか?

  • Word VBA

    ※行頭の下線はプログラムに関係ありません、インデントと解釈ください。 Excel VBAで既に開いているワークブックの一覧取得は Sub test() __Dim wb As Workbook __For Each wb In Workbooks ____Debug.Print wb.Name __Next wb End Sub で成功したのですが、 Word VBAで Sub test() __Dim wb As Object __For Each wb In CreateObject("Excel.Application").Workbooks ____Debug.Print wb.Name __Next wb End Sub では何も表示されません。 問題解決のための知識を与えてくださる方、宜しくお願いします。

  • 「.Name」がエラーになる理由は?

    Sub 全てのシート名を取得する() Dim w As Worksheet Dim 行 As Long 行 = 1 For Each w In Worksheets Debug.Print w.Name 行 = 行 + 1 Next End Sub Sub 全てのブック名を取得する() Dim wb As Workbooks Dim 行 As Long 行 = 1 For Each wb In Workbooks Debug.Print wb.Name 行 = 行 + 1 Next End Sub 標準モジュールに ふたつのプロシージャーを作ったのですが 「全てのシート名を取得する」は問題なく動作しますが 「全てのブック名を取得する」は「.Name」の部分が 「コンパイルエラー メソッドまたはデータ メンバが見つかりません。」 (Error 461) になってしまいます。 なぜでしょうか? 全てのブック名を取得することはできないのですか?

  • インプットボックスからファイルを開くようにしました。しかし、すでに開い

    インプットボックスからファイルを開くようにしました。しかし、すでに開いているか確認する項目がうまく作動しません。どのように記述するか教えて頂けませんでしょうか。 Sub Macro1() Dim wb As Workbook Dim psw As Boolean Dim fil As String fil = InputBox("ファイル名入力") For Each wb In Workbooks ’すでに開いているか確認。二重に開くのを防止 If wb.Name = "fil.xls" Then ’ここの部分がうまく作動してくれません。 psw = True Exit For End If Next wb If psw = False Then Workbooks.Open Path & "C:¥" & fil End If End Sub

  • VBAで全てのワークシートに処理するとき

    ブック内の全シートに、列を挿入しようとしたら、下の WS.Range("E1").Select の行で「Rangeクラスのselectメソッドが失敗しました」とエラーになります。 セルに入力する処理のときはこのパターンでできたのですが・・・いろいろ試してもわかりません T_T 何が必要でしょうか。 ----------------- Sub 列を挿入() Dim WS As Worksheet For Each WS In Worksheets WS.Range("E1").Select Selection.EntireColumn.Insert Next WS End Sub ----------------- よろしくお願い致します。

  • もしも新規Excelファイルを開いてる場合は閉じる

    Excel2003です・ ユーザーが新規Excelファイル(book1)かテスト用ファイルを開いている場合は閉じる処理を考えております。 Option Explicit Dim ws As Workbook, flag As Boolean Private Sub Workbook_Open() For Each ws In Workbooks If ws.Name = "Book1" Then flag = True Next ws If flag = True Then Workbooks("Book1.xls").Close   Else   End IF For Each ws In Workbooks If ws.Name = "テスト用.xls" Then flag = True Next ws If flag = True Then Workbooks("テスト用.xls").Close   Else   End IF End Sub このコードだとBook1を開いているのに、Trueで拾ってくれません。 ws.Name = "Book1.xls"にしても同じです。 どこかおかしい部分があるのでしょうか?

  • VBAで複数のシート名を置換する処理

    Dim ws As Worksheet Dim i As Long For i = 1 To ThisWorkbook.Sheets.Count For Each ws In ThisWorkbook.Sheets If ws.name Like "*T*" Then ws.name = Replace(ws.name, "T", "S") End If Next Next End Sub この処理をするとnameメソッド失敗worksheetオブジェクト 処理できるようにするにはどうすればいいんでしょうか