VBA Excel选择命名范围内的一系列单元格

时间:2018-04-19 14:47:21

标签: excel vba excel-vba named-ranges

我有一个命名范围col_9395它是一个完整的列。我想在此命名范围内设置范围。我希望范围从同一列的第3行到第200行开始。这是最好的方法吗?

没有命名范围的原始工作线:

Set rngBlnk = Sheet108.Range("T3:T200").SpecialCells(xlCellTypeBlanks)

这是我试过的没有运气的代码:

Set rngBlnk = Range("col_9395)(3,1):Range("col_9395)(200,1).SpecialCells (xlCellTypeBlanks)

5 个答案:

答案 0 :(得分:1)

你可以用

看到那种逻辑
Option Explicit

Sub test()

Dim colToUse As Long
colToUse = ThisWorkbook.Worksheets("Sheet1").Range("ol_9395").Column

With ThisWorkbook.Worksheets("Sheet1")
Debug.Print .Range(.Cells(3, colToUse), .Cells(200, colToUse)).Address
End With

End Sub

答案 1 :(得分:1)

Sub t()
Dim rng As Range
Set rng = Range("col_9395") ' for easier use

Dim blnkRng As Range
Set blnkRng = Range(Cells(rng.Rows(3).Row, rng.Column), Cells(rng.Rows(200).Row, rng.Column)).SpecialCells(xlCellTypeBlanks)
blnkRng.Select
End Sub

我所做的是将您的命名范围分配给变量(仅为了更容易引用)。然后使用Range()属性,我使用命名范围的3rd200th行设置范围以查找空白单元格。

这个想法是,如果您的命名范围不仅仅是整个列,这将帮助您。它将从您指定的范围中获得相对的第3行和第200行。

答案 2 :(得分:1)

router.register('anything', views.TeamViewSet, base_name='teams')

Option Explicit Public Sub TestMe() Dim rngBlnk As Range Dim firstCell As Range Dim lastCell As Range Set firstCell = [col_9395].Cells(3, 1) Set lastCell = [col_9395].Cells(200, 1) If WorksheetFunction.CountBlank(Range(firstCell, lastCell)) > 0 Then Set rngBlnk = Range(firstCell, lastCell).SpecialCells(xlCellTypeBlanks) End If End Sub 的一个问题并且分配给它们的是,如果没有来自特定类型的单元格,则会抛出错误。

因此,在SpecialCells设置为特殊单元格之前,会检查WorksheetFunction.CountBlank()>0

答案 3 :(得分:1)

可能是错的,但我发现这是最简单的一个:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("richtercloud_jpa-subquery-attribute-join_jar_1.0-SNAPSHOTPU" //persistenceUnitName
);
EntityManager entityManager = entityManagerFactory.createEntityManager();
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Entity0> entity0Root = cq.from(Entity0.class);
Join<Entity0, Entity1> entity0Join = entity0Root.join(Entity0_.entity1,
        JoinType.LEFT);
Root<Entity2> entity2JoinRoot = cq.from(Entity2.class);
    //can only specify a Class here while selecting from a join is
    //possible outside criteria api as well

//        Join<Entity2, Entity3> entity2Join = cq.join(Entity1_.entity2s)
//                .get(Entity1_.entity2s)
//                .join(Entity2_.entity3);

Subquery<Entity2> entity2Subquery = cq.subquery(Entity2.class);
Root<Entity2> entity2SubqueryRoot = entity2Subquery.from(Entity2.class);
entity2Subquery.where(cb.equal(entity2SubqueryRoot.get(Entity2_.entity3), entity3));
cq.where(cb.and(cb.notEqual(entity0Root.get(Entity0_.entity1), cb.nullLiteral(Entity1.class))),
        cb.not(cb.exists(entity2Subquery)));
TypedQuery<Long> criteriaQuery = entityManager.createQuery(cq);
long retValue = criteriaQuery.getSingleResult();

答案 4 :(得分:0)

我知道我参加晚会很晚,但这也许会对某人有所帮助。我偶然发现了一种技术,在这里的所有“范围内”问题中,我都不认为它是一种选择。

我发现您可以直接向VBA请求某个范围的范围。我已经将某些数据格式化为表格,但是我想它可能只是一个命名范围,甚至是一个未命名范围。我正在运行的代码如下:

        With Workbooks(Filename)
            .Worksheets(tabName).Activate
            .Worksheets(tabName).Range("SummaryBand").Range("B2:R2").Copy
            End With

我的表名为SummaryBand,由于上一步的原因,它不一定总是在电子表格上位于相同的绝对位置,但是我希望在SummaryBand中使用一个绝对Range。在此示例中,“ B2:R2”是表格中的绝对位置,表格的左上角单元格为A1。