Range.Value不适用于将单元格内容分配给VBA中的变量

时间:2017-12-06 14:50:36

标签: excel vba excel-vba excel-2016

我正在用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

3 个答案:

答案 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的表单列表中找到:

enter image description here

()之前的部分是Codename。因此Worksheets("Sheet1")代码名称为Sheet1。使用代码名称,我们只需输入代码即可引用该表:

Sheet1

用户无法轻易更改,因为工作表的名称可以。无论工作表位置和工作表名称如何,这都将始终引用正确的工作表。

下一步:

不要使用.Activate.Select他们只是放慢代码速度。只需使用正确的工作表引用附加范围:

Worksheets("Sheet1").Range("A1")

或更好地使用CodeName

Sheet1.Range("A1")