VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたいのですが、上手くいきません。コマンドボタンを使いクリックしたと同時にタイマーを作動させて、ある値までグラフを増加させたいと思っているのですが、初心者同然なので詳しくお願いします。
Dim dat(4, 3) As Integer
Dim a As Long

Private Sub Command1_Click()
With MSChart1
.chartType = VtChChartType3dBar
.ColumnCount = 3
.RowCount = 4

For i = 1 To .RowCount
For j = 1 To .ColumnCount
.Column = j
.Row = i
.Data = dat(i, j)
Next j
Next i
.DataGrid.ColumnLabel(1, 1) = "(1)"
.DataGrid.ColumnLabel(2, 1) = "(2)"
.DataGrid.ColumnLabel(3, 1) = "(3)"
.DataGrid.RowLabel(1, 1) = "1月~3月"
.DataGrid.RowLabel(2, 1) = "4月~6月"
.DataGrid.RowLabel(3, 1) = "7月~9月"
.DataGrid.RowLabel(4, 1) = "10月~12月"
.Visible = True
End With

Timer1.Enabled = True

End Sub

Private Sub Form_Load()
a = 0
MSChart1.Visible = False

End Sub

Private Sub MSChart1_OLEStartDrag(Data As MSChart20Lib.DataObject, AllowedEffects As Long)
End Sub

Private Sub Timer1_Timer()
a = a + 10
dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110
dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110
dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110
dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110

If a = 100 Then
Timer1.Enabled = False
End If
End Sub

このQ&Aに関連する最新のQ&A

A 回答 (2件)

データセットがボタンを押した時になってました。



一定間隔でグラフを伸ばすのであれば、
定期間隔でのイベント=タイマーイベント
で行うべきです。

ちょっと改造してみました。

Dim dat(4, 3) As Integer
Dim a As Long

Private Sub Command1_Click()
  'チャート初期設定
  With MSChart1
    .chartType = VtChChartType3dBar
    .ColumnCount = 3
    .RowCount = 4

    .DataGrid.ColumnLabel(1, 1) = "(1)"
    .DataGrid.ColumnLabel(2, 1) = "(2)"
    .DataGrid.ColumnLabel(3, 1) = "(3)"
    .DataGrid.RowLabel(1, 1) = "1月~3月"
    .DataGrid.RowLabel(2, 1) = "4月~6月"
    .DataGrid.RowLabel(3, 1) = "7月~9月"
    .DataGrid.RowLabel(4, 1) = "10月~12月"
    
  End With
  
  'タイマー起動
  Timer1.Enabled = True
End Sub

Private Sub Form_Load()
  a = 0            'タイマカウンタ初期化
  MSChart1.Visible = False  'チャート不可視
  Timer1.Enabled = False   'タイマー使用不可
  Timer1.Interval = 1000   '1000ms(1秒)ごとに更新
End Sub

Private Sub Timer1_Timer()
  Dim i  As Long
  Dim j  As Long
  
  'セットする値の作成
  a = a + 10
  dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110
  dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110
  dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110
  dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110

  With MSChart1
    'データセット
    For i = 1 To .RowCount
      For j = 1 To .ColumnCount
        .Column = j
        .Row = i
        .Data = dat(i, j)
      Next j
    Next i
    
    'もし不可視なら表示する
    If Not .Visible Then
      .Visible = True
    End If
    '更新した値を画面に反映
    .Refresh
    

  End With
  
  If a = 100 Then
    Timer1.Enabled = False
  End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。イメージしていた物ができるようになりました。今後はデータをAccessから取得できるようにしていきたいと思います。また機会があればいろいろと教えてください。ありがとうございました。

お礼日時:2001/11/18 09:07

>今後はデータをAccessから取得できるようにしていきたいと思います。

また機会があればいろいろと教えてください。
どうぞどうぞ、Accessの質問には答える人が多いから、すぐに解決すると思いますよ。

コメントからすると解決したのですか?
それともまだ問題があるのですか?

解決したのなら、別にポイントはいらないので、締め切りだけはするようにしてくださいね。
解決してないのなら、解決できてない部分を書き込んでくださいね。
もしその解決してない部分が、この問題とは別の部分であれば、新規に投稿してくださいね。

それでは がんばってください。。。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QExcel VBA: private sub 内の変数の値を Sub へ渡すには

VBA初心者です。private sub 内で条件に合致した変数の値をSubへ渡すにはどうしたらよいのでしょう。下記を見ていただければやりたいことの意図は伝わるかと思います。private sub内の変数が多分private sub内のみでしか参照出来ないからだとは思いますが、うまくいきません。グローバル変数化みたいなことが出来るのでしょうか。

Sub Find_OK()
MsgBox "条件に合致したのは" & var1 & "です。"
End Sub

Private Sub Worksheet_Calculate()
Dim var1
 For var1 = 1 to 10
 If var1 > 8 Then Call Find_OK
End If
Next
End Sub

Aベストアンサー

Sub Find_OK(var1)
MsgBox "条件に合致したのは" & var1 & "です。"
End Sub

Private Sub Worksheet_Calculate()
Dim var1
 For var1 = 1 to 10
 If var1 > 8 Then Call Find_OK(var1)
End If
Next
End Sub

QSubとEnd Subについて

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate URL
objIE.Visible = True

Do Until objIE.Busy = False
WScript.sleep(250)
Loop

If objIE.document.URL = URL Then
BodyText = objIE.document.body.innerTEXT
AriNashi = InStr(1, BodyText, "Yahoo")
If AriNashi > 0 Then
Set objINPUT = objIE.document.getElementsByTagName("input")
objINPUT(0).value = LoginID
objINPUT(1).value = Password
objINPUT(2).Click
Else
msgbox "NO"
End If
Else
WScript.Echo " ダ メ" & Err.Description
End If
Set objIE = Nothing

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate ...続きを読む

Aベストアンサー

Subで囲むとプロシージャとなります。
プロシージャは他から呼び出されない限り、勝手に動作はしません。

Sub Hoge
'実体
End Sub

と書いたなら、プロシージャの外で
Call Hoge()
のようにプロシージャを呼び出してあげてください。

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

QPrivate Subについて

VB初心者ですが質問させていただきます。
現在
Private Sub CommandButton1_Click()
で呼び出されている処理を、
コマンドラインからstart~.exeと入力して呼び出される(実行される)ようにするにはPrivate Subにてどのように記載してexeファイルを作成すればよいでしょうか??

何分初心者な者ですので概念に間違いがありましたら申し訳ございません。

よろしくお願いいたします。

Aベストアンサー

>Sub Main()
>Call Command1_Click
>End Sub
>とか出来なかったっけ?
できるはずがない。
Privateの範囲を考えればわかるはず

Public Sub Command1_Click()
にして
sub min側で
Call Form1.Command1_Click
呼び出せば動かないことはないけどイレギュラー的な
使い方すぎる。
それ考えれば
Command1_Clickイベント内をサブルーチン(関数化)して
それをsub mainとCommand1_Clickイベントから
呼び出して使うのが本来でしょう。


このカテゴリの人気Q&Aランキング

おすすめ情報