仅复制可见图纸中的单元格,并粘贴到下一个自由列VBA中
我有一个VBA代码,当前正在运行,它正在从所有工作表中复制单元格(C2:C3),并粘贴到“主”工作表中。我的问题是,我希望它只复制可见的工作表,因为我的一些隐藏工作表在运行我的工作表时有不同的数据。我也有一个问题,它粘贴在下一行,我希望它粘贴在下一列,但无法弄清楚:/仅复制可见图纸中的单元格,并粘贴到下一个自由列VBA中,vba,excel,Vba,Excel,我有一个VBA代码,当前正在运行,它正在从所有工作表中复制单元格(C2:C3),并粘贴到“主”工作表中。我的问题是,我希望它只复制可见的工作表,因为我的一些隐藏工作表在运行我的工作表时有不同的数据。我也有一个问题,它粘贴在下一行,我希望它粘贴在下一列,但无法弄清楚:/ Option Explicit Sub Sample() Dim wsInput As Worksheet, wsOutput As Worksheet Dim rng As Range Dim LRowO As Long,
Option Explicit
Sub Sample()
Dim wsInput As Worksheet, wsOutput As Worksheet
Dim rng As Range
Dim LRowO As Long, LRowI As Long
Set wsOutput = ThisWorkbook.Sheets("Master")
For Each wsInput In ThisWorkbook.Worksheets
If wsInput.Name <> wsOutput.Name Then
With wsInput
Set rng = .Range("C2:C3")
rng.Copy
With wsOutput
LRowO = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("A" & LRowO).PasteSpecial xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
End With
End If
Next wsInput
Exit Sub
End Sub
选项显式
子样本()
将wsInput设置为工作表,将wsOutput设置为工作表
变暗rng As范围
暗淡的LRowO一样长,LRowI一样长
设置wsOutput=ThisWorkbook.Sheets(“主控”)
对于此工作簿中的每个wsInput。工作表
如果wsInput.Name wsOutput.Name,则
使用wsInput
设置rng=.范围(“C2:C3”)
收到
具有wsOutput
LRowO=.Range(“A”&.Rows.Count).End(xlUp).Row+1
.Range(“A”&LRowO).paste特殊XLPaste值_
操作:=xlNone,skipblank:=False,转置:=False
以
以
如果结束
下一个wsInput
出口接头
端接头
检查
worksheets(wsInput).visible
财产。例如,改变
If wsInput.Name<>wsOutput.name Then
如果wsInput.NamewsOutput.name,则
到
如果wsInput.NamewsOutput.name和工作表(wsInput).可见,则
这将仅使用可见的工作表
更多信息请点击此处
我认为我不完全理解你问题的第二部分。你应该能够使用类似的方法来检查你的工作表是否可见/隐藏
If wsInput.Visible = True Then
' Do copy here
或
然后,为了粘贴到上一列中,可以使用“偏移”特性
ActiveCell.Offset(rowOffset, columnOffset).Activate
将行偏移量
和列偏移量
更改为直接到达单元格所需的数字,向右一列。i、 e
ActiveCell.Offset(0, 1).Activate
将当前选择从
A1
更改为B1
听起来您需要检查工作表是否隐藏,并跟踪下一列的内容,并在每次粘贴时递增。下面是针对这两种情况修改的代码
Option Explicit
Sub Sample()
Dim wsInput As Worksheet, wsOutput As Worksheet
Dim rng As Range
LRowI As Long
Dim nextCol as Long
Set wsOutput = ThisWorkbook.Sheets("Master")
nextCol = 1
For Each wsInput In ThisWorkbook.Worksheets
If wsInput.Name <> wsOutput.Name and wsInput.Visible = True Then
With wsInput
Set rng = .Range("C2:C3")
rng.Copy
With wsOutput
.Cells(1, nextCol).PasteSpecial xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
nextCol = nextCol + 1
End With
End With
End If
Next wsInput
Exit Sub
End Sub
选项显式
子样本()
将wsInput设置为工作表,将wsOutput设置为工作表
变暗rng As范围
洛维只要
Dim nextCol尽可能长
设置wsOutput=ThisWorkbook.Sheets(“主控”)
nextCol=1
对于此工作簿中的每个wsInput。工作表
如果wsInput.Name wsOutput.Name和wsInput.Visible=True,则
使用wsInput
设置rng=.范围(“C2:C3”)
收到
具有wsOutput
.单元格(1,nextCol).粘贴特殊XLPaste值_
操作:=xlNone,skipblank:=False,转置:=False
nextCol=nextCol+1
以
以
如果结束
下一个wsInput
出口接头
端接头
这看起来更符合我的要求,但我仍然看到:nextCol=1有一个错误,因为我看到一个未定义的变量编译错误:/。哦,试着在其他变量的上面标注它。我已经相应地编辑了我的答案。太棒了。现在,它正在将其粘贴到母版纸中,但它正在将下一个答案粘贴到最后一列的上方以及最后一行的下方。我试图让它们直接粘贴到之前的一个旁边。我会删除+1吗?PasteSpecial
可能需要一个范围对象,所以可以尝试.range(.Cells(1,nextCol),.Cells(lRowO,nextCol)。PasteSpecial…
太好了。很高兴我能帮上忙。我确实从这个网站中获益匪浅。
ActiveCell.Offset(0, 1).Activate
Option Explicit
Sub Sample()
Dim wsInput As Worksheet, wsOutput As Worksheet
Dim rng As Range
LRowI As Long
Dim nextCol as Long
Set wsOutput = ThisWorkbook.Sheets("Master")
nextCol = 1
For Each wsInput In ThisWorkbook.Worksheets
If wsInput.Name <> wsOutput.Name and wsInput.Visible = True Then
With wsInput
Set rng = .Range("C2:C3")
rng.Copy
With wsOutput
.Cells(1, nextCol).PasteSpecial xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
nextCol = nextCol + 1
End With
End With
End If
Next wsInput
Exit Sub
End Sub