[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/12/07(Tue) 20:14
投稿者名:てこな
Eメール:
URL :
タイトル:
EXCELの操作関連につきまして
お世話になります。

本サイトを参考にさせていただきましたが、
下記の点が解決できませんでした。
宜しければご指導の程よろしくお願い致します。

本サイトを参考に、
ボタン1でEXCELの起動と処理を行い、
ボタン2でボタン1で作成したEXCELに対して
別処理を行いたいと思いますが、
ためしに下記コードの場合以下のようなエラー☆印が出てしまい、
うまく操作できませんでした。

Private Sub Command2_Click()
Dim MaxRow As Long    '枠内取得
'縦に展開してある行数を取得
    MaxRow = Range("A65536").End(xlUp).Row ☆
    MsgBox (MaxRow)
End Sub

☆「Rangeメソッドは失敗しました Globalオブジェクト」

ボタン1でEXCELを起動する場合の宣言を追記してもうまくいかず、
困っています。宜しければご指摘をお願い致します。

以上

投稿時間:2004/12/07(Tue) 21:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: EXCELの操作関連につきまして
> 本サイトを参考にさせていただきましたが、
なら、VBからExcel及びWordを操作する時の注意事項 や Excel のタスクを正常に終了できない現象
をよく読んで下さい。
ちょっと下の No.1123 も貴方と同じ原因ですよ。

投稿時間:2004/12/07(Tue) 23:58
投稿者名:てこな
Eメール:
URL :
タイトル:
Re^2: EXCELの操作関連につきまして
早速のご指摘申し訳ありません。
本サイト内のご指摘をいただきましたあたり
「VBからExcel及びWordを操作する時の注意事項 や
Excel のタスクを正常に終了できない現象」を
私なりにですが精査し、以下のように修正し、
エラー自体は改善することができました。


(修正前)
Private Sub Command2_Click()
Dim MaxRow As Long    
    MaxRow = Range("A65536").End(xlUp).Row
    MsgBox (MaxRow)
End Sub

(修正後)
Private Sub Command8_Click()
    Dim xlApp   As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim MaxRow, MaxRow0 As Long    
    Set xlApp = Excel.Application
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)

  MsgBox (xlApp.ActiveSheet.Cells(6, 1).Value)
    MaxRow = xlApp.ActiveSheet.Range("A65536").End(xlUp).Row
    MaxRow0 = xlApp.ActiveSheet.Range("IV6").End(xlToLeft).Column
    MsgBox (MaxRow)
    MsgBox (MaxRow0)

しかし、すでに開いているEXCEL上のデータを
MsgBoxの結果より上手に拾うことができませんでした。
その辺りまだ十分理解できていないように思えます。

お忙しい中申し訳ございませんが、
宜しければご指摘をいただけると幸いです。

以上

投稿時間:2004/12/08(Wed) 09:49
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: EXCELの操作関連につきまして
>     Dim MaxRow, MaxRow0 As Long    

これだと、MaxRow0だけがLong型で、MaxRowはVariant型になります

>     Set xlApp = Excel.Application
>     Set xlBook = xlApp.Workbooks.Add
>     Set xlSheet = xlBook.Worksheets(1)

ここで、xlBookに新規に作成したブックを入れて、xlSheetにそのブックの
1番目のシートを入れていますが、これはどこにも使われていませんね。

>     MaxRow0 = xlApp.ActiveSheet.Range("IV6").End(xlToLeft).Column

ここで、最終列を求めているようですが、なぜ変数名が行を表わす名前なんでしょうか?(^^;

変数xlSheetを使うとすると、こんな感じでしょうか?

Dim xlApp   As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim MaxRow As Long    
Dim MaxCol As Long    

Set xlApp = Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

MsgBox xlSheet.Cells(6, 1).Value
MaxRow = xlSheet.Range("A65536").End(xlUp).Row
MaxCol = xlSheet.Range("IV6").End(xlToLeft).Column
MsgBox MaxRow
MsgBox MaxCol

投稿時間:2004/12/08(Wed) 12:13
投稿者名:てこな
Eメール:
URL :
タイトル:
Re^4: EXCELの操作関連につきまして
LESIAさまご指摘ありがとうございます。
ご指摘のあったソースによりエラーはないものの、
前に私が記述したソースと同じような結果になってしまいます。

下記ご指摘を見る限り、
新たに追加してしまったブック(シート)において、
セルの値を参照したり行数をチェックしたりしているように
結果からは見受けられます。(私のソースによる結果も同じようでした)

> Set xlApp = Excel.Application
> Set xlBook = xlApp.Workbooks.Add
> Set xlSheet = xlBook.Worksheets(1)
>
> ここで、xlBookに新規に作成したブックを入れて、xlSheetにそのブックの
> 1番目のシートを入れていますが、これはどこにも使われていませんね。

そこで、既に起動済みのEXCELのシート
(セルに値が格納されている)を参照するには
つまり
既に開いているブックに、そのブックの1番目のシートを参照するには
どのような宣言をしたら良いか
宜しければ教えてはいただけませんでしょうか

当方が乱筆でうまく考えをお伝えできているか不安ですが、
起動済みのEXCELについて処理をさせたいと思っております。

お忙しい中まことに申し訳ありませんが、
宜しければお手すきの際にでもご指導いただけると幸いです。

以上

投稿時間:2004/12/08(Wed) 12:51
投稿者名:Wendy
Eメール:
URL :
タイトル:
Re^5: EXCELの操作関連につきまして
こんにちは。
ちょっと失礼します。

>すでに開いているEXCEL上のデータを
現在、アプリケーションが、開いているときは、GetObject を使用します。

Private Sub Command1_Click()
  Dim xlApp As excel.Application
  Dim xlBook As excel.Workbook
  Dim xlSheet As excel.Worksheet
  Dim xlPath As String
  Dim MaxRow As Long, MaxColumn As Long
  On Error GoTo ErrHandler
  Set xlApp = GetObject(, "Excel.Application")
  Set xlSheet = xlApp.Sheets(1)
  With xlSheet
    MsgBox .Cells(6, 1).Value
    MaxRow = .Range("A65536").End(xlUp).Row
    MaxColumn = .Range("IV6").End(xlToLeft).Column
    MsgBox "A列の最大行は、 " & MaxRow & vbCr & _
        "6行目の最大列は、 " & MaxColumn
  End With
ErrHandler:
  If Err.Number > 0 Then
    MsgBox Err.Description, 64
  End If
  Set xlApp = Nothing
End Sub

投稿時間:2004/12/08(Wed) 13:03
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^6: EXCELの操作関連につきまして
>   Set xlApp = GetObject(, "Excel.Application")
>   Set xlSheet = xlApp.Sheets(1)

xlBookも使うなら
Set xlApp = GetObject(, "Excel.Application")
Set xlBook = xlApp.ActiveWorkbook
Set xlSheet = xlBook.Sheets(1)
ですね。

投稿時間:2004/12/08(Wed) 15:21
投稿者名:Wendy
Eメール:
URL :
タイトル:
Re^7: EXCELの操作関連につきまして
LESIA さん、サポートありがとうございます。

>xlBookも使うなら
>Set xlApp = GetObject(, "Excel.Application")
>Set xlBook = xlApp.ActiveWorkbook
>Set xlSheet = xlBook.Sheets(1)
>ですね。

こちらが正解ですね。だって、Excel ブックは1つとは限りませんからね。

それに、変数の
Dim xlPath As String
は、余計でした。
最初、明示的にパス名+ファイル名Excelブックを開くことを考えていたので、
そのままになってしまいました。

投稿時間:2004/12/08(Wed) 16:51
投稿者名:てこな
Eメール:
URL :
タイトル:
Re^8: EXCELの操作関連につきまして
LESIAさま、Wendyさま、
お忙しい中ご指摘ありがとうございます。
ご指摘の宣言文を用いて、
ようやく既存シート状のデータにアクセスすることができました。
お忙しい中お手数をおかけ致しまして申し訳ございませんでした。
とりあえず「解決」致しました。

どうもありがとうございました。
又何かございましたら、適宜ご指導の程
よろしくお願い致します。

ありがとうございました。