我是VBA的新手并且自己学习。我能够构建一个代码,在所有工作表上搜索一个值(以前定义为“数字”),对于那些在特定单元格中具有特定值的工作表,它将从工作表中复制一个范围,然后将其粘贴到一个工作表中。新工作表。值得一提的是,我没有使用复制和粘贴(请参阅下面的代码)。代码工作正常,但我希望新工作表保持与源相同的格式。我尝试了几件事,但有效的东西意味着我必须使用Copy
/ Paste
类型编码,后面的代码会给我带来问题,因为它会更改ActiveSheet
。其他尝试不起作用。另外,我想为粘贴到新工作表中的范围设置固定列宽。
下面是一段有问题的代码。 FYI =变量Number
在代码中先前定义。此外,在代码的前面我创建了新工作表。
我的问题:
对于下面的代码,有没有办法保持格式化来源,而不必使用“复制”和“粘贴”类型编码。
对于下面的代码,我能以某种方式修复新员工要粘贴的列的宽度吗?
如果您有更好,更优雅的方式来编写代码,我将不胜感激。
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
答案 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