血圧アプリその4
WebのUIを変更。
選択をラジオボタンにして、入力フォームの文字を大きくした。
Excel側の日付ダイアログをもっとアプリっぽくして、
日付の間でデータが無いとグラフが切れちゃってたので、
VBAを修正し、データが存在してる点をつなぐようにした。(o^-‘)b グッ!
が、
Excel終了時に必ずエラーになる・・・
COM参照中にVBAが動くからかなぁ?
COMの解放関係ではなさそうだが。解らん┐(´д`)┌
VBAはこんなだけど、
[vb]
Public Sub WorksheetChange(ByVal Target As Range)
If Target.Row = Range("_C_MAX1").Row Or Target.Row = Range("_C_MIN1").Row Then
Dim nm As String
Dim nm1 As String
Dim nm2 As String
If Target.Row = Range("_C_MAX1").Row Then
nm = "MAX" & Target.Column
nm1 = SearchShape("MAX", Target.Column, 1, Target.Parent)
nm2 = SearchShape("MAX", Target.Column, -1, Target.Parent)
End If
If Target.Row = Range("_C_MIN1").Row Then
nm = "MIN" & Target.Column
nm1 = SearchShape("MIN", Target.Column, 1, Target.Parent)
nm2 = SearchShape("MIN", Target.Column, -1, Target.Parent)
End If
line1 = nm & "-" & nm1
line2 = nm2 & "-" & nm
If nm <> "" Then Call DelShape(nm, Target.Parent)
If nm <> "" Then Call DelShapeLine("-" & nm, Target.Parent)
If nm <> "" Then Call DelShapeLine(nm & "-", Target.Parent)
If nm1 <> "" Then Call DelShapeLine("-" & nm1, Target.Parent)
If nm2 <> "" Then Call DelShapeLine(nm2 & "-", Target.Parent)
If nm <> "" Then
If IsNumeric(Target.Value) = True Then
Call AddOval(Target, nm, 2, Target.Parent)
Call AddLine(nm, nm1, nm2, Target.Parent)
Else
Call AddLine(nm2, nm1, "", Target.Parent)
End If
End If
End If
End Sub
Public Function SearchShape(ByVal str As String, ByVal col As Long, ByVal direction As Integer, ByRef sheet As Worksheet) As String
Dim nm As String
Dim b As Boolean
b = False
For i = 2 To 10 Step 2
nm = str & (col + i * direction)
For Each a In sheet.Shapes
If a.Name = nm Then
b = True
Exit For
End If
Next a
If b = True Then Exit For
Next i
If b = False Then
nm = ""
End If
SearchShape = nm
End Function
Public Sub AddOval(ByVal Target As Range, ByVal nm As String, ByVal fos As Long, ByRef sheet As Worksheet)
ofs = (Range("42:42").Top – Range("12:12").Top) / 150
colPos = Target.Cells(1, fos).Left – 2
rowPos = Range("42:42").Top – (Target.Value – 50) * ofs – 2
With sheet.Shapes.AddShape(msoShapeOval, colPos, _
rowPos, 4, 4)
.Name = nm
.ZOrder (msoBringToFront)
End With
End Sub
Public Sub DelShape(ByVal nm As String, ByRef sheet As Worksheet)
For Each a In sheet.Shapes
If a.Name = nm Then
a.Delete
End If
Next a
End Sub
Public Sub DelShapeLine(ByVal nm As String, ByRef sheet As Worksheet)
For Each a In sheet.Shapes
If a.Name Like nm & "*" Or a.Name Like "*" & nm Then
a.Delete
End If
Next a
End Sub
Public Sub AddLine(ByVal nm As String, ByVal nm1 As String, ByVal nm2 As String, ByRef sheet As Worksheet)
b = False
b1 = False
b2 = False
Dim sh As Shape
Dim sh1 As Shape
Dim sh2 As Shape
For Each a In sheet.Shapes
If a.Name = nm Then
Set sh = a
b = True
End If
Next a
For Each a In sheet.Shapes
If a.Name = nm1 Then
Set sh1 = a
b1 = True
End If
Next a
For Each a In sheet.Shapes
If a.Name = nm2 Then
Set sh2 = a
b2 = True
End If
Next a
‘ 次のOvalへ線を引く
If b = True And b1 = True Then
line1 = nm & "-" & nm1
With sheet.Shapes.AddLine(sh.Left + 2, sh.Top + 2, sh1.Left + 2, sh1.Top + 2)
.Name = line1
.Line.Weight = 2
.ZOrder msoSendToBack
End With
End If
‘ 前のOvalへ線を引く
If b = True And b2 = True Then
line2 = nm2 & "-" & nm
With sheet.Shapes.AddLine(sh.Left + 2, sh.Top + 2, sh2.Left + 2, sh2.Top + 2)
.Name = line2
.Line.Weight = 2
.ZOrder msoSendToBack
End With
End If
End Sub
[/vb]
さてどこがイカんのだ。それともVSTO側なのか。