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

时间:2016-04-12 19:52:32

标签: excel vba excel-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”),我想在数字前面预先设置000s。当我将行更改为以下时,我的宏仍然从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

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

请试试这个:

.Text

您只需检查数字格式,然后将其应用于字符串。这种方式“0001”保持“0001”。另一种方法是使用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

只有config/cms.php为真时才能执行此操作,因此该规则仅适用于数值为前导零的单元格;)

答案 1 :(得分:0)

  

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

更改行

    ObjectMapper ob = new ObjectMapper();
    ob.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    String json = "{name: \"Bob\", state: \"Colorado\", Friends: [{ name: \"Dan\", age: 23 }, {name: \"Zane\", age: 24 }]}";

    Map<String, ObjectNode> theMap = ob.readValue(json, Map.class);
    System.out.println(theMap.get("name"));

Cell.Value = CStr(Temp)