代码之家  ›  专栏  ›  技术社区  ›  GrBr

VBA:动态范围引用中的类型不匹配

  •  0
  • GrBr  · 技术社区  · 2 年前

    我对VBA非常熟悉,并且已经在谷歌上搜索到了这一点。这是一次很棒的学习经历,非常感谢你们所有优秀的人。

    我试图让我的宏根据数据输入表中的名称在表中查找一行,然后查找该行中第一个打开的单元格,最后将数据输入表的日期复制到该单元格中。

    到目前为止,我的代码将选择正确的行和定义的行中的第一个空单元格,但我无法同时执行这两项操作而不返回错误。它为cl行返回一个“类型不匹配”错误:

     Sub TestModule2()
     
     Dim sh As Worksheet
     Dim rw As Object
     Dim clm As Object
     Dim cl As Object
     
     Set sh = ThisWorkbook.Sheets("database")
     Set rw = sh.Range("A:A").Find(ThisWorkbook.Sheets("data input").Listobjects("Table1").Range(2, 1).Value)
     Set clm = sh.Range("Table35").Rows.Find(What:="", LookIn:=xlValues, LookAt:=xlWhole)
     Set cl = sh.Listobjects("Table35").Range(rw, clm)
     
     cl.Select
     
     End Sub
    

    我正在使用cl.Select进行测试,下一个挑战是找出正确的方法: .value=本工作簿。表格(“数据输入”)。范围(“B1”)

    我已经尝试更改rw、cl和clm的变量;使用listObjects。ListRows;保存/关闭/打开以尝试强制重置缓存;还有无数其他的东西。我已经成功地分别运行了rw和clm行,但它只是一起生成不同的错误。

    在这一点上,我没有VBA如何工作的基本知识来完全理解这个问题。如有任何协助,我们将不胜感激。

    1 回复  |  直到 2 年前
        1
  •  1
  •   taller    2 年前
    • rw 是范围对象。
    • rw.EntireRow sh.Rows(rw.Row) 是单元格的行范围对象 rw .
    • 始终使用 LookIn:=..., LookAt:=... 中的参数 Find 条款
    Sub TestModule2()
        Dim sh As Worksheet
        Dim rw As Range
        Dim clm As Range
        Dim cl As Range
        Set sh = ThisWorkbook.Sheets("database")
        Set rw = sh.Range("A:A").Find(ThisWorkbook.Sheets("data input").ListObjects("Table1").Range(2, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
        If rw Is Nothing Then Exit Sub
        Set clm = rw.EntireRow.Find(What:="", LookIn:=xlValues, LookAt:=xlWhole)
        If clm Is Nothing Then Exit Sub
        clm.Value = ThisWorkbook.Sheets("data input").Range("B1").Value
    End Sub