1

グループ化されたフレックスグリッドと、そのグループ化による .subtotal があります。1 つを除くすべての列は数値です。そうでない列は、'x/y' の形式です (例: '1/5')。

flexSTSum で .Subtotal を実行すると、ペアの最初の数値が合計されます。つまり、上記の例では、1 が 10 進数として合計され、小計行に 1.00 が表示されます。

最初に、別の列で合計する方法を見つけようとしました。つまり、個々の値を別々の列に入れ、.Width を 0 にして、これらを最初の列の .Subtotal 列に合計することができましたが、見つかりませんでしたそれを行う方法。

そして、それを行う方法を見つけたとしても、.Subtotal をカスタムフォーマットできるようにしたいので、「3/17」、つまり「1/5」と「2/12」の小計を「3/」として表示します。小計行の 17'。

別の列から小計を出すことができない場合、小計行にカスタム アクセスし、「3/17」の小計値を手動で入力できるかどうか疑問に思いましたが、それでも利用できないようです。

私の質問は、これを達成する方法はありますか?

4

1 に答える 1

0

私が使用したことのない VideoSoft FlexGrid を使用していると思われるため、そのコントロールの特定のメソッドについてはお手伝いできません。

ただし、標準の MSFlexGrid コントロールを使用すると簡単に実行できます。おそらく、VideoSoft FlexGrid でも同じことができます。

次のサンプル プロジェクトを見てください。

'1 form with :
'    1 msflexgrid control : name=MSFlexGrid1
Option Explicit

Private Sub Form_Load()
  Dim lngRow As Long, lngCol As Long
  With MSFlexGrid1
    .Rows = 10
    .Cols = 4
    .FixedRows = 0
    .FixedCols = 0
    For lngRow = 0 To .Rows - 2
      For lngCol = 0 To .Cols - 2
        .TextMatrix(lngRow, lngCol) = CStr(100 * lngRow + lngCol)
      Next lngCol
      .TextMatrix(lngRow, .Cols - 1) = CStr(lngRow) & "/" & CStr(lngRow * lngRow)
    Next lngRow
  End With 'MSFlexGrid1
End Sub

Private Sub Form_Resize()
  MSFlexGrid1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Private Sub MSFlexGrid1_Click()
  Dim lngCol As Long
  'calculate subtotals
  With MSFlexGrid1
    For lngCol = 0 To .Cols - 2
      .TextMatrix(.Rows - 1, lngCol) = CStr(GetTotal(lngCol))
    Next lngCol
    .TextMatrix(.Rows - 1, .Cols - 1) = GetTotalSpecial(.Cols - 1)
  End With 'MSFlexGrid1
End Sub

Private Function GetTotal(lngCol As Long) As Long
  Dim lngRow As Long
  Dim lngTotal As Long
  With MSFlexGrid1
    lngTotal = 0
    For lngRow = 0 To .Rows - 2
      lngTotal = lngTotal + Val(.TextMatrix(lngRow, lngCol))
    Next lngRow
  End With 'MSFlexGrid1
  GetTotal = lngTotal
End Function

Private Function GetTotalSpecial(lngCol As Long) As String
  Dim lngRow As Long
  Dim lngTotal1 As Long, lngTotal2 As Long
  Dim strPart() As String
  With MSFlexGrid1
    lngTotal1 = 0
    lngTotal2 = 0
    For lngRow = 0 To .Rows - 2
      strPart = Split(.TextMatrix(lngRow, .Cols - 1), "/")
      If UBound(strPart) = 1 Then
        lngTotal1 = lngTotal1 + Val(strPart(0))
        lngTotal2 = lngTotal2 + Val(strPart(1))
      End If
    Next lngRow
  End With 'MSFlexGrid1
  GetTotalSpecial = CStr(lngTotal1) & "/" & CStr(lngTotal2)
End Function

グリッドにいくつかの値がロードされ、グリッドをクリックすると、小計が計算され、最後の行に入力されます。

于 2013-03-27T06:52:28.657 に答える