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
如何使用vba在excel上选择包含数据的范围_Excel_Vba - Fatal编程技术网

如何使用vba在excel上选择包含数据的范围

如何使用vba在excel上选择包含数据的范围,excel,vba,Excel,Vba,如何修改下面的代码以从任何工作表中选择数据并将其复制到另一个工作表,例如从工作表中选择并复制数据No并将其粘贴到工作表Duo。因为下面的代码只选择activesheet上的数据 Set tbl = ActiveCell.CurrentRegion tbl.Resize(tbl.Rows.Count, tbl.Columns.Count).Select 例如,我有一个代码可以将数据从任何工作表复制到另一个工作表 Worksheets("uno").Range("A5:T5,A7:T56,W5,

如何修改下面的代码以从任何工作表中选择数据并将其复制到另一个工作表,例如从工作表中选择并复制数据No并将其粘贴到工作表Duo。因为下面的代码只选择activesheet上的数据

Set tbl = ActiveCell.CurrentRegion 
tbl.Resize(tbl.Rows.Count, tbl.Columns.Count).Select
例如,我有一个代码可以将数据从任何工作表复制到另一个工作表

Worksheets("uno").Range("A5:T5,A7:T56,W5,Y5,W7:W56,Y7:Y56").Copy _
Worksheets("duo").Range("B4")
但我想复制一个包含数据的区域,忽略空白单元格,因为A5:T5区域并不总是包含所有包含数据的单元格,具体来说,就是这个区域的最后一个单元格,其中的两个或三个,在A7:T56区域也是一样的


我的问题是如何用数据选择一个范围,忽略A7:T56范围内的空白单元格,具体地说,最后一行和最后一列有空白单元格

,对于第一部分,代码只在活动表上选择数据,您只需要激活正确的工作表,例如:工作表No.activate before Execution Set tbl=ActiveCell.CurrentRegion。

我不确定是否正确理解您的意思,但以下是我的想法:

如果不想激活工作表uno,则需要创建对该工作表的引用,以便直接访问该工作表:

Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Set wkb = Excel.Application.Workbooks("<name of your workbook>")
Set wks = wkb.Worksheets("uno")
如果您现在使用以下代码:

wks.Range("<your range>").Copy
您刚刚复制了选定的单元格,现在可以将其粘贴到任何位置

对于避免空单元格的零件:

一般来说,在将相关单元格添加到范围之前,需要创建一种检查相关单元格是否为空的方法

就我个人而言,我会尽量避免复制整个范围。相反,我会: 1在您的范围内逐个循环所有相关单元格 每个单元格2个,检查是否为空 3如果为空,则转到下一个单元格 4如果不是空的,复制该单元格并粘贴到目标工作表 5跳转到下一个相关单元格 6当你到达最后一个单元格之后的单元格时,停止循环

我将使用上面定义的wks对象。 请注意,可以将范围对象视为字符串的集合,因此可以使用For。。。每个循环的下一个循环不保证索引顺序。 这样做应该可以:

Dim rng As Range
Set rng = wks.Range("<your range>")

Dim numOfItems As Integer, itm, i As Integer
numOfItems = rng.Count

For i = 1 To numOfItems

    itm = rng.item(i)

    If itm <> "" Then

        'set value of the corresponding cell in your target worksheet to itm
        '<relevant cell>.Value = itm
    Else
        'do nothing
    End If
Next i

我希望它至少有一点帮助。

是的,但我不想激活工作表uno,我只想复制带有数据的范围,并复制到工作表duo thnx,供您建议