Excel VBA复制单元格值和格式

Excel VBA复制单元格值和格式,excel,vba,Excel,Vba,如何修改以下代码,以便不仅复制值,而且复制字体样式,例如粗体或不粗体。谢谢 Private Sub CommandButton1_Click() Dim i As Integer Dim a As Integer a = 15 For i = 11 To 32 If Worksheets(1).Cells(i, 3) <> "" Then Worksheets(2).Cells(a, 15) = Worksheets(1).Cells(i, 3).Value Wo

如何修改以下代码,以便不仅复制值,而且复制字体样式,例如粗体或不粗体。谢谢

Private Sub CommandButton1_Click()
Dim i As Integer
Dim a As Integer
a = 15
For i = 11 To 32
  If Worksheets(1).Cells(i, 3) <> "" Then
    Worksheets(2).Cells(a, 15) = Worksheets(1).Cells(i, 3).Value
    Worksheets(2).Cells(a, 17) = Worksheets(1).Cells(i, 5).Value
    Worksheets(2).Cells(a, 18) = Worksheets(1).Cells(i, 6).Value
    Worksheets(2).Cells(a, 19) = Worksheets(1).Cells(i, 7).Value
    Worksheets(2).Cells(a, 20) = Worksheets(1).Cells(i, 8).Value
    Worksheets(2).Cells(a, 21) = Worksheets(1).Cells(i, 9).Value
    a = a + 1
  End If
Next i
Private子命令按钮1\u单击()
作为整数的Dim i
将a变暗为整数
a=15
对于i=11到32
如果工作表(1).单元格(i,3)“,则
工作表(2).单元格(a,15)=工作表(1).单元格(i,3).值
工作表(2).单元格(a,17)=工作表(1).单元格(i,5).值
工作表(2).单元格(a,18)=工作表(1).单元格(i,6).值
工作表(2).单元格(a,19)=工作表(1).单元格(i,7).值
工作表(2).单元格(a,20)=工作表(1).单元格(i,8).值
工作表(2).单元格(a,21)=工作表(1).单元格(i,9).值
a=a+1
如果结束
接下来我

您可以尝试使用“复制/粘贴”,而不是直接设置值,因此,您可以使用“复制/粘贴”来代替:

Worksheets(2).Cells(a, 15) = Worksheets(1).Cells(i, 3).Value
试试这个:

Worksheets(1).Cells(i, 3).Copy
Worksheets(2).Cells(a, 15).PasteSpecial Paste:=xlPasteFormats
Worksheets(2).Cells(a, 15).PasteSpecial Paste:=xlPasteValues
要将字体设置为粗体,您可以保留现有分配并添加以下内容:

If Worksheets(1).Cells(i, 3).Font.Bold = True Then
  Worksheets(2).Cells(a, 15).Font.Bold = True
End If

继jpw之后,最好将他的解决方案封装在一个小的子例程中,以节省大量代码行:

Private Sub CommandButton1_Click()
Dim i As Integer
Dim a As Integer
a = 15
For i = 11 To 32
  If Worksheets(1).Cells(i, 3) <> "" Then
    call copValuesAndFormat(i,3,a,15)        
    call copValuesAndFormat(i,5,a,17) 
    call copValuesAndFormat(i,6,a,18) 
    call copValuesAndFormat(i,7,a,19) 
    call copValuesAndFormat(i,8,a,20) 
    call copValuesAndFormat(i,9,a,21) 
    a = a + 1
  End If
Next i
end sub

sub copValuesAndFormat(x1 as integer, y1 as integer, x2 as integer, y2 as integer)
  Worksheets(1).Cells(x1, y1).Copy
  Worksheets(2).Cells(x2, y2).PasteSpecial Paste:=xlPasteFormats
  Worksheets(2).Cells(x2, y2).PasteSpecial Paste:=xlPasteValues
end sub
Private子命令按钮1\u单击()
作为整数的Dim i
将a变暗为整数
a=15
对于i=11到32
如果工作表(1).单元格(i,3)“,则
调用COPValues和Format(i、3、a、15)
调用COPValues和Format(i、5、a、17)
调用COPValues和Format(i、6、a、18)
调用COPValues和Format(i、7、a、19)
调用copValuesAndFormat(i、8、a、20)
调用copValuesAndFormat(i、9、a、21)
a=a+1
如果结束
接下来我
端接头
子copValuesAndFormat(x1为整数,y1为整数,x2为整数,y2为整数)
工作表(1).单元格(x1,y1).复制
工作表(2).单元格(x2,y2).粘贴特殊粘贴:=xlPasteFormats
工作表(2).单元格(x2,y2).粘贴特殊粘贴:=XLPasteValue
端接头

(我当前位置没有Excel,因此请原谅未测试的错误)

Microsoft Excel VBA文档中的此页帮助我:

它提供了一系列选项来定制粘贴方式。例如,您可以xlPasteAll(可能是您正在寻找的内容),或者xlPasteAllUsingSourceTheme,甚至xlPasteAllExceptBorders

在Aaron Blood先生的帮助下发现这一点-简单直接而且有效

Code:
Cells(1, 3).Copy Cells(1, 1)
Cells(1, 1).Value = Cells(1, 3).Value
然而,我有点怀疑你只是提供了一个简单的例子来问这个问题。如果您只想将格式从一个范围复制到另一个范围,它看起来像这样

Code:
Cells(1, 3).Copy
    Cells(1, 1).PasteSpecial (xlPasteFormats)
    Application.CutCopyMode = False

谢谢,这非常接近我想要的结果。但是,不是复制整个格式。有没有办法进一步缩小格式复制。我只想复制字体样式。我有粗体的数字,所以我希望它们在复制的表格中也是粗体的。如果想知道它们是否是布尔值,那么可能只有一行可以工作
工作表(1).单元格(i,3).Font.Bold=工作表(2).单元格(a,15).Font.Bold
@user3849959我修改后的答案为您提供了解决方案吗?如果有的话,你可以考虑把它标记为接受。