Excel vba损坏文件上的验证列表

Excel vba损坏文件上的验证列表,excel,vba,Excel,Vba,我做了一些代码,在某个时候我创建了一个数组,然后使用该数组在单元格中输入一个验证列表,所有工作都很好,但是当我关闭工作表,然后打开它时,会出现错误,我必须进行一些调整,以便再次使用宏。 我在网上读了一些技巧,简单的方法是以二进制模式保存工作表,xlsb,错误会发生,但工作表是可用的,您只需重新启动宏即可 我想知道的是,有没有办法一劳永逸地解决这个问题 这里是关于错误的屏幕截图 这里是描述 下面是关于列表的代码 Sub filtroSwing() Dim mezzi As New Coll

我做了一些代码,在某个时候我创建了一个数组,然后使用该数组在单元格中输入一个验证列表,所有工作都很好,但是当我关闭工作表,然后打开它时,会出现错误,我必须进行一些调整,以便再次使用宏。 我在网上读了一些技巧,简单的方法是以二进制模式保存工作表,xlsb,错误会发生,但工作表是可用的,您只需重新启动宏即可

我想知道的是,有没有办法一劳永逸地解决这个问题

这里是关于错误的屏幕截图

这里是描述

下面是关于列表的代码

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作为新的集合,您可以将其写成两行:
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太棒了!维罗纳干杯