[リストへもどる]
一括表示

投稿時間:2003/01/25(Sat) 00:42
投稿者名:上総ノ助
URL :
タイトル:
任意に選択したセルに出力
お手数ですが教えてもらいたいことがあります。
VBで他のアプリケーションから取得した値をExcelの
任意(VB側で指定しない)セルに出力したいのです。

このホームページを参考にしてコードを書きましたが
うまくいきません。

Private Sub Command1_Click()
    ' Excel の Application、Workbook および Worksheet オブジェクトに対
   ' するオブジェクト変数を宣言します。
   Dim xlApp As Excel.Application
   Dim xlBook As Excel.Workbook
   Dim xlSheet As Excel.Worksheet
   Dim R, C As Integer

   ' 変数にオブジェクトの参照を代入します。Add メソッドを使って
   ' 新規 Workbook と Worksheet オブジェクトを作成します。
   Set xlApp = New Excel.Application
   Set xlBook = xlApp.Workbooks.Add
   Set xlSheet = xlBook.Worksheets.Add
   R = xlApp.ActiveCell.Row
   C = xlApp.ActiveCell.Columns
   lbl1.Caption = R + C
   xlApp.Visible = True

    ' Excel のセルに値を代入します。
    xlSheet.Cells(R, C).Value = "12"  '制作中のために簡単な値
    
End Sub

という具合です。
まず、実行すると'実行時エラー1004'
アプリケーション定義またはオブジェクト定義エラーです。となります。
また、BOOK1を開いていたのにBOOK3のSheet4のA1がアクティブになっている??
これはエラーが起きるたびにBOOKが開くという現象ですか?

ちなみに xlSheet.Cells(R, C).Value = "12"のR、Cに整数値を入れると
そのセルに12がはいります。  
よろしくお願いします。

投稿時間:2003/01/25(Sat) 02:02
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 任意に選択したセルに出力
どこが違うかは自分で比較して下さい。

Private Sub Command1_Click()
    ' Excel の Application、Workbook および Worksheet オブジェクトに対
    ' するオブジェクト変数を宣言します。
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim R As Integer, C As Integer
    
    ' 変数にオブジェクトの参照を代入します。Add メソッドを使って
    ' 新規 Workbook と Worksheet オブジェクトを作成します。
    Set xlApp = New Excel.Application
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    R = xlApp.ActiveCell.Row
    C = xlApp.ActiveCell.Column
    
    Label1.Caption = R & "  " & C
    xlApp.Visible = True
    
    ' Excel のセルに値を代入します。
    xlSheet.Cells(R, C).Value = "12"    '制作中のために簡単な値
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub

投稿時間:2003/01/26(Sun) 00:05
投稿者名:上総ノ助
URL :
タイトル:
Re^2: 任意に選択したセルに出力
花ちゃん さん ご返事、ありがとうございます。
ラベルコントロールのキャプションへとアドレスを表示させるためのコード自体が
まるで違います。
最後の方でオブジェクトを解放するということをやっていませんでした。

おかげさまでラベルに" 1  1"とエクセルに"12"を表示することはできましたが、
それはこちらが任意に選択したセルではなく新しいBook2のA1左上です。

ではエクセルを開かずに実行すると立ち上がり左上に"12"が表示されます。
ラベルは" 1  1"です。

そこでエクセルのBook1、Sheet2、B3セルを選択アクティブにして
F8で1行ずつ実行して変数の値を見てみました。

>     Set xlApp = New Excel.Application
 Set xlApp = Nothing→"Excel.Application"
  Excel.Application = <オブジェクト変数またはwhith変数が設定されていません。>→変わりません

>     Set xlBook = xlApp.Workbooks.Add
  Set xlBook = Nothing→表示されません

>     Set xlSheet = xlBook.Worksheets(1)
  Set xlSheet = Nothing→表示されません

>     R = xlApp.ActiveCell.Row
  xlApp.ActiveCell.Row = 1→xlApp.ActiveCell.Row = 1
 R = 0→R = 1

>     C = xlApp.ActiveCell.Column
  xlApp.ActiveCell.Column= 1→xlApp.ActiveCell.Column = 1
 C = 0→C = 1
ここのR , Cの値はエクセルが開いていなくても0から実行して1になります。
>    
>     Label1.Caption = R & "  " & C
  C,Rとも実行前、後とも1

>     xlApp.Visible = True
  xlApp.Visible  = false→True   truet→rue
>    
>     ' Excel のセルに値を代入します。
>     xlSheet.Cells(R, C).Value = "12"    '制作中のために簡単な値
  R , Cとも実行前、後とも1

Set xlApp = New Excel.Applicationの値が<オブジェクト変数が設定されていません。
とR = xlApp.ActiveCell.RowとC = xlApp.ActiveCell.Column
の取得情報がどこのセルを選択しても、またエクセルが立ち上がっていなくても「 1 」
というのが原因?

自動で新たなBookを開くからでしょうか?

投稿時間:2003/01/26(Sun) 01:00
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 任意に選択したセルに出力
今回のサンプルではそのような操作はできません。
事前にVBから必要なExcelのファイルを開いておき、ユーザがセル位置を指定したあと
そのセルにデータを送る部分のプログラムを動かさないと出来ません。

    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
この辺のコードがどのように動作しているとか理解した上でないと応用動作は難しいかと
思います。
又、操作を誤るとExcel解放されなくなり、誤動作したり、OSが動かなくなる場合もあります。
まず、ここのHPのExcel&Word関係の Excelの操作関係を一通り見て頂いた方がいいかと
思います。

投稿時間:2003/01/27(Mon) 12:46
投稿者名:上総ノ助
URL :
タイトル:
Re^4: 任意に選択したセルに出力
花ちゃんさん ありがとうございます。
第一段階「 任意に選択したセルに出力」は解決致しました。

ご指導の通りここのHPのExcel&Word関係の Excelの操作関係を一通り見て
実際に試したり、ヘルプなどもよく読んでみました。

VBからExcel及びWordを操作する時の注意事項にあります、5.「下記のように
省略系や間違った使い方をするとの」項の上から3番目の記述
(以下私の失敗例)
  誤り ActiveCell            正解 xlApp.ActiveCell
とヘルプの
Set X = GetObject(, "MySrvr.Application") X は既存の Application オブジェクトを参照します。
を参考にして
 xlApp.ActiveCell.Value = A
    xlApp.Visible = True
としました。
ありがとうございました。