如何将 VBA 中的变量设置为等于工作簿的标题?我如何允许它根据它引用的单元格进行更改?
How do I set a variable in VBA to equal the title of a workbook? And how do I allow it change based on the cell it references?
我试图让一个单元格 (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
我试图让一个单元格 (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