0

我处于一个糟糕的位置 - 任何为我指明正确方向的帮助都会有所帮助并且非常感谢。

我创建了一个 Access 进程,它复制一个 excel 文件并使用 Copy Recordset 使用来自 2 个记录集的数据对其进行更新。该过程现在通过将“模板工作簿”复制到新文件来创建 39 个工作簿。每个工作簿将包含至少一个选项卡,但通常包含更多,一个工作簿有超过 20 个选项卡。

这一切都在 Access 中完成。它复制“模板”文件,然后运行一个循环,并使用复制记录集将“模板”工作表复制到每个选项卡。

添加选项卡后,它将来自 2 个记录集的数据加载到工作表中。第一个记录集加载一行数据 - 没问题。然而,第二个加载多行 - 数量可能会有所不同。

这一切都很好。问题是格式化列 D 到 G。如果列 C = 收入、成本或毛利 (GM),我希望该行的列 D 到 G 格式化为货币。如果 C 列 = GM%,那么我希望 D 到 G 列格式化为百分比。如果列 C = 小时我不必格式化它。

我想要创建一个函数,在打开工作簿时根据 C 列值格式化这些列/行。我知道打开工作簿时会触发一个事件,并且我知道我已经遍历了工作簿中的所有选项卡,或者我想为每个选项卡运行该功能。

可能还有另一个问题 - 我想我可以在 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 回答