- ベストアンサー
ACCESSのVBで、エクセルファイルの最終行を取得
題名の通り ファイルの最終行を知りたいのです ざっと エクセルファイルをオープンするは下記のように すると思いますが その後、最終行を取得するのに、どうするのか 教えてください ーーーーーーーーー------------ Set Xls = GetObject("エクセルのファイル") Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("Sheet1").Activate
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Xls.Application.worksheets("Sheet1").Rows.Count を使用するのが一般的なようです。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。#2 のWendy02です。 >End(xlUp).Rowの、xlUp、が未定義のエラーがでてしまいます #4 さんで、説明されているとおりで、その理由は分かるのですが、こちらは、そのまま、Access VBAで、コードがとおっていましたね。一応、動作試験はしています。参照設定がされていたからかもしれません。 私のコードでは、解消方法は、Sub ....の下に、 Const xlUp As Integer = -4162 とすればよいだけです。 私の場合、基本的には、Access VBAで、Excelを使う場合は参照設定をしてしまいますね。何よりも、インテリセンスが使えますから、便利なのです。また、参照設定しないと、メモリの状態によっては、トラブルがあるときがあるからです。 Access は、参照設定の管理がExcelよりも優れていますから、そちらを使わない手はありません。 後は、imogasiさんの、原則論は、そのまま、おっしゃっている話のままです。(^^; こちらは、どうしても、Excel中心に動いていますので、Access に関するものは、今ひとつ反応が鈍くなってしまいます。この申し訳ないのですが、私は、Excel中心になっています。 Access が分からないわけではないのですが、やはり、書法が違うようですね。Access Club で確認してきましたが、MSのサポートで、同じようなコードを見つけてきましたから、たぶん、開発途上に、何かの事情があったのでしょう。不勉強で申し訳ないです。
お礼
説明ありがとうございました 感謝の気持ちでいっぱいです
- imogasi
- ベストアンサー率27% (4737/17069)
>End(xlUp).Rowの、xlUp、が未定義のエラーがでてしまいます 私もこれでエラーが出て何でだろうと思いました。 エクセルVBAで Sub test01() MsgBox xlUp End Sub をやるとー4192と出たので下記をやってみました。 下記はACCESSのモジュールに貼り付けて実行するものです。 Sub test04() Dim ExcelApp As Object 'Excel.Application Dim Book As Object 'Excel.Workbook Dim Sheet As Object 'Excel.Worksheet Set ExcelApp = CreateObject("Excel.Application") 'ExcelApp.Visible = True Set Book = ExcelApp.workbooks.Open("C:\Documents and Settings\XXX\My Documents\_社員1.xls") Set Sheet = Book.worksheets("_社員1") Sheet.Select ' MsgBox Sheet.Range("A2") Sheet.Range("A65536").Select f = Sheet.Range("A65536").End(-4162).Row MsgBox f Set Book = Nothing Set Sheet = Nothing End Sub エクセルの定数がうまく働かないようです。 この点の理屈のご説明は、他の方にお願いします。 ーーー 先般から質問者は、同じような質問をしてますが >ACCESSのVB ACCESSのVBAです この質問は、むしろEXCELのVBAの質問です。 EXCELのVBAの本でも読んで、エクセルの機能とVBAのその知識を増やしましょう。 一応Set ExcelApp = CreateObject("Excel.Application") でエクセルのVBAの世界が使えるようになったら、ExcelAppを冠してエクセルVBAの世界のコードが使えないかやってみる。 本件・上記のようにつまずくことがあれば、そこで色々考えたり、本やWEBを見たり、質問するでどうでしょう。
お礼
丁寧な説明ありがとうございました
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。Wendy02です。 この前から、拝見させていただいているのですが、それは、Access のVBAなのですね。 前回、VBとおっしゃっていたので、やむを得ず、私は、VB6 でコードを作りましたが、私の書いた質問には、訂正のないままに閉めてしまわれました。私自身も、知らないことがあって、それはそれなりに、勉強しているのですから、イチゲンではなかったら、あまり、ヘンな無視の仕方はしないでくださいね。こういうことを書いている自分自身、知らなかったことを言い訳しているようで、みっともないのですが、一応、私は、.Net を含め、Excel VBAだけではありませんので、言語やアプリケーションソフト、また、場合によっては、Versionの指定はしてくださいね。同じようでも、違うものがあるので、分からなくなるのです。 今調べましたら、Access VBAの独特の書き方があるようですね。MSサポートも調べてみて、確認しました。Formモジュールにいれるので、いたし方がない、というところかもしれません。 ちょっと不安になって、プロセスを調べてみましたが、終了しても、Excelのオブジェクトは残していないようです。ただ、私は、やはり、Access でも、オートメーション・サーバーを使用する場合は、本来は、Applicationオブジェクトを確保していたほうが、安全のような気がしますね。今回は、書きませんでしたが。 [XL2000]GetObjectで開かれたファイルに文字を入力すると強制終了 http://support.microsoft.com/kb/413900/ja トラブルは起きていないようですから、これは必要ないようです。 一応、変数は、分かりやすくするために、xlWb にさせていただきました。ただし、私は、見慣れていないせいか、親(Application)と子(Workbook)が逆になったような気がします。めったに、子から親を呼び出すコードは書きませんから。 Sub testExcel() Dim xlWb As Object Dim xlSh As Object Dim i As Long Const FNAME = "エクセルのファイル" Set xlWb = GetObject(FNAME) xlWb.Application.Windows(1).Visible = True xlWb.Application.Worksheets(1).Activate Set xlSh = xlWb.Worksheets("Sheet1") '最終行 確保 i = xlSh.Cells(xlSh.Rows.Count, 1).End(xlUp).Row '#.2 のmerlionXX さんの書き方も、Sheetオブジェクトがあるので、このコードなら変更できるはずです。 xlWb.Close False Set xlSh = Nothing : Set xlWb = Nothing MsgBox i End Sub
補足
毎回親切丁寧な回答をいただき、ありがとうございました 前回VBとだけ書いてあれば、VB6と解釈されるのは あたりまえで、こうした不注意が多大が迷惑をおかけしたことを お詫びします もしさしつかえなければ、という趣旨で補足質問させて いただくならば、実行してみると、 End(xlUp).Rowの、xlUp、が未定義のエラーがでてしまいます お時間があればで結構です よろしくお願いします
- merlionXX
- ベストアンサー率48% (1930/4007)
わたしはアクセスはまったく存じませんが、エクセルのVBAでシートの使用領域の最終行を求めるなら以下で可能です。 With ActiveSheet x = .UsedRange.Cells(.UsedRange.Count).Row End With
お礼
ありがとうございました 助かりました
お礼
早速の回答ありがとうございました オーバーフローしました、とでますが いずれ解決すると思います ありがとうございました 助かりました LastRow=Xls.Application.worksheets("Sheet1").Rows.Count
補足
先ほどオーバーフローがでると書きましたが 65536とでました これはシートが展開できる限界値を示している、とおもいます 知りたいのは実データの入ったラストの行です でも、この回答でありがとうございました 90%は解決できたので、ありがとうございました さらに、たずねる、ともりで書いたのでなく、 一応報告として、挙げました ありがとうございました