0

私は悪い場所にいます-正しい方向に私を向ける助けは役に立ち、非常に高く評価されます.

Excel ファイルをコピーし、Copy Recordset を使用して 2 つのレコード セットのデータで更新する Access プロセスを作成しました。このプロセスでは、「テンプレート ワークブック」を新しいファイルにコピーすることで、39 個のワークブックが作成されます。各ワークブックには少なくとも 1 つのタブが含まれますが、通常は複数のタブが含まれ、1 つのワークブックには 20 を超えるタブがあります。

これはすべて Access で行われます。「テンプレート」ファイルをコピーしてからループを実行し、「レコードセットのコピー」を使用して「テンプレート」ワークシートを各タブにコピーします。

タブを追加すると、2 つのレコード セットのデータがシートに読み込まれます。最初のレコードセットは 1 行のデータをロードします - 問題ありません。ただし、2 番目は複数の行をロードします。これは、数が異なる場合があります。

これはすべてうまくいきます。問題は、列 D から G までの書式設定です。列 C = 収益、コスト、または総利益 (GM) の場合、その行の列 D から G を通貨として書式設定します。列 C = GM% の場合、列 D から G までをパーセンテージでフォーマットします。列 C = 時間の場合、フォーマットする必要はありません。

ワークブックを開いたときに、列 C の値に基づいてこれらの列/行をフォーマットする関数を作成したいと考えています。ワークブックが開かれたときに発生するイベントがあることを知っており、ワークブック内のすべてのタブをループしたことがわかっているため、タブごとにその関数を実行したいと考えています。

他に 1 つの問題がある可能性があります。Access で修正できると思いますが、EAC 列はテキストとしてエクスポートされており、数値にする必要があります。それがテキストとしてエクスポートされているのか、それとも EXCEL がテキストとして認識しているのかは、現時点ではわかりません。

どんな助けでも大歓迎です。前もって感謝します。

画像がありますが、まだ投稿できません。彼らが助けてくれるなら、私に知らせてください。

ボブ

4

1 に答える 1

0

私はそれを行う方法を思いついたので、コードを含めました。

しかし、もっと良い方法があるかもしれませんので、私は提案を受け付けています。

Public Sub FormatTaskRows()

Dim Sheet       As Object
Dim rngTasks    As Range
Dim rngFCells   As Range
Dim strTaskEnd  As String
Dim ix          As Integer


For Each Sheet In Sheets
    If Sheet.Name = "Template" Then
        Sheet.Visible = xlSheetVeryHidden
    Else
        Sheet.Visible = xlSheetVisible
        Sheet.Activate
        strTaskEnd = Range("C44").End(xlDown).Address
        Set rngTasks = Range("$C$44:" & strTaskEnd)
        'For Each Row In rngTasks
        For ix = 1 To rngTasks.Rows.Count
            Sheet.Unprotect
             If rngTasks.Cells(ix) = "Revenue" Or rngTasks.Cells(ix) = "Cost" Or rngTasks.Cells(ix) = "Gross Margin (GM)" Then
                Set rngFCells = Range(ActiveSheet.Name & "!D" & ix + 43 & ":G" & ix + 43)
                rngFCells.Select
                Selection.NumberFormat = "$#,##0.00"
             Else
                If rngTasks.Cells(ix) = "GM%" Then
                    Set rngFCells = Range(ActiveSheet.Name & "!D" & ix + 43 & ":G" & ix + 43)
                    rngFCells.Select
                    Selection.NumberFormat = "0.0000%"
                End If
             End If
            Sheet.Protect
        Next ix
    End If

Next

サブ終了

于 2013-07-30T13:04:47.747 に答える