初めて投稿します。私は以下のようなプログラムで、VB6を使ってVBからExcelの値を取得し、選択した分だけ加算するプログラムを作成しようとしています。コンボ
ボックスで選択し終わったら以下のプログラムにつながるようにしています。しかし現状では実行した際に、表示する場所であるlabel1が0としか表示されません。何とか加算した結果をlabel1に表示したいのですがもし間違っている個所がありましたら教えてください。
strExcelFile = "C:\sheet.xls"
strExcelSheet = "sheet1"
Set objExcelApp = GetObject("C:\sheet.xls")
objExcelApp.Windows(1).Visible = True
objExcelApp.Application.Visible = True
sum = 0
If 教室表示.Caption = 第1教室 Then
Label1.Caption = objExcelApp.ActiveSheet.Cells(25, 9).Value
sum = sum + Label1.Caption
ElseIf 教室表示.Caption = 第2教室 Then
Label1.Caption = objExcelApp.ActiveSheet.Cells(27, 9).Value
sum = sum + Label1.Caption
Else
Label1.Caption = sum
End If
objExcelApp.Save
objExcelApp.Application.Quit
加算するということですが、最初にsum=0としているので、実行するたびに
値がクリアされてしまうのでは?
また、第1教室と第2教室は変数ではなく文字列なのでは?
'sum = 0←不要
If 教室表示.Caption = "第1教室" Then
sum = sum + objExcelApp.ActiveSheet.Cells(25, 9).Value
ElseIf 教室表示.Caption = "第2教室" Then
sum = sum + objExcelApp.ActiveSheet.Cells(27, 9).Value
End If
Label1.Caption = sum
1行1行ステップ実行でデバッグすれば If 文の処理が有効に
なってないことくらいは分かるんじゃない?他人任せに質問じゃ
なく、自分で調べる努力をしましょう。
こーゆーミスを防ぐため、プログラムコードの1行目で
Option Explicit
と宣言してあればエラー表示されるんじゃないかな?
現在のコードだと、宣言されてない変数『第1教室』が
自動で用意されて中身が空のまま判定してると思うよ。
デバック時、ブレークポイントを設定して処理をとめて
変数の中身に何が入ってるかも確認して下さい。
対策は LESIA さんのレス通りだと思います。
一応以下のプログラムを組んで実行してみました。しかし、現状は第2教室を選択しても第1教室の値がlabel1に書き込まれてしまいます。どこが間違っているか教えてください。
Option Explicit
Private Sub OK_Click()
Dim Answer As String
Dim objExcelApp As Workbook
Dim strExcelFile As String
Dim strExcelSheet As String
Dim 第1教室 As String
Dim 第2教室 As String
Dim sum As Single
Answer = MsgBox("入力完了ですか?", vbYesNoCancel, "MsgBox")
If Answer = vbYes Then
教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
曜日表示.Caption = 曜日.Text
時限表示.Caption = 時限.Text
On Error Resume Next
strExcelFile = "C:\エアコン電力.xls"
strExcelSheet = "一覧"
Set objExcelApp = GetObject("C:\エアコン電力.xls")
objExcelApp.Windows(1).Visible = True
objExcelApp.Application.Visible = True
If 教室表示.Caption = "第1教室" Then
sum = sum + objExcelApp.ActiveSheet.Cells(25, 9).Value
ElseIf 教室表示.Caption = "第2教室" Then
sum = sum + objExcelApp.ActiveSheet.Cells(27, 9).Value
End If
objExcelApp.Save
objExcelApp.Application.Quit
Label1.Caption = sum
ElseIf Answer = vbNo Then
曜日表示.Caption = 曜日.Text
時限表示.Caption = 時限.Text
教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
Else
Answer = vbCancel
教室.Text = ""
End If
End Sub
Private Sub OK_Click()
Dim Answer As String
Dim objExcelApp As Workbook
> Dim strExcelFile As String
> Dim strExcelSheet As String
> Dim 第1教室 As String
> Dim 第2教室 As String
> Dim sum As Single
> Answer = MsgBox("入力完了ですか?", vbYesNoCancel, "MsgBox")
>
> If Answer = vbYes Then
> 教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
-----------------------------------------------------------
この辺が怪しい
> この辺が怪しい
確かに(^^;)
改行とか入ってるのに一致するわけが無い。
…一致しないことだけは分かるコードだ。
変数の中身を確認するように言ったはずですが?
Debug.Print とかで何が入ってるか書き出したら?
>If 教室表示.Caption = "第1教室" Then
とかの条件は完全に文字列が一致して無いと
有効にならないよ。部分一致とか人間が見た目に
同じっぽいではコンピュータは判断できません。
以下のプログラムで値表示できるようになりました。加算がまだ出来ないので不安ですけど・・・。何とか考えてみます。
Option Explicit
Private Sub OK_Click()
Dim Answer As String
Dim objExcelApp As Workbook
Dim strExcelFile As String
Dim strExcelSheet As String
Dim sum As Single
Answer = MsgBox("入力完了ですか?", vbYesNoCancel, "MsgBox")
If Answer = vbYes Then
教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
曜日表示.Caption = 曜日.Text
時限表示.Caption = 時限.Text
On Error Resume Next
strExcelFile = "C:\エアコン電力.xls"
strExcelSheet = "一覧"
Set objExcelApp = GetObject("C:\エアコン電力.xls")
objExcelApp.Windows(1).Visible = True
objExcelApp.Application.Visible = True
If 教室.text = 第1教室 Then
sum = sum + objExcelApp.ActiveSheet.Cells(25, 9).Value
ElseIf 教室.text = 第2教室 Then
sum = sum + objExcelApp.ActiveSheet.Cells(27, 9).Value
End If
objExcelApp.Save
objExcelApp.Application.Quit
Label1.Caption = sum
ElseIf Answer = vbNo Then
曜日表示.Caption = 曜日.Text
時限表示.Caption = 時限.Text
教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
Else
Answer = vbCancel
教室.Text = ""
End If
End Sub
ツイート | ![]() |