excel - 如何在 VBA 中将变量设置为等于工作簿的标题?以及如何允许它根据它引用的单元格进行更改?
问题描述
我试图让一个单元格(A37)等于 VBA 中的一个变量,并让该变量更改它基于单元格 A37 引用的工作簿。在 A37 中,我计划更改工作簿的名称以更改它从中提取数据的工作簿。
单元格 A37 将具有我想要输出的工作簿的名称,而单元格 A38 将具有我想要输出的工作表的名称(在单元格 A37 的工作簿内)。
这是我编写的代码,但是当我将 OPEXsht 设置为单元格时,我不断收到错误消息。(我是 VBA 编码的新手)
Sub CellName ()
Dim OPEXwbk As String
Dim OPEXsht As String
OPEXsht = Workbooks("VBA TRIAL.xlsb").Sheets("Sheet2").Range("A38")
OPEXwbk = Workbooks("VBA TRIAL.xlsb").Sheets("Sheet2").Range("A37")
Workbooks(OPEXwbk).Sheets(OPEXsht).Range("B22").Copy
Workbooks("VBA TRIAL.xlsb").Sheets("Sheet2").Range("A42").PasteSpecial Paste:=xlValues
End Sub
任何帮助将不胜感激。
解决方案
在流程的每个阶段添加一些错误检查。
Option Explicit
Sub CellName()
' This macro in VBA TRIAL.xlsb
Dim wb As Workbook, ws As Worksheet
Dim sOPEXwbk As String, sOPEXsht As String
Dim msg As String, bOK As Boolean
With ThisWorkbook.Sheets("Sheet2")
sOPEXwbk = .Range("A37") ' book
sOPEXsht = .Range("A38") ' sheet
End With
' check not blank
If Len(sOPEXwbk) = 0 Or Len(sOPEXsht) = 0 Then
MsgBox "No workbook or worksheet configured on Sheet2 A37,A38", vbCritical
Exit Sub
End If
' check workbook open
For Each wb In Workbooks
msg = msg & vbCrLf & wb.Name
If wb.Name = sOPEXwbk Then bOK = True
Next
' workbook not open
If bOK = False Then
MsgBox "'" & sOPEXwbk & "' not in list" & msg, vbCritical, "Workbook not open"
Exit Sub
Else
' check worksheets
msg = ""
bOK = False
For Each ws In Workbooks(sOPEXwbk).Sheets
msg = msg & vbCrLf & ws.Name
If ws.Name = sOPEXsht Then bOK = True
Next
' worksheet not found
If bOK = False Then
MsgBox "'" & sOPEXsht & "' not in list" & msg, vbCritical, "Sheet Not Found"
Exit Sub
Else
' OK
ThisWorkbook.Sheets("Sheet2").Range("A42") = Workbooks(sOPEXwbk).Sheets(sOPEXsht).Range("B22").Value
MsgBox "Copied B22 from " & sOPEXwbk & " Sheet " & sOPEXsht, vbInformation
End If
End If
End Sub
推荐阅读
- java - 预订后显示预订时出现 ArrayIndexOutOfBounds 异常错误 - Java
- java - 来自编译器的未经检查的强制转换警告
- mysql - 在 MariaDB 中对大于 60 GB 的表运行基本的 SQL 查询
- c# - WPF 中 Page 中 Window 的 Activated 事件的等效或最接近的匹配是什么?
- nginx - 有没有办法在 nginx 上添加包含代理服务器名称的响应标头?
- django - Django 在没有 PK 到 FK 关系的遗留表之间一对多
- java - 线程“main”中的异常 java.lang.UnsatisfiedLinkError:proietP.JavatoC.getval(I)I
- express - Lambda 在请求正文中返回标头
- database - 如何在 MongoDB 中的对象数组上按多个条件过滤文档
- botframework - 无法在除 General msbot for teams (nodejs) 之外的其他渠道发送消息