Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-将特定标题从图纸复制到其他图纸_Excel_Vba - Fatal编程技术网

Excel VBA-将特定标题从图纸复制到其他图纸

Excel VBA-将特定标题从图纸复制到其他图纸,excel,vba,Excel,Vba,我尝试复制具有以下单元格且值为“必填”的标题,但我的宏在第一个单元格处停止。 姓名电话号码无地点 强制性 Dim i As Long, j As Long, Lastrow1 As Long, Lastcol1 As Long Dim mandatory As String 'Lastrow1 = Sheets("sheet3").Range("A" & Rows.Count).End(xlUp).Row Lastcol1 = Sheets("sheet3").Cells(1 &a

我尝试复制具有以下单元格且值为“必填”的标题,但我的宏在第一个单元格处停止。 姓名电话号码无地点 强制性

  Dim i As Long, j As Long, Lastrow1 As Long, Lastcol1 As Long
Dim mandatory As String

'Lastrow1 = Sheets("sheet3").Range("A" & Rows.Count).End(xlUp).Row
Lastcol1 = Sheets("sheet3").Cells(1 & Columns.Count).End(xlToLeft).Column
For i = 1 To Lastcol1

Sheets("sheet4").Activate
Lastcol2 = Sheets("sheet4").Cells(1 & Columns.Count).End(xlToLeft).Column
For j = 1 To Lastcol2

If Sheets("sheet3").Cells(2, i).Value = "mandatory" Then
Sheets("sheet3").Activate
Sheets("sheet3").Cells(i, "A").Copy
Sheets("sheet4").Activate
Sheets("sheet4").Cells(j, "A").Select
ActiveSheet.Paste
End If

Next j

Application.CutCopyMode = False
Next i
Sheets("sheet3").Activate
Sheets("sheet3").Range("A1").Select


End Sub

除了上述注释中所述的内容外,您还可以通过查找结尾的空单元格将j设置为列计数为0

使用以下命令:

Dim i As Long, j As Long, Lastrow1 As Long, Lastcol1 As Long

Lastcol1 = Sheets("sheet3").Cells(1 , Columns.count).End(xlToLeft).Column
For i = 1 To Lastcol1
    j = Sheets("sheet4").Cells(1 , Columns.count).End(xlToLeft).Offset(, 1).Column
    if j = 2 and Sheets("sheet4").Cells(1,j-1).value ="" then j=1
    If ucase(Sheets("sheet3").Cells(2, i).Value) = "MANDATORY" Then
        Sheets("sheet3").Cells(1, i).Copy Sheets("sheet4").Cells(1,j)
    End If
    Application.CutCopyMode = False
Next i
Sheets("sheet3").Range("A1").Select
通过一个单元格一个单元格地进行,而不是复制,可以使新单元格的值等于旧单元格的值

Sheets("sheet4").Cells(1,j).value = Sheets("sheet3").Cells(1, i).value

单元格(1,Columns.Count)
应该是
单元格(1,Columns.Count)
。此外,您可能还想了解如何不使用
。激活
。这会减慢进程。@ScottCraner我认为它工作得更好,但它将sheet3中最后一个强制页眉放在sheet4中的单元格A1中,我认为宏只将页眉保存在第一个单元格中。所有要复制的页眉都保存在第一行或“A”列中?它们是从A1到F1的,其中A、B、D、E是强制
页(“sheet3”).Cells(i,“A”).Copy
告诉它要复制的所有单元格都在第i行的“A”列中<代码>工作表(“sheet3”)。单元格(1,i)。Copy
将穿过与if语句匹配的第一行。谢谢,它起作用了,但是粘贴的标题从B开始column@java2dev是的,我忘了换第一个。我已经修好了code@java2dev如果它回答了您的问题,请将其标记为正确。非常感谢您的帮助