0

alt + f11 を押して、コード ビハインドに入り、次のように記述しました。

Class style
    Public Sub IterateThroughData()
        Dim rowIndex As Integer
        Dim colIndex As Integer
        Dim rowOffset As Integer
        rowOffset = 6
        colIndex = 1

        For rowIndex = rowOffset To 15
            Dim currentDate As Date
            Dim nextRowDate As Date
            currentDate = Cells(rowOffset, colIndex).Value
            nextRowDate = Cells(rowIndex + 1, colIndex).Value

            If currentDate <> nextRowDate Then
                RenderYearStyle(rowIndex,colIndex)
            End If

            currentDate = Cells(rowIndex, colIndex).Value
        Next rowIndex
    End Sub

    Private Sub RenderYearStyle(rowIndex As Integer, colIndex As Integer)
        With Cells(rowIndex, colIndex)
            .Borders(xlEdgeBottom).Weight = xlThin
            .Borders(xlInsideHorizontal).Weight = xlThin
        End With
    End Sub
End Class

Dim style As style
Set style = New style
style.IterateThroughData()

これは、行 6 列 1 から行 15 列 1 までセルを反復処理する必要があります。反復で現在のセルの値を取得し、それを次の行の日付と比較します。それらが同じでない場合は、そのセルの下部に境界線を追加します。

これは簡単なテストですが、問題が発生しています。実行すると、無効な外部プロシージャと表示されます。何か案は?

私はする必要があると仮定しています

  1. Excel ファイルのシートをターゲットにします。
  2. スタイルクラスのグローバルスコープ宣言を追加するための適切な場所があります。
  3. 私のコードのバグを修正してください。

編集:::

クラスモジュール

Class style
    Public Sub IterateThroughData()
        Dim rowIndex As Integer
        Dim colIndex As Integer
        Dim rowOffset As Integer
        rowOffset = 6
        colIndex = 1

        For rowIndex = rowOffset To 15
            Dim currentDate As Date
            Dim nextRowDate As Date
            currentDate = Cells(rowOffset, colIndex).Value
            nextRowDate = Cells(rowIndex + 1, colIndex).Value

            If currentDate <> nextRowDate Then
                RenderYearStyle(rowIndex,colIndex)
            End If

            currentDate = Cells(rowIndex, colIndex).Value
        Next rowIndex
    End Sub

    Private Sub RenderYearStyle(rowIndex As Integer, colIndex As Integer)
        With Cells(rowIndex, colIndex)
            .Borders(xlEdgeBottom).Weight = xlThin
            .Borders(xlInsideHorizontal).Weight = xlThin
        End With
    End Sub
End Class

Private Sub Class_Initialize()
    Dim MyStyles As style
    Set MyStyles = New style
End Sub

ワークブックを開く

Private Sub Workbook_Open()
    MyStyles.IterateThroughData()
End Sub
4

1 に答える 1

1

コードの下部...

Dim style As style
Set style = New style
style.IterateThroughData()

...適切なコード ブロック内に含まれていません。Excel マクロ インターフェイスからマクロを開始する必要があります。

于 2013-08-13T20:53:42.317 に答える