VBA将所有单元格格式化为文本

下面是一个Sub,用于从工作表3开始将所有单元格格式化为电子表格中的文本。 你会看到有一条粗体的线,我很可能需要改变。 该行的目的之一是保持Column1(“客户端ID”)的值保持不变,因为在每个表中,由该代码转换的“00001”值将变为“1”。 那是错的 重要的是每个工作表中的Column1总是包含相同的“00001”值。

Sub formatAllCellsAsText() Dim wsTemp As Worksheet Dim LastRow As Long Dim LastColumn As Long Dim StartCell As Range Dim Cell As Range For sht = 3 To Worksheets.Count Set wsTemp = Sheets(sht) Set StartCell = wsTemp.Range("A4") LastRow = wsTemp.Range("A4").CurrentRegion.Rows.Count LastColumn = wsTemp.Range("A4").CurrentRegion.Columns.Count For Each Cell In wsTemp.Range(StartCell, wsTemp.Cells(LastRow, LastColumn)).Cells If Not IsEmpty(Cell.Value) And IsNumeric(Cell.Value) And InStr(wsTemp.Cells(1, Cell.Column), "Client ID") <= 0 Then Dim Temp As Double Temp = Cell.Value Cell.ClearContents Cell.NumberFormat = "@" Cell.Value = CStr(Temp) End If Next Next sht End Sub 

现在我的问题是在一个工作表中有Column6(“Value”),我想在数字前面预先设置000。 当我将行更改为以下macros时,仍然从Column6值中删除前面的000。 我想这个条件并不像我想象的那么简单。

 If Not IsEmpty(Cell.Value) And IsNumeric(Cell.Value) And InStr(wsTemp.Cells(1, Cell.Column), "Client ID") <= 0 And InStr(wsTemp.Cells(6, Cell.Column), "Value") <= 0 Then 

有什么build议么?

请试试这个:

 Sub formatAllCellsAsText() Dim wsTemp As Worksheet Dim LastRow As Long, LastColumn As Long Dim StartCell As Range, Cell As Range Dim Temp As Double Dim Temp2 As String For sht = 3 To Worksheets.Count Set wsTemp = Sheets(sht) Set StartCell = wsTemp.Range("A4") LastRow = wsTemp.Range("A4").CurrentRegion.Rows.Count LastColumn = wsTemp.Range("A4").CurrentRegion.Columns.Count For Each Cell In wsTemp.Range(StartCell, wsTemp.Cells(LastRow, LastColumn)).Cells If Not IsEmpty(Cell.Value) And IsNumeric(Cell.Value) And InStr(wsTemp.Cells(1, Cell.Column), "Client ID") <= 0 Then Temp = Cell.Value Temp2 = Cell.NumberFormat Cell.ClearContents Cell.NumberFormat = "@" Cell.Value = Format(Temp, Temp2) End If Next Next End Sub 

您只需检查数字格式,然后将其应用于string。 这样“0001”保持“0001”。 另一种方法是使用.Text

 Dim Temp As String Temp = Cell.Text Cell.ClearContents Cell.NumberFormat = "@" Cell.Value = Temp 

If IsNumeric(Cell.Value) And Left(Cell.Text, 1) = "0" Then也可以这样做If IsNumeric(Cell.Value) And Left(Cell.Text, 1) = "0" Then是true,这样规则只适用于数值前导零的单元格;)

每个工作表中的Column1始终包含相同的“00001”值。

改变线

 Cell.Value = CStr(Temp) 

 Cell.Value = Format(Temp,"00000")