VBA:在哪里添加源格式和列宽?

时间:2017-03-10 14:41:05

标签: excel vba excel-vba

我是VBA的新手并且自己学习。我能够构建一个代码,在所有工作表上搜索一个值(以前定义为“数字”),对于那些在特定单元格中具有特定值的工作表,它将从工作表中复制一个范围,然后将其粘贴到一个工作表中。新工作表。值得一提的是,我没有使用复制和粘贴(请参阅下面的代码)。代码工作正常,但我希望新工作表保持与源相同的格式。我尝试了几件事,但有效的东西意味着我必须使用Copy / Paste类型编码,后面的代码会给我带来问题,因为它会更改ActiveSheet。其他尝试不起作用。另外,我想为粘贴到新工作表中的范围设置固定列宽。

下面是一段有问题的代码。 FYI =变量Number在代码中先前定义。此外,在代码的前面我创建了新工作表。

我的问题:

  1. 对于下面的代码,有没有办法保持格式化来源,而不必使用“复制”和“粘贴”类型编码。

  2. 对于下面的代码,我能以某种方式修复新员工要粘贴的列的宽度吗?

  3. 如果您有更好,更优雅的方式来编写代码,我将不胜感激。

    For k = 1 To wscount - 1
        If Worksheets(k).Range("F2").Value = Number Then
            j = j + 1
            Worksheets(wscount + 1).Range(Cells(1, 1 + j), Cells(100, 1 + j)).Value = Worksheets(k).Range("F1:F100").Value
        End If
    Next
    

1 个答案:

答案 0 :(得分:1)

您可以将源单元格的属性值分配给目标单元格,就像使用value属性一样。

Option Explicit

Public Sub CopyValueAndFormat()
    For k = 1 To wscount - 1
        If Worksheets(k).Range("F2").Value = Number Then
            j = j + 1
            Worksheets(wscount + 1).Range(Cells(1, 1 + j), Cells(100, 1 + j)).Value = Worksheets(k).Range("F1:F100").Value

            'call setFormat method
            setFormat Worksheets(k).Range("F1:F100"), Worksheets(wscount + 1).Range(Cells(1, 1 + j), Cells(100, 1 + j))
        End If
    Next
End Sub

Private Sub setFormat(source As Range, target As Range)
    'set target format equal to source format
    With target
        .Value = source.Value
        .Interior.Color = source.Interior.Color
        .Font.FontStyle = source.Font.FontStyle
        'add others property to format

        'call AutoFit method to set column width
        .EntireColumn.AutoFit
    End With
End Sub