ThisWorkbook.Worksheets("Sheet1").Controls("Button1") 这里找不到会返回什么
时间: 2024-12-02 12:22:20 浏览: 6
如果在 `ThisWorkbook.Worksheets("Sheet1").Controls("Button1")` 中找不到指定名称的控件,VBA将会抛出一个 `Object Doesn't Support This Property or Method` 或者更具体的 `Run-time Error 424` 错误,这意味着它无法找到你所请求的对象。这是因为 `.Controls` 属性通常只包含当前工作表上直接可见的控件,比如形状、按钮、文本框等,如果控件不在当前工作表上,或者控件名称输入有误,就会触发这个错误。
为了避免运行时错误,建议在尝试访问之前检查控件是否确实存在,你可以先用 `IsInArray` 方法确认:
```vba
If ThisWorkbook.Worksheets("Sheet1").Controls.index Of ("Button1") > -1 Then
Dim btn As Control
Set btn = ThisWorkbook.Worksheets("Sheet1").Controls("Button1")
' ...其他操作...
Else
MsgBox "Button1 not found on Sheet1"
End If
```
这样可以在找不到控件时给出提示,而不是直接导致程序崩溃。
相关问题
ThisWorkbook.Worksheets选取所有工作簿
在VBA(Visual Basic for Applications)中,`ThisWorkbook.Worksheets` 是指当前正在运行宏的工作簿(即 `ThisWorkbook` 对象)下的所有工作表集合。如果直接引用 `Worksheets` 属性,它会返回当前工作簿内所有的worksheet,而不是所有打开的工作簿。
如果你想要选择所有打开的工作簿中的所有工作表,你需要对每个打开的工作簿都执行类似的操作,例如:
```vba
Sub SelectSheetsOfAllOpenBooks()
Dim allWorkbooks As WorkbookCollection
Set allWorkbooks = Application.Workbooks.OpenWorkbooks ' 获取所有打开的工作簿
Dim currentBook As Workbook
For Each currentBook In allWorkbooks
If currentBook Is Not Nothing Then ' 检查工作簿是否为空
For Each ws In currentBook.Worksheets
ws.Select ' 选中该工作簿内的每个工作表
Next ws
End If
Next currentBook
End Sub
```
这个宏会循环遍历所有打开的工作簿,对每本工作簿中的所有工作表进行选择操作。
Cells(2, 11).Value ="Check ok" Cells(2, 12).Value ="Check " Cells(2, 13).Value ="Check" If ThisWorkbook.Worksheets("check").Cells(2, 11).Value <> "Check ok" And ThisWorkbook.Worksheets("check").Cells(2, 12).Value <> "Check ok" And ThisWorkbook.Wor 這段代碼為什麼判斷出來的結果不對
根据您提供的代码,条件判断部分存在问题。根据您提供的情况,`Cells(2, 11).Value`的值为"Check ok",这意味着第一个条件将为假,不满足判断条件。因此,整个条件判断表达式的结果将为假。
您所期望的判断结果应该是根据单元格的值是否等于"Check ok"来确定。如果您希望只有在这三个单元格的值都不等于"Check ok"时才满足条件,可以使用逻辑运算符`And`来组合这三个条件:
```vb
If Cells(2, 11).Value <> "Check ok" And Cells(2, 12).Value <> "Check ok" And Cells(2, 13).Value <> "Check ok" Then
' 执行条件满足时的代码
End If
```
如果以上代码的判断结果仍然不符合您的预期,请提供更多相关代码或上下文信息,以便我更好地帮助您解决问题。
阅读全文