プロが教えるわが家の防犯対策術!

題名の通り
ファイルの最終行を知りたいのです
ざっと
エクセルファイルをオープンするは下記のように
すると思いますが
その後、最終行を取得するのに、どうするのか
教えてください
ーーーーーーーーー------------
Set Xls = GetObject("エクセルのファイル")
Xls.Application.Windows(1).Visible = True
Xls.Application.worksheets("Sheet1").Activate

A 回答 (5件)

Xls.Application.worksheets("Sheet1").Rows.Count



を使用するのが一般的なようです。

この回答への補足

先ほどオーバーフローがでると書きましたが
65536とでました
これはシートが展開できる限界値を示している、とおもいます
知りたいのは実データの入ったラストの行です
でも、この回答でありがとうございました
90%は解決できたので、ありがとうございました
さらに、たずねる、ともりで書いたのでなく、
一応報告として、挙げました
ありがとうございました

補足日時:2007/02/23 11:13
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました
オーバーフローしました、とでますが
いずれ解決すると思います
ありがとうございました
助かりました
LastRow=Xls.Application.worksheets("Sheet1").Rows.Count

お礼日時:2007/02/23 10:53

こんばんは。

#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のサポートで、同じようなコードを見つけてきましたから、たぶん、開発途上に、何かの事情があったのでしょう。不勉強で申し訳ないです。
    • good
    • 0
この回答へのお礼

説明ありがとうございました
感謝の気持ちでいっぱいです

お礼日時:2007/02/26 13:13

>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を見たり、質問するでどうでしょう。
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございました

お礼日時:2007/02/26 13:12

こんにちは。

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、が未定義のエラーがでてしまいます
お時間があればで結構です
よろしくお願いします

補足日時:2007/02/23 14:59
    • good
    • 0

わたしはアクセスはまったく存じませんが、エクセルのVBAでシートの使用領域の最終行を求めるなら以下で可能です。



With ActiveSheet
x = .UsedRange.Cells(.UsedRange.Count).Row
End With
    • good
    • 1
この回答へのお礼

ありがとうございました
助かりました

お礼日時:2007/02/23 13:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A