我正在用VBA编写我的第一个脚本,我很难将输入到单元格中的值分配给String变量,我使用Message Box来测试问题所在,它显示我在右边工作簿和正确的工作表,但然后显示“A1”中的值的空白,即使我有一个文本值,并确保我保存工作簿,我有以下内容:
Sub copyworksheet()
Dim sourceWorkbook As String
Dim destinationWorkbook As String
Dim folderName As String
destinationWorkbook = ActiveWorkbook.Name
Sheets(1).Activate
MsgBox Range("A1").Value ' Shows blank when debugging
folderName = Range("A1").Value
MsgBox "Here is " & folderName ' Shows "Here is " when debugging
End Sub
**作为补充说明,A1单元格包含02Nov,我尝试更改此单元格的格式并且没有解决问题,目前单元格格式为Text
答案 0 :(得分:0)
我认为这应该可以解决问题:
Sub copyworksheet()
Dim sourceWorkbook As String
Dim destinationWorkbook As String
Dim folderName As String
destinationWorkbook = ActiveWorkbook.Name
MsgBox Sheets(1).Range("A1").Value 'reference the Sheet absolutely when using Range
folderName = Sheets(1).Range("A1").Value
MsgBox "Here is " & folderName
End Sub
答案 1 :(得分:0)
替代方法是使用Cells
。
MsgBox Cells(1, 1).Value
folderName = Cells(1, 1).Value
答案 2 :(得分:0)
Sheets(1)
指的是活动工作簿中的第一个选项卡。该选项卡可以是工作表,代码表或图表。
最好使用WorkSheets()
来引用工作表。为了确保始终获得正确的工作表,无论订单如何,请使用名称:
WorkSheets("Sheet1")
最好的方法是使用CodeName
。这是用户无法更改的工作表的名称。它可以在VBA的表单列表中找到:
()
之前的部分是Codename
。因此Worksheets("Sheet1")
代码名称为Sheet1
。使用代码名称,我们只需输入代码即可引用该表:
Sheet1
用户无法轻易更改,因为工作表的名称可以。无论工作表位置和工作表名称如何,这都将始终引用正确的工作表。
下一步:
不要使用.Activate
或.Select
他们只是放慢代码速度。只需使用正确的工作表引用附加范围:
Worksheets("Sheet1").Range("A1")
或更好地使用CodeName
:
Sheet1.Range("A1")