tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelとの連携
記事No11136
投稿日: 2008/01/14(Mon) 18:19
投稿者たー
Excelの
A1のデータをテキストボックスの1に表示
A2のデータをテキストボックスの2に表示
そして次にのコマンドボタンを押したら
B1のデータをテキストボックスの1に表示
B2のデータをテキストボックスの2に表示
というものを作成したいと考えています。
どうかご教授お願いいたします。

[ツリー表示へ]
タイトルRe: Excelとの連携
記事No11137
投稿日: 2008/01/14(Mon) 20:09
投稿者花ちゃん
質問される前にここのサンプルや過去のログをご覧下さい。

[ツリー表示へ]
タイトルRe^2: Excelとの連携
記事No11184
投稿日: 2008/01/19(Sat) 00:54
投稿者たー
> 質問される前にここのサンプルや過去のログをご覧下さい。

返信ありがとうございます。
おかげさまで既存のエクセルを開き、
データをそれぞれのテキストボックスに読み取ることができました。
しかし「次に」のボタンを押した時のプログラムがまだうまくいきません。

[ツリー表示へ]
タイトルRe^3: Excelとの連携
記事No11185
投稿日: 2008/01/19(Sat) 02:24
投稿者花ちゃん
> しかし「次に」のボタンを押した時のプログラムがまだうまくいきません。

A1  の部分を  B1  に書き換えるだけでいいのでは。

Text1.Text = xlSheet.Cells(1, 1).Value →  Text1.Text = xlSheet.Cells(1, 2).Value

列番号を変数にして、クリックする毎に  I=I+1 のようにすれば。

[ツリー表示へ]
タイトルRe^4: Excelとの連携
記事No11194
投稿日: 2008/01/21(Mon) 15:58
投稿者たー
> > しかし「次に」のボタンを押した時のプログラムがまだうまくいきません。
>
> A1  の部分を  B1  に書き換えるだけでいいのでは。
>
> Text1.Text = xlSheet.Cells(1, 1).Value →  Text1.Text = xlSheet.Cells(1, 2).Value
>
> 列番号を変数にして、クリックする毎に  I=I+1 のようにすれば。

私もそこの考えにたどり着いてるのですが

クリックする毎にI = I + 1
の動作をどうしていいか解からないのです・・・

プログラム初心者なので勉強しながら模索中です(^^;

[ツリー表示へ]
タイトルRe^4: Excelとの連携
記事No11210
投稿日: 2008/01/22(Tue) 19:06
投稿者たー
お疲れ様です。
勉強しながら花チャンさんのHPに記載されてる
イベント処理関係のコマンドボタンをダブルクリックで
何とかプログラムができるんじゃないかと思い組んでみたんですがうまくきません。
一番目の情報と2番目の情報を読み取ってくれるのですが
それ以降が読み取ってくれません・・・。
原因は花ちゃんさんが指摘してくれた通りの
クリックする毎に  I=I+1
がうまく行ってないことだと考えます。
どうかご教授お願いします!

ソースは以下の通りです。

Private Sub Command1_Click()

Dim xlApp   As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("test.xls")
Set xlSheet = xlBook.Worksheets(1)
Dim xlCells As Excel.Range
Set xlCells = xlSheet.Cells
  
'--------------- エクセルの表をVBへ読み込み -------------------

Dim i As String
Dim sngSt As Single

i = 3
    Text1.Text = xlCells(i, 2).Value
    Text2.Text = xlCells(i, 3).Value
    Text3.Text = xlCells(i, 4).Value
    Text4.Text = xlCells(i, 5).Value

nClick = nClick + 1
    'マウスのダブルクリックの間隔を考慮(0.18〜0.9)
sngSt = Timer + GetDoubleClickTime / 1000
If sngSt >= 86400 Then
    sngSt = sngSt - 86400
End If
    '場合によっては待機時間を調整して下さい。
    'APIを使用しないなら0.18〜0.9秒の範囲で待機して下さい。
Do While Timer < sngSt
    DoEvents
Loop
        
If nClick = 2 Then

i = i + 1
    Text1.Text = xlCells(i, 2).Value
    Text2.Text = xlCells(i, 3).Value
    Text3.Text = xlCells(i, 4).Value
    Text4.Text = xlCells(i, 5).Value

End If

nClick = 0
'==================================================================
'終了処理
   Set xlCells = Nothing
   Set xlSheet = Nothing
   xlBook.Close            'Book を閉じる
   Set xlBook = Nothing
   xlApp.Quit
   Set xlApp = Nothing  
    
End Sub

[ツリー表示へ]
タイトルRe^5: Excelとの連携
記事No11213
投稿日: 2008/01/22(Tue) 22:43
投稿者花ちゃん
ヒントだけ、下記をよくご覧下さい。 又、 i の値がどのように
変化するかも調べて見て下さい。

> Dim i As String
  Debug.Print i

[ツリー表示へ]
タイトルRe^6: Excelとの連携
記事No11221
投稿日: 2008/01/23(Wed) 16:14
投稿者たー
> ヒントだけ、下記をよくご覧下さい。 又、 i の値がどのように
> 変化するかも調べて見て下さい。
>
> > Dim i As String
>   Debug.Print i

返信ありがとうございます。
ご指摘の通り
Dim i As String を
Dim i As Integer に変更し
MsgBox i を追加しました。

調べてみた所ダブルクリックした際に+1されているんですが
表示されたらまた iが3に戻ってしまいます。
なのでダブルクリックしても永遠に4にしかならず
その結果先に進まない事が分かりました。
今の所解決方法が分かっていませんが,報告させていただきました。

[ツリー表示へ]
タイトルRe^7: Excelとの連携
記事No11222
投稿日: 2008/01/23(Wed) 16:22
投稿者花ちゃん

> 今の所解決方法が分かっていませんが,報告させていただきました。

単に変数の宣言している場所が間違っているだけですが。

クリックした時点で変数を宣言しているので、いつも 0 からのスタートです。

Private で宣言して見て下さい。

[ツリー表示へ]
タイトルRe^8: Excelとの連携
記事No11225
投稿日: 2008/01/23(Wed) 16:44
投稿者たー
>
> > 今の所解決方法が分かっていませんが,報告させていただきました。
>
> 単に変数の宣言している場所が間違っているだけですが。
>
> クリックした時点で変数を宣言しているので、いつも 0 からのスタートです。
>
> Private で宣言して見て下さい。


ご指摘ありがとうございます。
おかげさまで以下のソースで+1されて次を読み込むプログラムができました。
あと一つ疑問なんですが
最初の読み込みを 3 から始めたいのですが
i = 3 は何処で宣言したいいのですか?
これも Command1_Click()の中で宣言したらだめですよね?


Private i As Integer

Private Sub Command1_Click()

Dim xlApp   As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("test.xls")
Set xlSheet = xlBook.Worksheets(1)
Dim xlCells As Excel.Range
Set xlCells = xlSheet.Cells
  
'--------------- エクセルの表をVBへ読み込み -------------------

i = i + 1
    Text1.Text = xlCells(i, 2).Value
    Text2.Text = xlCells(i, 3).Value
    Text3.Text = xlCells(i, 4).Value
    Text4.Text = xlCells(i, 5).Value

'==================================================================
'終了処理
   Set xlCells = Nothing
   Set xlSheet = Nothing
   xlBook.Close            'Book を閉じる
   Set xlBook = Nothing
   xlApp.Quit
   Set xlApp = Nothing  
    
End Sub

[ツリー表示へ]
タイトルRe^8: Excelとの連携
記事No11226
投稿日: 2008/01/23(Wed) 16:52
投稿者たー
>
> > 今の所解決方法が分かっていませんが,報告させていただきました。
>
> 単に変数の宣言している場所が間違っているだけですが。
>
> クリックした時点で変数を宣言しているので、いつも 0 からのスタートです。
>
> Private で宣言して見て下さい。

何度もすいません。
以下の変更で出来ました。
お付き合いくださってホントにありがとうございました。

i = i + 1
    Text1.Text = xlCells(2 + i, 2).Value
    Text2.Text = xlCells(2 + i, 3).Value
    Text3.Text = xlCells(2 + i, 4).Value
    Text4.Text = xlCells(2 + i, 5).Value

[ツリー表示へ]