Excel 为什么当我在不同的工作表上时,组合框会加载不同的数据?
我不明白这里发生了什么。。。当我从激活的工作表(1)运行代码时,userform dropbox加载得很好,但是当我切换到激活的工作表(2)时,它认为shhet(1)-第4行是我数据的结尾。。。(这恰好是代码设置为命令按钮的工作表…) 我只是特别吗 这是代码Excel 为什么当我在不同的工作表上时,组合框会加载不同的数据?,excel,vba,list,combobox,userform,Excel,Vba,List,Combobox,Userform,我不明白这里发生了什么。。。当我从激活的工作表(1)运行代码时,userform dropbox加载得很好,但是当我切换到激活的工作表(2)时,它认为shhet(1)-第4行是我数据的结尾。。。(这恰好是代码设置为命令按钮的工作表…) 我只是特别吗 这是代码 Private Sub UserForm_Initialize() 'sets up combobox's PurchUnit.List = Sheets(1).Range("PurchasingSizes" &
Private Sub UserForm_Initialize() 'sets up combobox's
PurchUnit.List = Sheets(1).Range("PurchasingSizes" & Range("K41").End(xlUp).Row).Value
UoM.List = Sheets(1).Range("ConvAbv").Value
End Sub
所以,一天结束时,我需要它来识别我的数据列表,而不依赖于我在哪张表上。另外,如果你能解释为什么它会这样做。。。我被它弄糊涂了 我非常确定,用于构造外部范围的参数的
范围(“K41”)
将使用当前工作表。表达式开头的表(1)
只会影响它显式绑定到的范围,而不是括号内的所有范围
如果您想在第1页上使用K41
,您可能应该使用Sheets(1).Range(“K41”)
。换言之:
PurchUnit.List = Sheets(1).Range("PurchasingSizes" & _
Sheets(1).Range("K41").End(xlUp).Row).Value
' ^^^^^^^^^^
' Added this bit.
我非常确定,用于构造外部范围的参数的
范围(“K41”)
将使用当前工作表。表达式开头的表(1)
只会影响它显式绑定到的范围,而不是括号内的所有范围
如果您想在第1页上使用K41
,您可能应该使用Sheets(1).Range(“K41”)
。换言之:
PurchUnit.List = Sheets(1).Range("PurchasingSizes" & _
Sheets(1).Range("K41").End(xlUp).Row).Value
' ^^^^^^^^^^
' Added this bit.
在每个参考范围内参考表(1),如下所示
Private Sub UserForm_Initialize() 'sets up combobox's
PurchUnit.List = Sheets(1).Range("PurchasingSizes" & sheet(1).Range("K41").End(xlUp).Row).Value
UoM.List = Sheets(1).Range("ConvAbv").Value
End Sub
或者更好
Private Sub UserForm_Initialize() 'sets up combobox's
With Sheets(1)
PurchUnit.List = .Range("PurchasingSizes" & .Range("K41").End(xlUp).Row).Value
UoM.List = .Range("ConvAbv").Value
End with
End Sub
在每个参考范围内参考表(1),如下所示
Private Sub UserForm_Initialize() 'sets up combobox's
PurchUnit.List = Sheets(1).Range("PurchasingSizes" & sheet(1).Range("K41").End(xlUp).Row).Value
UoM.List = Sheets(1).Range("ConvAbv").Value
End Sub
或者更好
Private Sub UserForm_Initialize() 'sets up combobox's
With Sheets(1)
PurchUnit.List = .Range("PurchasingSizes" & .Range("K41").End(xlUp).Row).Value
UoM.List = .Range("ConvAbv").Value
End with
End Sub
正如其他人指出的:
Range()
引用活动工作表。你不想要,所以你需要更好的参考,正如其他答案所指出的,一种方法是在每个
Range()
实例之前添加Sheets(index)
,无论是在行之前添加和Sheets(index)
并在每个Range()之前添加
实例或在其前面添加工作表(索引)
自身
目前,这对您是有效的,但是工作表(索引)
也不安全,尤其是当您不知道引用了什么时。我使用
index
而不是1
的原因是:Sheets(index)
引用ActiveWorkbook的Sheet
对象,该对象位于特定索引处或具有特定名称,比如说Sheets(“sheet1”)
将引用工作簿的第一页,如果您没有更改其名称,并且,最重要的是,索引是可变的,因为每次工作表在工作簿中移动时,索引都会发生变化。
将第二张工作表移动到第一张工作表将导致代码引用不希望被引用的工作表
要解决这个问题,您应该使用工作表的代码名
,它可以在VBE中查看和更改。但是,Codename
不能在运行时更改,这在您或您的用户手动移动工作表或更改其名称时会有很大帮助。这总是偶然发生的
总之,您应该始终使用ThisWorkbook
,它引用运行代码的工作簿,而不是隐含的ActiveWorkbook
在适用的情况下,您应该使用Codename
s的工作表,如果我假设您使用英文Excel版本,并且没有更改Codename
,则如下所示:
Private Sub UserForm_Initialize() 'sets up combobox's
PurchUnit.List = Sheet1.Range("PurchasingSizes" & Sheet1.Range("K41").End(xlUp).Row).Value
UoM.List = Sheet1.Range("ConvAbv").Value
End Sub
要进一步阅读ActiveWorkbook
,ActiveSheet
和Select
,通常我建议使用另一个问题。正如其他人所指出的:Range()
引用活动工作表。
你不想要,所以你需要更好的参考,正如其他答案所指出的,一种方法是在每个Range()
实例之前添加Sheets(index)
,无论是在行之前添加和Sheets(index)
并在每个Range()之前添加
实例或在其前面添加工作表(索引)
自身
目前,这对您是有效的,但是工作表(索引)
也不安全,尤其是当您不知道引用了什么时。
我使用index
而不是1
的原因是:Sheets(index)
引用ActiveWorkbook的Sheet
对象,该对象位于特定索引处或具有特定名称,比如说Sheets(“sheet1”)
将引用工作簿的第一页,如果您没有更改其名称,并且,最重要的是,索引是可变的,因为每次工作表在工作簿中移动时,索引都会发生变化。
将第二张工作表移动到第一张工作表将导致代码引用不希望被引用的工作表
要解决这个问题,您应该使用工作表的代码名
,它可以在VBE中查看和更改。但是,Codename
不能在运行时更改,这在您或您的用户手动移动工作表或更改其名称时会有很大帮助。这总是偶然发生的
总之,您应该始终使用ThisWorkbook
,它引用运行代码的工作簿,而不是隐含的ActiveWorkbook
在适用的情况下,您应该使用Codename
s的工作表,如果我假设您使用英文Excel版本,并且没有更改Codename
,则如下所示:
Private Sub UserForm_Initialize() 'sets up combobox's
PurchUnit.List = Sheet1.Range("PurchasingSizes" & Sheet1.Range("K41").End(xlUp).Row).Value
UoM.List = Sheet1.Range("ConvAbv").Value
End Sub
要进一步阅读ActiveWorkbook
,ActiveSheet
和选择
,通常我建议使用另一个问题。带工作表(1)
>带工作表(1)