Excel vba损坏文件上的验证列表
我做了一些代码,在某个时候我创建了一个数组,然后使用该数组在单元格中输入一个验证列表,所有工作都很好,但是当我关闭工作表,然后打开它时,会出现错误,我必须进行一些调整,以便再次使用宏。 我在网上读了一些技巧,简单的方法是以二进制模式保存工作表,xlsb,错误会发生,但工作表是可用的,您只需重新启动宏即可 我想知道的是,有没有办法一劳永逸地解决这个问题 这里是关于错误的屏幕截图 这里是描述 下面是关于列表的代码Excel vba损坏文件上的验证列表,excel,vba,Excel,Vba,我做了一些代码,在某个时候我创建了一个数组,然后使用该数组在单元格中输入一个验证列表,所有工作都很好,但是当我关闭工作表,然后打开它时,会出现错误,我必须进行一些调整,以便再次使用宏。 我在网上读了一些技巧,简单的方法是以二进制模式保存工作表,xlsb,错误会发生,但工作表是可用的,您只需重新启动宏即可 我想知道的是,有没有办法一劳永逸地解决这个问题 这里是关于错误的屏幕截图 这里是描述 下面是关于列表的代码 Sub filtroSwing() Dim mezzi As New Coll
Sub filtroSwing()
Dim mezzi As New Collection
Dim tot As Range
Set tot = Foglio3.Range("a1:a" & Foglio3.Cells(Rows.Count, 1).End(xlUp).Row)
On Error Resume Next
For i = 1 To tot.Rows.Count
mezzi.Add tot.Cells(i, 1).Value, tot.Cells(i, 1).Value
Next i
On Error GoTo 0
Dim lista() As Variant
ReDim lista(1 To mezzi.Count)
Dim temp As String
For i = 1 To mezzi.Count
lista(i) = mezzi(i)
Next i
'ordina
For i = 1 To mezzi.Count - 1
For j = i + 1 To mezzi.Count
If lista(i) > lista(j) Then
temp = lista(i)
lista(i) = lista(j)
lista(j) = temp
End If
Next j
Next i
Foglio7.Range("f1").Validation.Delete
Foglio7.Range("f1").Validation.Add xlValidateList, Formula1:=Join(lista, ",")
Foglio6.Range("u22").Validation.Delete
Foglio6.Range("u22").Validation.Add xlValidateList,Formula1:=Join(lista, ",")
end sub
提前谢谢
Cristiano如果Join(lista,“,”)
>超过255个字符,您也会遇到问题
我建议:
- 创建已排序的
,但作为二维数组,例如lista
lista(1到mezzi.count,1到1)
- 将
写入隐藏工作表上的某个区域。lista
myRange=lista
- 然后
.Formula1=myRange
Dim mezzi as Collection:Set mezzi=New Collection
有关于第二种方法优点的文章。为了避免将列表保存在工作表上,您可以尝试以下操作:在保存之前将此代码放在“this工作簿”模块私有子工作簿中(ByVal SaveAsUI为布尔值,Cancel为布尔值)Foglio7.Range(“f1”).Validation.Delete Foglio6.Range(“u22”).Validation.Delete End Sub
和工作表模块专用子工作表中的此代码\u SelectionChange(ByVal Target为Range)如果不相交(Selection,Range(“f1”))没有什么可以称之为filtroSwing End Sub
@CristianoMorresi太棒了!维罗纳干杯