2016-04-12 95 views
1

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

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(“值”),我想preseve千在数字前面。当我将行更改为以下宏时,仍然会从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 

有什么建议吗?

+1

你可以改变格式如果您知道您的客户端ID是一组字符数,则将单元格/列转换为自定义格式以显示前导零。这样你仍然可以把它看作一个数字。你可以通过VBA设置这种格式,但是在excel自定义格式中,如果你的客户端代码长度为7位数,它将会像0000000一样。 –

回答

1

请试试这个:

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 

您只需检查为数字格式,然后将其应用到字符串。这样“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是真实的,那么该规则只适用于具有前导零的数值细胞;)

0

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

更改线路

Cell.Value = CStr(Temp) 

Cell.Value = Format(Temp,"00000") 
相关问题