EXCEL VBA Applicationインスタンス内での範囲指定エラー

このQ&Aのポイント
  • EXCEL VBA内で新規ExcelApplicationインスタンス内で値を代入し、線を引く範囲指定部分でアプリケーション定義またはオブジェクト定義のエラーが発生します。
  • 範囲指定を行う部分の記述方法に問題がある可能性があります。
  • 新規ExcelApplicationインスタンス内でのRange(Cells)の使用方法に注意が必要です。
回答を見る
  • ベストアンサー

EXCEL VBA Applicationインスタンス内での範囲指定

Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Private Const SCol = 1 Private Const SRow = 1 Private Const ECol = 1 Private Const ERow = 1 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlBook.Sheets("Sheet1").Range("A1") = 1 xlBook.Sheets("Sheet1").Range(Cells(SCol,SRow), Cells(ECol, ERow)).Borders.LineStyle = True xlBook.SaveAs "c:\ss.xls" xlBook.Close xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing 以上のようにEXCEL VBA内で新規ExcelApplicationインスタンス内で値を代入し、線を引いているのですが線を引く範囲指定部分でアプリケーション定義またはオブジェクト定義のエラーですと表示されます。 xlBook.Sheets("Sheet1").Range("A1:B2").Borders.LineStyle = True ↑のような形であればエラーは出ません。 xlBook.Sheets("Sheet1").Range(Cells(1,1),Cells(2,2)).Borders.LineStyle = True ↑ではエラーが出ます。 新規ExcelApplicationインスタンス内でのRange(Cells)の使用方法が違うのでしょうか?よろしくお願いします。

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

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

下記ではいかがでしょうか? With xlBook.Sheets("Sheet1") .Range("A1") = 1 .Range(.Cells(SCol, SRow), .Cells(ECol, ERow)).Borders.LineStyle = True End With

forgedcode
質問者

お礼

hana-hana3 様 素早いご回答ありがとうございます。 Cellsと略してしまうとActiveSheets扱いになってしまうので、Rangeと指定しているSheetと違うSheetなのでこういったエラーが発生するのですね。基本的なことを忘れていました。

関連するQ&A

  • シートを選択したい vba

    自身のファイルを読み取り専用で新たに立ち上げて、シートを選択したいのですが Private Sub cmd_読み取り専用で開く_Click() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) xlApp.Visible = True xlApp.xlBook.Sheets("メイン").Select Set xlApp = Nothing Set xlBook = Nothing End Sub だと xlApp.xlBook.Sheets("メイン").Selectでエラーになります。 文法が間違ってると思うのですが、修正案をご教授ください。

  • エクセルVBA 条件判断(斜線)

    エクセル VBAにて If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous Else wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Value = MasterData(masteridx, 14) wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Font.Bold = True wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Font.Size = 22 End If 以上のようにマスタシート対象品の選択セルが斜線だったら 生産日報シート対象品の選択セルに斜線を記入するようにしたいのですが、If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous の書き込み方(マスタシートの斜線判断)がわかりません。 どのように書き込むのでしょうか?

  • エクセル VBAでセルの値のデータ数でグラフ化

    いつもお世話になっております。 この質問は過去にご回答いただいた下記のコードの追加のお願いですのでご了承願います。 下記のコードは指定の列の最下行から指定数のデータ数でグラフを作成するVBAを教えてもらったのですが、今回指定のセル(関数でデータ数をカウント)の値(添付図のB1の値)でグラフを作成したいのです。 グラフは「同じシートの上」の既存グラフの更新(現行のコードのまま)が良いです。 単に下記を同じ名前(両方を入力表)にしてもダメだった記憶有り? Const ShNameGD = "入力表" 'データ格納シート名 Const ShNameGr = "成績表" 'グラフ描写シート名 現状はデータを下記のコード中で指定した数でグラフ化しているのですが、データ数が15程度から50個以上のケースで使用したく規定数では無くデータ数に応じたグラグにしたく。 '//------------------------'データ列1列 Sub GraphSauceChange8_1() Sheets("成績表").Select ActiveSheet.Unprotect Const MaxRows = 30 'データ範囲に指定する最大行数 Const ColNum1 = 6 '1つ目データ格納列 Const SRowNum = 17 'データ開始行番号 Const KoumokuRow = 5 '項目名格納行番号 Const ShNameGD = "入力表" 'データ格納シート名 Const ShNameGr = "成績表" 'グラフ描写シート名 Const XCol = 3 '横(項目)軸ラベル列番号(下2行と一緒に削除可) Dim GSh As Worksheet Dim DSh As Worksheet Dim SRow As Long 'グラフ用データ開始行 Dim ERow As Long 'グラフ用データ終了行 Dim tgRange1 As Range 'データ群1つ目範囲 Set GSh = ThisWorkbook.Sheets(ShNameGr) Set DSh = ThisWorkbook.Sheets(ShNameGD) ERow = DSh.Cells(DSh.Rows.Count, 1).End(xlUp).Row If ERow < MaxRows + SRowNum Then SRow = SRowNum Else SRow = ERow - MaxRows + 1 End If Set tgRange1 = _ Range(DSh.Cells(SRow, ColNum1), DSh.Cells(ERow, ColNum1)) GSh.ChartObjects(1).Chart.SetSourceData Source:=tgRange1 'セット GSh.ChartObjects(1).Chart.SeriesCollection(1).Name = _ DSh.Cells(KoumokuRow, ColNum1).Value GSh.ChartObjects(1).Chart.FullSeriesCollection(1).XValues = _ Range(DSh.Cells(SRow, XCol), DSh.Cells(ERow, XCol)) '(削除可) End Sub

  • VBのテキストボックスの内容をExcelのセルに書き加える

    VBを実行し、フォームのテキストボックスに入力された文字列を あらかじめ読み込んでおいた既存のExcelシートのセルに 書き足したいです。 そのExcelシートのセルにはすでに「001」などの数字が 入っているのですが、その数字の前に「AB01」などの文字列を付け加えたいのです。 自分なりに作ってみましたがうまくいきません。 とりあえずソースを載せます。 わかる方いらっしゃいましたらよろしくお願いします。 Private Sub Command1_Click() Set xlApp = CreateObject("Excel.Application") xlFileName = strFileName Set xlBook = xlApp.Workbooks.Open(xlFileName) Set xlNameSheet = xlBook.Sheets.Item(1) cnt = 0 i = xlNameSheet.Range("A1").CurrentRegion.Rows.Count For i = 1 To 65 shusseki = xlNameSheet.Cells(i, 5).Value If IsNumeric(shusseki) Then cnt = cnt + 1 For j = 1 To 5 xlNewSheet.Cells(cnt, j).Value = xlNameSheet.Cells(i, j).Value xlNewSheet.Cells(cnt, 1).Value = Form10.Text1 Next j End If Next i xlApp.Visible = True Set xlNameSheet = Nothing Set xlNewSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub

  • VB2005で、Excel 2010に罫線を描く。

    VB2005で、Excel 2010に罫線を描く。 ※ VB2005で技術計算をし、[Excel 2010] に資料を作成しています。 ※ [Windows XP]+[Excel 2005] では正常に作動するコードを    [Windows 7]+[Excel 2010] 上のVB2005に移植すると、罫線の    描画部分でエラー表示が出ます。 ※ [Excel 2010] の Open コードは下記です。 ※ ファイルを開くコード    Me.Hide() xlApp = CreateObject("Excel.Application") xlBook = xlApp.workbooks.add xlSheet = xlBook.sheets("sheet1") xlBook.application.Visible = True Me.Show() MsgBox("Excelファイルは開きましたか", 0, "確認") Excel転記ToolStripMenuItem.Enabled = True     教えて下さい。 {質問追記}   ※各セルへのテキスト記入、セル幅・高さ・フォント変更等は出来ます。 ※ 何かの認識コードが不足しているのでしょうか。罫線だけが引けません       With xlApp.Workbooks(1).Worksheets("Sheet1") '--------------------------------------------------------------- .xlRange(.Cells(i1, j1), .Cells(i2, j2)).Borders.LineStyle = xlApp.XlLineStyle.xlContinuous '-------------------------------------------------------------------------- End With    ※エラー内容1(上コードに対し)       「公開メンバ 'xlRange' は型 'Worksheet' に見つかりませんでした。」   ※エラー内容2 Excelのマクロを引用して、コードを書くと、デバックでエラーになります。 Selection.Borders(xlDiagonalDown).LinStyle = xlNone は      名前 "Selection"は宣言されていません。      名前 "xlDiagonalDown"は宣言されていません。      名前 "xlNone"は宣言されていません。

  • VBA罫線

    VBA罫線 a = 9 With Range(Cells(3, 2), Cells(a, 5)) .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With どこのワークシートかを指定する場合はどうしたらいいのでしょうか?

  • グラフに横棒を引きたい(再質問)

    いつもお世話になっております。 約半年前の質問の再質問です。 17行目以降にデータの入った表の2行目に数値(a)を入れるとその列の最下行からa個のデータ数でグラフ化される。 同時に同じ列の11行目、12行目の値で2本の横棒をグラフに描きたい。 上記の質問に対し、半年前にここで下記のVBAをさんざん教わったのですが、どうしてもうまく行かず一旦Pendingとしたのですが、あと少しの気がしてもったいなく、今回改めて前回の質問で示されたご回答(下図)と全く同じ3枚のシートを作ってみて試してみたのですが当方の不具合を再現したので改めて質問させていただきます。 下記VBAの不具合内容 グラフ確認シート(補助シート)には「行見出し」と指定した列の指定数のデータが正しくコピーされますが、C列、D列(プラス3σとマイナス3σ)は空白のままになってしまいます。(当方の実シートの再現) エディタで「F8」を押すと1つずつコードが実行されると知り実行してみるとやはり下記のプラス3σ(11行目)のコピーでエラーになります。 >'プラス3σ複写' >Range(KSh.Cells(2, 3), KSh.Cells(ERow - SRow + 2, 3)).Value = _  > DSh.Cells(LineDataRow1, ColNum1).Value 下記の図で期待通りに動くとのコメントでしたがやはり何か抜けているように思われます。 Sub test3()  Const SRowNum = 17 'データ開始行番号  Const KoumokuRow = 5 '項目名格納行番号  Const ShNameGD = "入力表" 'データ格納シート名  Const ShNameGr = "グラフ" 'グラフ描写シート名  Const ShNameGK = "グラフ確認用"  Const XCol = 3 '横(項目)軸ラベル列番号  Const LineDataRow1 = 11 'プラス3σ行位置  Const LineDataRow2 = 12 'マイナス3σ行位置  Const KeyRow = 2 '採用データ数格納行番号  Dim GSh As Worksheet  Dim DSh As Worksheet  Dim KSh As Worksheet  Dim SRow As Long 'グラフ用データ開始行  Dim ERow As Long 'グラフ用データ終了行  Dim tgRange1 As Range 'データ群範囲  Dim MaxRows As Long 'データ範囲に指定する最大行数  Dim ColNum1 As Long '1つ目データ格納列  Set GSh = ThisWorkbook.Sheets(ShNameGr)  Set DSh = ThisWorkbook.Sheets(ShNameGD)  Set KSh = ThisWorkbook.Sheets(ShNameGK)  GSh.Select  GSh.Unprotect  MaxRows = DSh.Cells(KeyRow, Columns.Count).End(xlToLeft).Value  ColNum1 = DSh.Cells(KeyRow, Columns.Count).End(xlToLeft).Column  ERow = DSh.Cells(DSh.Rows.Count, ColNum1).End(xlUp).Row  '<==ここ  If ERow < MaxRows + SRowNum Then   SRow = SRowNum  Else   SRow = ERow - MaxRows + 1  End If  KSh.Cells.ClearContents  KSh.Cells(1, 1).Value = "行見出し"  KSh.Cells(1, 2).Value = "データ"  KSh.Cells(1, 3).Value = "プラス3σ"  KSh.Cells(1, 4).Value = "マイナス3σ"  '横見出し複写  Range(DSh.Cells(SRow, XCol), DSh.Cells(ERow, XCol)).Copy _   KSh.Cells(2, 1)  'データ複写'  Range(DSh.Cells(SRow, ColNum1), DSh.Cells(ERow, ColNum1)).Copy _   KSh.Cells(2, 2)  'プラス3σ複写'   Range(KSh.Cells(2, 3), KSh.Cells(ERow - SRow + 2, 3)).Value = _    DSh.Cells(LineDataRow1, ColNum1).Value  'マイナスσ複写'   Range(KSh.Cells(2, 4), KSh.Cells(ERow - SRow + 2, 4)).Value = _    DSh.Cells(LineDataRow2, ColNum1).Value   Set tgRange1 = _    Range(KSh.Cells(2, 1), KSh.Cells(ERow - SRow + 2, 4))     With GSh.ChartObjects(1).Chart    '<==ここから末まで修正    .SetSourceData Source:=tgRange1 'セット    .HasTitle = True    .ChartTitle.Text = DSh.Cells(KoumokuRow, ColNum1).Value   End With End Sub

  • エクセルで2つの項目を下から規定数のデータでグラフ

    お世話になります。 かなり以前にここで表の2つの項目(データ列)の下から任意の数のデータでグラフを作るマクロを手取り足取り教えてもらい非常に有効に展開しております。 今回は1つのBookの複数のシートに同じ書式の表を作って、各シート上でデータが入力されると列の下から任意の個数(30-50個)で自動でグラフが更新(マクロボタンクリックでもOK)されるようにしたいのです。 マクロはアクティブシートを対象に動くように出来れば1つのコードで各シートのボタンクリックでグラフが更新されるようにできるのではと期待しています。 このような複数のシートで別のシートの表を対象に動くマクロで想定される不具合に関しては全く知見無し。 ・シートは15枚程度で今後増える可能性あり。 ・グラフ対象の列はコードに合わせ込み可能なのでE列とG列等に割り当てて作表可能。(指定できれば尚ありがたい) ・列のデータは式が入っているケースもありますが、数字データの下 から規定数のデータでグラフ化。 ・空白セルは無い ちなみに現在使用しているコードは下記の物です。 '//------------------------'データ列2列 Sub GraphSauceChange8_2() Sheets("成績表").Select ⇒ ここをアクティブシートにしたい ActiveSheet.Unprotect Const MaxRows = 30 'データ範囲に指定する最大行数 Const ColNum1 = 5 '1つ目データ格納列 Const ColNum2 = 7 '2つ目データ格納列 Const SRowNum = 17 'データ開始行番号 Const KoumokuRow = 5 '項目名格納行番号 Const ShNameGD = "入力表" 'データ格納シート名 Const ShNameGr = "成績表" 'グラフ描写シート名 ⇒ 入力表と同じシート=アクティブシートです Dim GSh As Worksheet Dim DSh As Worksheet Dim SRow As Long 'グラフ用データ開始行 Dim ERow As Long 'グラフ用データ終了行 Dim tgRange1 As Range 'データ群1つ目範囲 Dim tgRange2 As Range 'データ群2つ目範囲 Dim tgRangeA As Range '上記合計範囲 Set GSh = ThisWorkbook.Sheets(ShNameGr) Set DSh = ThisWorkbook.Sheets(ShNameGD) ERow = DSh.Cells(DSh.Rows.Count, 1).End(xlUp).Row If ERow < MaxRows + SRowNum Then SRow = SRowNum Else SRow = ERow - MaxRows + 1 End If Set tgRange1 = _ Range(DSh.Cells(SRow, ColNum1), DSh.Cells(ERow, ColNum1)) Set tgRange2 = _ Range(DSh.Cells(SRow, ColNum2), DSh.Cells(ERow, ColNum2)) Set tgRangeA = Union(tgRange1, tgRange2) '結合 GSh.ChartObjects(1).Chart.SetSourceData Source:=tgRangeA 'セット GSh.ChartObjects(1).Chart.SeriesCollection(1).Name = _ DSh.Cells(KoumokuRow, ColNum1).Value GSh.ChartObjects(1).Chart.SeriesCollection(2).Name = _ DSh.Cells(KoumokuRow, ColNum2).Value

  • エクセルVBA VLOOKUPについて

    エクセル VBA初心者です。 関数でのVLOOKUPをVBAで作りたいのですが、上手くいきません。 あらかじめ、Sheet2の1から300行までに A列  / B列 商品名 / 商品コード が入力されています。(名前の定義=商品コード) Sheet1にユーザーフォームを利用して、データを書き込んだ後、 B列に商品名が書き込まれると、 A列に商品コードが表示されるようにしたいと考えています。 A列に =IF(B2="","",VLOOKUP(B2,商品コード,2,FALSE)) と入力していたのですが、 VBAでIfを使って出来ないかと考えてみたのですが、 上手くいきませんでした。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sRow As Long Dim sColumn As Long sRow = ActiveCell.Row sColumn = ActiveCell.Column If Cells(sRow, 2).Value = True Then Cells(sRow, 1).Value = WorksheetFunction.VLookup(Cells(sRow2).Value, Worksheets("Sheet2").Range("A1:B300"), 2, False) ElseIf Cells(sRow, 2).Value = " " Then Cells(sRow, 1).Value = " " End If End Sub ご教授いただけないでしょうか? エクセル2003 WindowsXP

  • Excelがインストールされてない環境でのExcelインスタンス作成

    Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False xlApp.ScreenUpdating = False xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Add Set xlClone = xlApp.Workbooks.Open("C:\TEMPLATE.xls") xlClone.Worksheets("Sheet1").Copy After:=xlBook.Sheets(1) 以上のようにVB上からExcelインスタンスを作成し xlBookにxlCloneのシートをコピーしています。 作成した.exeをExcelがインストールされている環境では動作するのですがExcelがない環境ではエラーになってしまします。 ライブラリをおくなど、Officeをインストールしないで済む方法はありますでしょうか?VBにはExcel Object Liblalyが参照設定されてます。 Excelあり環境 Visual Basic6 SP6 WindowsXP SP2 Office2003 SP4 Excelなし環境 Windows Server2003 SP2