将一个代码从excel 2010复制到excel 2013,但它不起作用



我想在这里解释一下这个问题。

我在我的电脑上用excel vba写了一段代码,上面有excel 2010,然后我把同样的代码复制到另一台有2013的电脑上。我想指出的是,我检查了我复制的文件,并相应地更改了路径。基本上,我的代码是一个Userform,它是在一个名为"FP Invoice"的工作簿中生成的,它从另一个称为"客户列表">的工作簿中获取数据。

当用户表单初始化时,它将打开工作簿"客户列表"它还将向一个名为"CustomerName">的命名范围分配一个组合框行源。

代码如下。。。当组合框值更改时,它应该从工作簿(客户列表(中获取数据,并将其填充到用户表单中的两个文本框中。

这是代码:

Private Sub UserForm_Initialize()
'opening the workbook "Customers List"
Workbooks.Open Filename:="C:UsersWatexDesktopExperiment InvoiceCustomers List.xlsx"
'Defining ComboBox rowSource
Me.ComboBox1.RowSource = "'Customers List.xlsx'!CustomerName"
End Sub
'Combobox Changes 
Private Sub ComboBox1_Change()
Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Dim x As Long
Dim lastrow As Long
'I declare a variable named lastrow to get the last row in the range
lastrow = Workbooks("Customers List").Worksheets("Sheet1").Cells(Rows.count, "c").End(xlUp).Row

For x = 1 To lastrow

Select Case Me.ComboBox1
Case [CustomerName].Cells(x, 1)
[CustomerName].Cells(x, 1).Activate
Me.TextBox1.Value = ActiveCell.Offset(0, 1)
Me.TextBox2.Value = ActiveCell.Offset(0, 2)
End Select
Next x
End Sub

CustomerName是我在工作簿("客户列表"(中命名的一个动态范围。在该范围的右侧,有客户的"地址"one_answers"ID"等值那么我有文本框1&用地址&客户ID这取决于组合框的值即客户名称。

我遇到的问题是">下标超出范围",当我按下debug时,以下代码会突出显示:

lastrow = Workbooks("Customers List").Worksheets("Sheet1").Cells(Rows.count, "c").End(xlUp).Row

我已经检查了工作簿、工作表和路径的名称,所有内容都是正确的,我想指出的是,当我试图更改组合框的值时会出现此错误。combobox已经获取了范围的值。但由于某种原因,代码无法工作。我已经尝试删除变量,并输入一个数字,例如x=1到80它奏效了。

很抱歉占用了你太多时间,我是VBA的初学者。我也为我英语不好而道歉。

您必须将扩展名添加到名称中,因此将行更改为

lastrow = Workbooks("Customers List.xlsx").Worksheets("Sheet1").Cells(Rows.count, "c").End(xlUp).Row

但早期版本的Excel已经是这样了,所以我怀疑这段代码是否有效。

但是,更好的解决方案是在打开工作簿时将其分配给一个变量,并在访问工作簿时使用该变量。

Dim wb as workbook
Private Sub UserForm_Initialize()
'opening the workbook "Customers List"
set wb = Workbooks.Open("C:UsersWatexDesktopExperiment InvoiceCustomers List.xlsx")
...
End Sub
Private Sub ComboBox1_Change()
...
lastrow = wb.Worksheets("Sheet1").Cells(Rows.count, "c").End(xlUp).Row
...
end sub

最新更新