Excel 是否可以根据一行中的文本值更改一行中4列的数字格式?

Excel 是否可以根据一行中的文本值更改一行中4列的数字格式?,excel,vba,Excel,Vba,我的处境很糟糕——任何能为我指明正确方向的帮助都会很有帮助,我将不胜感激 我创建了一个Access进程,它复制一个excel文件,并使用“复制记录集”使用2个记录集的数据对其进行更新。该过程现在通过将“模板工作簿”复制到新文件来创建39个工作簿。每个工作簿至少包含一个选项卡,但通常包含更多选项卡,一个工作簿有20多个选项卡 这一切都是在Access中完成的。它复制“模板”文件,然后运行循环,并使用复制记录集将“模板”工作表复制到每个选项卡 添加选项卡后,它将2个记录集中的数据加载到工作表中。第一

我的处境很糟糕——任何能为我指明正确方向的帮助都会很有帮助,我将不胜感激

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

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

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

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

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

可能还有另一个问题——我想我可以在Access中解决这个问题,但是EAC列被导出为文本,应该是数字。现在还不确定是将其导出为文本,还是EXCEL将其视为文本

任何帮助都将不胜感激。提前谢谢

我有图片,但现在还不允许我发布。如果他们愿意帮忙-让我知道,我会尽量把他们发电子邮件给你


Bob

我想出了一种方法,包括了代码

然而,也许有更好的办法,所以我愿意接受建议

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

结束子部分

您应该发布代码-始终帮助获得响应。另外,为什么不在创建工作簿时运行格式化呢?这似乎是实现目标的最简单方法。