VBAでセル選択したい方法

このQ&Aのポイント
  • VBAでセルを選択する方法を教えてください。
  • Excel VBAを使用して自身のファイルを読み取り専用で開いているときに、特定のシートを選択する方法を教えてください。
  • VBAのコードxlApp.xlBook.Sheets("メイン").Selectでエラーが発生し、正しい文法をご教授いただきたいです。
回答を見る
  • ベストアンサー

シートを選択したい 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でエラーになります。 文法が間違ってると思うのですが、修正案をご教授ください。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

ixfzqyrdteさん こんにちは。 基本的なことですがブックやシートは「別々にアクティブ」にする必要があり、両方を一気に「アクティブ」にすることはできません。  「ブック」なら、xlBook.Activate  「シート」なら、Sheets("メイン").Select  です。 よってプログラム的には  xlApp.xlBook.Sheets("メイン").Select     ↓  xlBook.Activate  Sheets("メイン").Select となります。 ただ、ブックをオープンした段階で「xlBook」はアクティブになっていますので  xlBook.Activate  は省略可能です。 ご確認下さい。

ixfzqyrdte
質問者

お礼

ご回答ありがとうございます。

その他の回答 (3)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.4

私の環境ではxlAppを省くだけで動作しました。 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 xlBook.Sheets("メイン").Select '★ xlAppを省略 Set xlApp = Nothing Set xlBook = Nothing End Sub

ixfzqyrdte
質問者

お礼

ご回答ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

Private Sub cmd_読み取り専用にする_Click() thisworkbook.worksheets("メイン").select if thisworkbook.readonly then exit sub thisworkbook.save thisworkbook.changefileaccess mode:=xlreadonly end sub

ixfzqyrdte
質問者

お礼

ご回答ありがとうございます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

手元に試せる環境がないのですが > xlApp.xlBook.Sheets("メイン").Select の前に「Bookの選択」が必要かも。 開き直しているので、どのBookか見失ってる。

ixfzqyrdte
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • エクセルvba

    エクセルvbaなのですが Sub test() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) 'コード・・・ Set xlApp = Nothing Set xlBook = Nothing End Sub これだと Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) の部分で、エラーになります。 実行時エラー1004です。 自身ファイルをオブジェクトに格納して操作したいのですがどうすればいいでしょうか?

  • SETを使ったほうがよい?

    accwessからエクセルファイルを開きたいのですが、 App.Workbooks.Open と、 Set xlBook = xlApp.Workbooks.Open とどちらを使った方がいいのでしょうか? ////////////////////////////////////////////////////////// Private Sub ファイル1_Click() Dim App As Object Dim MyFileName As String MyFileName = "D:\My Documents\test.xls" Set App = CreateObject("Excel.Application") App.Workbooks.Open FileName:=MyFileName App.Visible = True End Sub でも Private Sub ファイル2_Click() Dim xlApp As Object Dim xlBook As Object Dim FileName As String Const FolderName = "D:\My Documents\test.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(FolderName & FileName) xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ////////////////////////////////////////////////////////// でも開けました。 多分、SETを使うかどうかの違いだと思うのですが VBAでコードを作る際、どちらのコードを使った方がいいか教えてください。

  • Excel.Applicationへのシートコピー

    Public xlApp As Excel.Application Public xlBook As Excel.Workbook Set xlApp = CreateObject("Excel.Application") '非表示・画面更新無・アラート非表示 xlApp.Visible = False xlApp.ScreenUpdating = False xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Add xlBook.SaveAs "test123.xls" '※ここでエラー Workbooks("TEST.xls").Sheets("TEST_1").Copy After:=xlApp.Workbooks(xlBook).Sheets(3) Set xlApp = Nothing Set xlBook = Nothing 環境:WindowXP SP2,Excel2003 SP3 以上のようにオブジェクト変数のEXCELに対してのシートコピーを行いたいのですが、コンパイルを行うとエラーがなく、実行すると「コンパイルエラー 修正候補:区切り記号 または(」とエラーが発生します。色々書き方を試してみたのですが、どれもうまくいきませんでした。 宜しくお願いします。

  • VBからエクセルを起動。そのあとエクセルを終了

    教えてください。 VBからエクセルを起動します。 そのあと、エクセルのシートの上にデータを貼り付けます。そして、エクセルを終了します。 しかし、エクセルが終了しません。 タスクバー上のエクセルをクリックすると終了します。 どうして、このような現象が起こるのかわかりません。 教えてください。 下記に同様のサンプルを書きました 誤記入があるかも知れませんが このような感じのプログラムです。 以上、よろしくお願いします。 public sub test Dim XApp as Excel.Application Dim nfilename as string Dim xlBook As Object Dim xlSheet As Object ' エクセルを起動 Set xlApp = New Excel.Application nfilename ="AAAA.xls" ' 指定されたファイルを開く Call xlApp.Workbooks.Open(nfilename) Set xlBook = xlApp.ActiveWorkbook Set xlSheet = xlBook.Worksheets(1) 'フォームを貼り付ける xlSheet.Range("a1").PasteSpecial      'ファイル名の作成 Filename="BBBB.xls" '保存 ChDir "C:\" xlBook.SaveAs Filename:=Filename,FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xlSheet = Nothing xlBook.Close True Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End sub

  • 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)の使用方法が違うのでしょうか?よろしくお願いします。

  • 「もし既にファイルを開いているなら、開かない」

    おはようございます。 accessからExcelのブックを開く処理をしています。 VBAでファイルを開く時に、「もし既にファイルを開いているなら、開かない」 という行為をしたいのですが、どのようにすればいいでしょうか? *************************************************************************** Sub サンプル() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\【Excel】\料理.xlsm") xlApp.Visible = True'ファイルを開く?表示する? Set xlApp = Nothing Set xlBook = Nothing End Sub *************************************************************************** このコードの、 xlApp.Visible = Trueを、 if xlBook がまだ開いてない then xlApp.Visible = True Else End If のような事がしたいのですが、可能でしょうか? ご教授よろしくお願いします。

  • Access-VBAでフィールドまたはレコード指定

    お世話になります。 Accessから、フィールドまたは、レコードを指定して、 Excelの指定したセルに出力することはできますか? Sub EX1() On Error Resume Next Dim db As DAO.Database Dim rs As DAO.Recordset Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set db = CurrentDb '出力元のテーブルまたはクエリ Set rs = db.OpenRecordset("EQ") Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) ' Excel のセルに値を代入 xlSheet.Cells(1, 1).CopyFromRecordset rs ' Worksheet を名前をつけて保存 xlSheet.SaveAs "D:\一時保存\abc.xls" xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub ' Excel のセルに値を代入 xlSheet.Cells(1, 1).CopyFromRecordset rs の部分でできそうなのですが。 クエリにある1つ目のレコード、またはフィールドを、Excelの(1,1)。 2つ目を、(3,1)。 3つ目を、(5,1)としたいのです。 よろしくお願いします。

  • VB2005でExcelのシートをコピー

    VB2005Expressで開発をしています。 Excelのシートをコピーして同じbookに追加をしたいと思っています。 下記でまずExcelを使用できるようにして  Dim xlApp As New Excel.Application  Dim xlBooks As Excel.Workbooks = xlApp.Workbooks  Dim xlBook As Excel.Workbook = xlBooks.Add '新規のファイルを開く  Dim xlSheets As Excel.Sheets = xlBook.Worksheets  Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)  xlApp.Visible = True 下記で追加できると思うのですが、()内にセットするパラメータが わかりません・・・  xlBook.Worksheets.Copy() どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • ACCESS2003のVBAで改修依頼管理ツールを作成しています。

    ACCESS2003のVBAで改修依頼管理ツールを作成しています。 そこで問題が発生してしまい行き詰っています。 問題は改修要望依頼が入ったテーブルを一覧表でEXCEL出力する際に、 2回目の出力を行うと「オブジェクト変数またはWithブロック変数が設定されていません。」 とエラー表示がされ、ここでデバックを使いなにも変更せず終了し、もう一回実行すると 今度は正常に出力されます。つまり正常出力した後にもう一回同じことをするとエラーが出るということです。 オブジェクトの開放もプロシージャの最後で行っているので環境は一回目の出力と変わらないはずなんですが、原因がわかりません。 常に「ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧"」の箇所でとまるので EXCELアプリケーションの参照が曖昧になっているのでしょうか? 下記はコード一部です。どこに問題があるでしょうか? 参照設定は編集済みです。 '【定数設定】 Const QName As String = "Q_改修依頼内容" '【変数設定】 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object Dim i As Long Dim strMDBPATH As String 'MDBの保存場所、フォルダー・ディレクトリ Dim strXLSFILE As String 'テンプレートファイルの名前、e:\xxx\yyyy\テンプレート.xls Dim strSaveFile As String Dim ans As Long Dim strMsg As String Dim endCol As String '変数にエクセルアプリケーションをセットして開く Set xlApp = CreateObject("Excel.Application") ' Set xlBook = xlApp.Workbooks.Open(strXLSFILE) ' Set xlSheet = xlBook.Worksheets("Sheet1") ' xlApp.Visible = True With xlApp .Workbooks.Add .Visible = True End With   ActiveWorkbook.Sheets("Sheet1").Name = "改修依頼一覧" 'エラー発生箇所 Set cn = CurrentProject.Connection rs.Open QName, cn, adOpenKeyset, adLockReadOnly ActiveWorkbook.Sheets("改修依頼一覧").Range("A2").CopyFromRecordset rs 'A1セルを選択 Worksheets("改修依頼一覧").Cells(1, 1).Select 'ファイル名を設定 strSaveFile = "改修依頼内容一覧_" & Format(Now, "yyyymmdd_hhmmss") & ".xls" '名前を変更して保存 ActiveWorkbook.SaveAs FileName:=strMDBPATH & strSaveFile 'データ一覧画面に戻る DoCmd.SelectObject acForm, "データ一覧画面" 'オブジェクトの開放 Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing Set rs = Nothing Set cn = Nothing Exit Sub 以上です。 編集モジュールなどはエラーに関係ないと思われるステートメントは省略させていただきました。 どなたかご存知の方がいればアドバイスお願いします。

  • Workbooks.Open VBA

    Dim xlApp As Object Dim xlWbk As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlWbk = xlApp.Workbooks.Open("C:\Users\test.xlsx") の後に、 xlWbk.Sheets("1").Select とするのと、 xlApp.Sheets("1").Select とするのでは、 同じ意味ですか? どちらも C:\Users\test.xlsx の シートを選択することになりますか?

専門家に質問してみよう