Mad*_*sen 18 variables excel vba
我知道这可能是一个微不足道的问题,但我似乎无法宣称一个workbook或worksheet一个变量VBA.我有以下代码,但我无法弄清楚我做错了什么,应该是直截了当的.通常我没有任何问题声明变量等问题Dim i As Integer.
sub kl() 
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ActiveWorkbook
    Set ws = Sheet("name")
    wb.ws.Select
End Sub
当我运行上面的代码时,我收到一个type missmatch错误.
Gar*_*ent 17
使用Sheets而不是Sheet并按顺序激活它们:
Sub kl()
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ActiveWorkbook
    Set ws = Sheets("Sheet1")
    wb.Activate
    ws.Select
End Sub
如果要检索的工作表在编译时存在ThisWorkbook(即包含您正在查看的VBA代码的工作簿),那么引用该Worksheet对象的最简单且最一致的可靠方法是使用其代码名称:
Debug.Print Sheet1.Range("A1").Value
您可以通过更改属性工具窗口(F4)中的属性,将代码名称设置为您需要的任何内容(只要它是有效的VBA标识符),与其"选项卡名称"(用户可以随时修改)无关.:(Name)

该Name属性指的是用户可以随意改变的"选项卡名称"; 该(Name)属性引用工作表的代码名称,用户无法在不访问Visual Basic编辑器的情况下进行更改.
VBA使用此代码名称自动声明一个全局范围的Worksheet对象变量,您的代码可以在任何地方使用它来免费引用该表.
换句话说,如果工作表ThisWorkbook在编译时存在,则永远不需要为它声明变量 - 变量已经存在!
如果工作表是在运行时创建的(内部ThisWorkbook或非内部),则需要声明并为其分配Worksheet变量.
使用对象的Worksheets属性Workbook来检索它:
Dim wb As Workbook
Set wb = Application.Workbooks.Open(path)
Dim ws As Worksheet
Set ws = wb.Worksheets(nameOrIndex)
除非工作簿结构受到保护,否则用户可以轻松修改工作表的名称和索引(无论是否意外).如果工作簿不受保护,您根本无法假设名称或索引单独为您提供您所需的特定工作表 - 验证工作表的格式总是一个好主意(例如,验证单元格A1是否包含某些特定文本,或者有一个具有特定名称的表,其中包含一些特定的列标题).
使用该Sheets集合包含Worksheet对象,但也可以包含Chart实例,以及六个不是工作表的传统工作表类型.Worksheet从任何Sheets(nameOrIndex)返回值中分配引用,都会因此导致类型不匹配运行时错误.
不出线的Worksheets集合是一个隐含的ActiveWorkbook参考 -这意味着Worksheets集合无论从任何工作簿是活跃在指令执行的瞬间拉动.这样的隐式引用会使代码变得脆弱且容易出错,特别是如果用户可以在代码运行时导航并与Excel UI交互.
除非您的意思是激活特定工作表,否则您永远不需要打电话ws.Activate来完成工作表的99%.只需使用您的ws变量.
尝试更改变量的名称,因为有时它与其他模块/子模块发生冲突
 Dim Workbk As Workbook
 Dim Worksh As Worksheet
但也尝试一下
 Set ws = wb.Sheets("name")
我不记得它是否适用于Sheet
| 归档时间: | 
 | 
| 查看次数: | 293465 次 | 
| 最近记录: |