在新工作簿中设置列数据类型 VBA

Set columns datatype in new workbook VBA

我有一个这样的宏,我从一个工作表加载数据,用它做一些事情,然后创建新的工作簿,我在其中保存转换后的数据。

我的问题是:如何在新工作簿中设置整个列的格式(数据类型,如日期、百分比、整数、字符串、(...))? 例如,我希望 col1column Aint,因为它是 ID,col2datecol3 percentage 例如。

提一下:我将所有数据保存在最终工作簿中,从第三行开始 - 第一行是空的,第二行有列名 (headers),从第三行到第 N 行我有我的数据。

Sub new_worksheet()

  Dim harm As Worksheet, ids As Worksheet
  Set harm = Sheets("harm + rmk")
  
  Dim wb As Workbook, wb_new As Workbook
  Set wb = ActiveWorkbook
  Set wb_new = Workbooks.Add()
  
  Dim lastRow As Long, arr, arrFin, i As Long, dict As Object
    
  lastRow = harm.Range("A" & harm.Rows.Count).End(xlUp).Row 'last row
  nr_x = harm.Range("F2:H" & lastRow).Value
  arr_ids = harm.Range("L2:L" & lastRow).Value
  
  Set dict = CreateObject("Scripting.Dictionary")           'set the dictionary
  For i = 1 To UBound(arr)
    dict(arr_ids(i, 1)) = Array(nr_x(i, 1), nr_x(i, 2))
    
  Next i
 
  ReDim arrFin(1 To dict.Count, 1 To 3) 'redim the final array to keep two rows per a dictionary key
  For i = 0 To dict.Count - 1
        arrFin(i + 1, 1) = dict.Keys()(i)
        arrFin(i + 1, 2) = dict.Items()(i)(0)
        arrFin(i + 1, 3) = dict.Items()(i)(1)
  Next i
  
    Dim MyArr As Variant
    MyArr = Array("col1", "col2", "col3")
    wb_new.Sheets(1).Range("A2").Resize(1, UBound(MyArr) + 1).Value = MyArr
  
    wb_new.Sheets(1).Range("A3").Resize(UBound(arrFin), UBound(arrFin, 2)).Value = arrFin
    wb_new.SaveAs Filename:=wb.Path & "\final_worksheet.xlsm", FileFormat:=52
    wb_new.Close saveChanges:=False
    
    
End Sub

您可以像这样设置整个列的格式:

Columns("A:A").NumberFormat = "0" 'numbers without decimals
Columns("B:B").NumberFormat = "m/d/yyyy" 'dates
Columns("C:C").NumberFormat = "0" 'number
Columns("C:C").Style = "Percent" 'percentages