我想在这里解释问题。
我在计算机上的excel vba中编写了一个代码,上面装有excel 2010,然后将相同的代码复制到了另一台具有2013的计算机上。我想指出的是,我检查了我复制的文件,并进行了更改相应的路径。 基本上,我的代码是在一个名为“ FP发票”的工作簿中创建的用户窗体,该工作表从另一个名为“ “客户列表” ”的工作簿中获取数据。
初始化用户表单时,它将打开工作簿“客户列表” 并且还会将组合框行源分配给一个名为“ CustomerName” 的命名范围。
代码如下...当组合框值更改时,它应该从工作簿(客户列表)中获取数据,并将其填写在用户窗体的两个文本框中。
以下是代码:
Private Sub UserForm_Initialize()
'opening the workbook "Customers List"
Workbooks.Open Filename:="C:\Users\Watex\Desktop\Experiment Invoice\Customers 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是我在工作簿(“客户列表”)中命名的动态范围,该范围的右边有客户的“地址”和“ ID”之类的值 然后我让textbox1&textbox2充满了客户的地址和ID 取决于客户名,即组合框的值。
我遇到的问题是“ 下标超出范围”,当我按debug时,以下代码突出显示:
lastrow = Workbooks("Customers List").Worksheets("Sheet1").Cells(Rows.count, "c").End(xlUp).Row
我已经检查了工作簿,工作表和路径的名称,所有内容都是正确的,我想指出的是,当我尝试更改组合框的值时会发生此错误。组合框已采用范围的值。但是由于某种原因,该代码无法正常工作。 我已经尝试删除该变量并输入一个数字,例如x = 1到80 而且有效。
抱歉,您花了太多时间,我是VBA的初学者。我也为我英语不佳表示歉意。
答案 0 :(得分:0)
您必须在名称中添加扩展名,因此将行更改为
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:\Users\Watex\Desktop\Experiment Invoice\Customers List.xlsx")
...
End Sub
Private Sub ComboBox1_Change()
...
lastrow = wb.Worksheets("Sheet1").Cells(Rows.count, "c").End(xlUp).Row
...
end sub