【VBA】複数シートをWorksheetにset

このQ&Aのポイント
  • Excel2010のVBAにおいて、Worksheetオブジェクトに、複数シートの値を格納させることが出来ず困っています。
  • MAINSHT_MULTIというWorksheetオブジェクトに、複数のシートを設定するコードを記載していますが、エラーNo.13が発生してしまいます。
  • 実現したいことは、worksheetオブジェクトに格納されたシートを1つのPDFに出力することです。
回答を見る
  • ベストアンサー

【VBA】複数シートをWorksheetにset

お世話になります。 Excel2010のVBAにおいて、 Worksheetオブジェクトに、複数シートの値を格納させることが出来ず困っています。 下記に詳細を記載します。 ご存知の方がいらっしゃったらご教授頂きたく思います。 ■エラー内容  エラーNo.13 型が一致しません。 ■コード(抜粋) Public PUBLIC_objWorkBook As Workbook Public MAINSHT_MULTI As Worksheet  Set MAINSHT_MULTI = PUBLIC_objWorkBook.Worksheets(Array("A", "B", "C", "D", "E")) そもそも、これは無理なことなのでしょうか? 別サイトで無理と言い切っていらっしゃる方はおりますが。。。。 http://answers.microsoft.com/ja-jp/office/forum/office_2003-excel/excel-vba/1046284d-7331-4b68-9e52-9a81511bed0f?auth=1 もともと実現したいことは、 worksheetオブジェクトに格納されたシートを 1つのPDFに出力する(ExportAsFixedFormat)ということですが、 worksheetオブジェクトの値に関わらず、 PDF出力プログラムが1つで済むようにしたいと考えています。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

Sub test() Sheets(Array("A", "B", "C", "D", "E")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\out.pdf" End Sub 複数シートをオブジェクト変数に格納することはできません。 手作業で行う場合でも、シートを選択してからPDF出力されるかと思います。 VBAにおいても、複数シーtを「select」してから出力してください。 1つのシートにまとまります。

enjik333
質問者

お礼

早々のお返事ありがとうございます。 オブジェクト変数だけでやろうとするのは、 仕様上不可能なんですね。 大変参考になりました。 また宜しくお願い致します。

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

No2で訂正です。 >1つのシートにまとまります。 1つのPDFファイルにまとまります。

回答No.1

前提条件として、どういうブック、シートがあって、具体的に、何を元に、何を、どうしたらどうなるハズが、どうなるから困ってるのか?不明瞭です。 > Worksheetオブジェクトに、複数シートの値を格納させることが出来ず困っています。 ABCDEの順に上書きで格納するんなら、最後に格納したEになればいいの? A~Eは新規のシートなの?既存のシートなの?ならば同じブックにあるの? > そもそも、これは無理なことなのでしょうか? コードを見ると、WorksheetにWorkbookを放り込もうとしてる様に見えるし。 > もともと実現したいことは、 これが出来なくて、迷走してわけの分からない事やろうとしてるようにも見えるし。 まずは、 自分が何をどうしたいのか? 問題点は何なのか? Excelのマクロ、VBAの操作ならそもそもそれは手作業で出来る事なのか?その手順は? なんかを整理することからでは。

enjik333
質問者

お礼

ご指摘頂きありがとうございます。 おっしゃることはごもっともでございます。 自身の整理のためにも記載しますと、 >自分が何をどうしたいのか? ⇒シートをselectせずに、1つのPDF出力モジュールで、  任意のシート数を1つのPDFファイルに出力したい >問題点は何なのか? ⇒既存の知識で上記を達成することは可能だが、  selectしactiveシートを出力する、というステップを  省略可能なのかテストしたところエラーがでた。  方法が悪いのか、仕様上の問題なのか判断がつかなかった。 その他、いろいろ言葉足らずの部分があったと思います。 失礼しました。

関連するQ&A

  • VBAでオブジェクト変数にsetしたシートがactiveかどうかを調べるには?

    標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、 あるタイミングで、あるシートをそのオブジェクト変数にSetしています。 で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。 コード例) Private oSheetA as Worksheet Sub SetSheet(sName as String)   Set oSheetA = worksheets(sName) End Sub Sub SetValue(nValue as integer)   xxxxxx ←ここでoSheetAがActiveならやりたいことがある。   oSheetA.Cells(nRow, nCol) = cValue End Sub 具体的には、複数のBookを開いている状態で、Activeシートが何であるかはオペレータの操作次第なので固定化できない状態で、SetValueが呼び出されたとき、oSheetAがActiveだったら、値をセットするセルが見えるようにセルをActivateかスクロールさせたいんです。

  • Access VBA 新しいシート作成

    Access VBAにてExcelファイルを編集するプログラムを作成しています。 Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 '実行時バインディング Set AppObj = CreateObject("Excel.Application") '編集を実施するワークブックを開く 'PathにはExcelファイルのフルパス、ExfにExcelファイル名が格納されています。 Set WBObj = AppObj.WorkBooks.Open(Path & Exf) 'Excelアプリケーションを表示する AppObj.Visible = True ※各Excelファイルはシートが1つだけ存在します。 この処理の直後に『数値』という名称の新しいシートを左から2番目に作成したいのですが、どのように記述すればよろしいでしょうか?

  • 複数のExelbookを1シートにまとめるVBA

    Accessクエリから出力したファイルをフォルダへ格納し、Excelbookを1つのExcelへまとめています。 しかし、複数の人間がExcelへ出力する為、上書きされないよう、運用上、Accessからの出力ファイル名がExcel出力時自動的に変更されるようにいたしました。(クエリ名&日付時刻) すると、それに合わせExcelシート名も変更されてしまう為、下記のVBAが使用できなくなってしまいました。 出力されるExcelは1シートのみにデータが入っています。 フォルダ内にある全book・全シートのデータを1シートに統合、もしくは"シート名"を指定せずに複数ファイルの1シート目を1つのExcelにまとめる事は可能でしょうか? どなたかご教授をお願いいたします。 Sub Sample1() Worksheets("Sheet2").Activate Dim buf As String, i As Long Dim j buf = Dir(Sheets("sheet1").Range("A1").Value & "\*.xls") Do While buf <> "" Workbooks.Open Worksheets("sheet1").Range("A1").Value & "\" & buf Sheets("シート名").Range("A2:AL1000").Copy ThisWorkbook.Activate Range("A65536").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False buf = Dir() Loop End Sub

  • EXCEL VBA 別シートの文字をシート内で検索

    excel2003 VBAで SHEET2に格納されているセルの文字をSHEET1のB列1~9000程度までの文字列の中で一致または部分一致するものがあればそのセル(B列のセル)をSHEET3に順次A列に出力したいのですが、うまくできません。SHEET2に格納されている場所はA列で(SHEET1、SHEET2の文字とも増える可能性あり) 宜しくお願いします。

  • Worksheet Worksheets オブジェ

    「Worksheetオブジェクト」と「Worksheetsオブジェクト」は何が違うのでしょうか? 使い方もいまいちわかりません。 この二つを使う時は、 Sub test1() Dim w As Worksheet For Each w In Worksheets Debug.Print w.Name Next End Sub とするときなのですが、 なぜ、変数の宣言をする時は、Worksheetを使い、 ワークシートの数を数える時は、Worksheetsを使うのでしょうか?

  • シートとワークシート

    突然Excel97 VBAを使うことになりました。技術書を読んでいると「シート(sheet(s)」と「ワークシート(worksheet(s)」と言う単語が使われています。 この両者の違いは何でしょうか?

  • excelのシートからVBAを除いて書き出し

    特定のExcelのシート(以後、出力シート)だけを予め指定したファイルへexcel形式で書き出したいです。 そのとき、出力シートにはボタンやボタンに関連付けされたVBAプログラムがあるのですが、それらのボタンやシートに関連付けされたVBAは書き出さずに、純粋に各セルに記載されている内容と罫線情報だけを書き出したいです。 出力シートにはVBAを残したくないのが理由ですが、上記のような書き出しをするにはどのようにすればよいのでしょうか。

  • EXCEL2007 VBA アクティブでないワークシートの名前を取得したい

    Sheet1とSheet2の【A1セル】【B1セル】には以下の処理が入っています。また2つのシートにはVBAを使って、再計算がされるたびに自身のシート名を表示するメッセージボックスを出力する処理を記述しています。 【A1セル】  リアルタイムで値が送られてくる。 【B1セル】  A1セルの値を使った式 【VBA】  Private Sub Worksheet_Calculate()   MsgBox **************  End Sub ここからが質問なんですが、Sheet3をアクティブシートにしている場合、VBAの「*****」の部分に何と記述すれば、再計算されたシート名を取得できますか?

  • ExcelシートをCSVファイルにする

    Excel2000を使用してます。 Excelブックに3つのシートがあります。 シート1はメインシートとして「ボタン1」「ボタン2」が存在してます シート2はインプットデータ用シート シート3はアウトプットデータ用シートです シート1の「ボタン1」を押すとVBAが実行されシート2の情報を読み、 シート3に算出結果を出力する仕組みです。 次にシート1の「ボタン2」を押すとシート3の内容をCSVに出力したいのですが、 下記のロッジクではうまくいきません。 どこを修正すればよいのでしょうか? Sub CSV出力() Dim ONAME As String Dim しーと As Worksheet Dim 新しーと As Worksheet Dim PAS As String 'OUTパス名 PAS = ThisWorkbook.Path ONAME = PAS & "\" & "出力.CSV" '出力しーと Sheets("出力").Select Set しーと = ActiveSheet Set 新しーと = Worksheets.Add With 新しーと しーと.Copy .Move End With With ActiveWorkbook .SaveAs Filename:=ONAME, FileFormat:=xlCSV .Close False End With End Sub

  • Word vbaからexcel vbaへ値を渡すことができますか?

    Word vbaからexcel vbaへ値を渡すことができますか? 現在Wordでvbaを組んでいますが、Wordで取得した値をexcel vbaで利用したいのに変数の値がnullになってしまい四苦八苦しています。Application間で値を渡すには何か特別な処理がいるのでしょうか?(参照は設定済みです) やりたい事は、Wordで「ShipTo」文字列をsearch→後ろの番号を変数へ格納→excel vbaを起動→シートの表中からWordで取得した番号を元に文字列を検索しセルに入れる(VLOOKUPを使用)→セルの文字列をWord vbaへ返しWord側で利用、という処理です。excel vbaの起動は以下のように記述しています。 ------------------excelVBAの起動 Sub getExcelTable() Dim xLobj As Object, myObj As Object Set xLobj = CreateObject("excel.application") xLobj.Visible = True Set myObj = xLobj: workbooks.Open (ThisDocument.Path & "\sample.xls") myObj.Run ("'sample.xls'!getStr") MsgBox strA ←これがでない MsgBox strB ←これがでない Set xLobj = Nothing End Sub -----------------excel vbaのコード Option Explicit Dim endRow As Integer, ShipTo As Variant Dim strA As Variant, strB As Variant Sub getStr() endRow = Range("a65536").End(xlUp).Row MsgBox ShipTo ←これがでない Cells(endRow + 2, 1).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",3,0)" strA = ActiveCell.Text Cells(endRow + 2, 2).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",13,0)" strB = ActiveCell.Text End Sub Word vbaからexcel vbaは起動します。Word側、excel側で使う関数はグローバル変数にし、variant型にしてみましたが値がわたりません(Wordでは取得できています)。Application間で値を渡す方法、もしくは根本的にもっとうまい方法があればご教示ください! WinXP、Office2003を使用です。

専門家に質問してみよう