【原创】VBA(实验25)做一个表格,每次关闭前检查某些特殊列是否前后有空格,报警哪儿错了,自动删空格。

 

触发实现

报警哪儿错了,

自动删前后空格。

 

处理内容 sheet range
要查前后空格的部分1 sheet1 a:a
要查前后空格的部分1 sheet2 a1:b14
     
     
     
     
     
     
index1
index2 
index3
index4   
index5
index6  
index7
index8
index9
index10   
index11
index12

 

key1 value1  
key2   value2
key3 value3 
key4  value4
key5 value5      
key6     value6
key7 value7
key8 value8
key9 value9
key10 value10
key11 value11
key12 value12
key13 value13 
key14 value14

 

第一次错的

Private Sub Workbook_Open()
MsgBox "关闭前会查指定列的前后空格!"

End Sub

 


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim a As Object
Dim arr1()

For Each i In Sheets("range").Range("b:b")
   arr1(i) = Sheets(Range("b" & i)).Range("c" & i)
Next i


For Each i In arr1()
   For Each j In arr1(i).Value
       Cells().Value = Application.WorksheetFunction.Trim(Cells().Value)
   Next j
Next i
   


End Sub
 

 

 

第2次错的

Sub test11()
'告知,报错记录,提示,选择框,自动去除等
'还需要指定哪些列需要去空格

Dim arr1 As Object
Set arr1 = Sheets("range").Cells(1, 3).CurrentRegion
redim arr1(1 to sheets("range").cells(65535,3)).xlup , 1 to sheets("range").cells(65535,4)).xlup)

For i = 2 To UBound(arr1(1))
    For j = 1 To Cells(65535, 1).End(xlUp)
       Cells(j, 1).Value = Application.WorksheetFunction.Trim(Cells(j, 1).Value)
    Next j

Next i

End Sub

 

第3次错的


Sub test11()
'告知,报错记录,提示,选择框,自动去除等
'还需要指定哪些列需要去空格

Dim arr1 As Variant      '不能是object,也不能是string
Set arr1 = Sheets("range").Cells(1, 3).CurrentRegion


a = Cells(1000, 3).End(xlUp).Row           '一般也不会超过1000的数据,超了就用65535把或另外一个方法
b = Cells(1000, 4).End(xlUp).Row
' ReDim arr1(1 To a, 1 To b) As Integer 和 set重复定义了?

'检查ab
'Debug.Print a & vbCrLf
'Debug.Print b

If a <> b Then
   MsgBox ("输入的表名和范围没有一一对应,请修改数据")
   Exit Sub
End If


'检查数组
'For i = 1 To a
'  For j = 1 To b
'     Debug.Print arr1(i, j)
'  Next j
'Next i

For i = 2 To a
    For j = 1 To Sheets(arr1(i, 3)).Range(arr1(i, 4)).Rows.Count
       Sheets(arr1(i, 3)).Range(arr1(i, 4)).Cells(j, 1).Value = Application.WorksheetFunction.Trim(Cells(j, 1).Value)
    Next j
Next i

End Sub
 

 

 

------

Sub test11()
'告知,报错记录,提示,选择框,自动去除等
'还需要指定哪些列需要去空格

Dim arr1 As Variant  '不能是object,也不能是string
Set arr1 = Sheets("range").Cells(1, 3).CurrentRegion


a = Cells(1000, 3).End(xlUp).Row   '一般也不会超过1000的数据,超了就用65535把或rows.count
b = Cells(1000, 4).End(xlUp).Row
' ReDim arr1(1 To a, 1 To b) As Integer 和 set重复定义了?

'检查ab
'Debug.Print a & vbCrLf
'Debug.Print b

If a <> b Then
   MsgBox ("输入的表名和范围没有一一对应,请修改数据")
   Exit Sub
End If


'检查数组
'For i = 1 To a
'  For j = 1 To b
'   Debug.Print arr1(i, j)
'  Next j
'Next i

Debug.Print arr1(2, 1)
Debug.Print arr1(2, 2)

'aaa="sheet1"
'debug.print sheets(aaa).name

'rem 直接写 bbb=str(arr1(2,1))  debug.print bbb VBA直接卡死报错

Rem 只有这个可以写法可以
'Debug.Print arr1(2, 1) & "." & arr1(2, 2)


'无论arr1(2,1) 加不加引号,都无法正确使用?
'Debug.Print Sheets(arr1(2, 1)).Name
'Debug.Print Sheets("arr1(2, 1)").Range("arr1(2, 2)").Rows.Count
Rem Debug.Print Sheets(arr1(2, 3)).Range(arr1(2, 4)).Rows.Count 错误,数组引用不是表格引用,index超了


For i = 2 To a     '数组index默认0开始吧?EXCEL的二维数组都从1开始?维度默认1开始
   For j = 1 To Sheets(arr1(i, 3)).Range(arr1(i, 4)).Rows.Count
          'Debug.Print Sheets(arr1(i, 3)).Range(arr1(i, 4)).Rows.Count
         Sheets(arr1(i, 3)).Range(arr1(i, 4)).Cells(j, 1).Value = Application.WorksheetFunction.Trim(Sheets(arr1(i, 3)).Range(arr1(i, 4)).Cells(j, 1).Value)
   Next j
Next i

End Sub
 

你可能感兴趣的:(VBA)