Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
仅复制可见图纸中的单元格,并粘贴到下一个自由列VBA中_Vba_Excel - Fatal编程技术网

仅复制可见图纸中的单元格,并粘贴到下一个自由列VBA中

仅复制可见图纸中的单元格,并粘贴到下一个自由列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,

我有一个VBA代码,当前正在运行,它正在从所有工作表中复制单元格(C2:C3),并粘贴到“主”工作表中。我的问题是,我希望它只复制可见的工作表,因为我的一些隐藏工作表在运行我的工作表时有不同的数据。我也有一个问题,它粘贴在下一行,我希望它粘贴在下一列,但无法弄清楚:/

 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