Vba 运行时错误';1004';

Vba 运行时错误';1004';,vba,runtime-error,Vba,Runtime Error,我是VBA新手。我正在进行一个项目,该项目将验证输入工作表的数据的长度和格式。我将对代码进行扩展,以包括对所有潜在标题(电话号码、地址、后缀等)的验证。但是,我在这一行代码中收到运行时错误1004,“Columns(col).NumberFormat=“0”,在phonenumbers子部分。如果我注释掉这一行,我在下一行收到相同的错误。寻求帮助/解释为什么会发生这种情况以及如何解决 谢谢 Option Explicit Sub DataVerification() Dim i As L

我是VBA新手。我正在进行一个项目,该项目将验证输入工作表的数据的长度和格式。我将对代码进行扩展,以包括对所有潜在标题(电话号码、地址、后缀等)的验证。但是,我在这一行代码中收到运行时错误1004,“Columns(col).NumberFormat=“0”,在phonenumbers子部分。如果我注释掉这一行,我在下一行收到相同的错误。寻求帮助/解释为什么会发生这种情况以及如何解决

谢谢

Option Explicit

Sub DataVerification()
   Dim i As Long
   Dim rw As Long
   Dim col As Long
   Dim rng As Range

'Set cell background color to nothing
ActiveSheet.Cells.Interior.ColorIndex = xlNone

'loop through header row A10:F10 to determine which column needs validation
 For i = 1 To 6
   With Sheets("Sheet2")
      If UCase(.Cells(10, i).Value) = "PHONE NUMBERS" Then
         Call PhoneNumbers
      ElseIf UCase(.Cells(10, i).Value) = "ADDRESSES" Then
         Call Addresses
      ElseIf UCase(.Cells(10, i).Value) = "SUFFIXES" Then
         Call Suffixes
      Else
         MsgBox ("No data entered")
         Exit For
      End If
   End With
 Next i


'Phone numbers text found?
If col = 0 Then
   MsgBox "Phone Numbers Header not found"
   Exit Sub
End If

'Set column format to number
Columns(col).NumberFormat = "0"


'set up the start range, loop until we find an empty cell


'tidy up
Set rng = Nothing

 End Sub

 Sub PhoneNumbers()
Dim i As Long
Dim rw As Long
Dim col As Long
Dim rng As Range


 col = i

 'Set column format to number
 Columns(col).NumberFormat = "0"

 Set rng = Sheets("Sheet2").Cells(11, col)
 Do Until rng = ""
   If Not IsNumeric(rng.Value) Or Len(rng.Value) <> 11 Then

      'highlight cell
      rng.Interior.ColorIndex = 3 'red
   End If

   'get next row
   Set rng = rng.Offset(1, 0)
  Loop
 End Sub
选项显式
子数据验证()
我想我会坚持多久
变暗rw为长
暗色如长
变暗rng As范围
'将单元格背景色设置为“无”
ActiveSheet.Cells.Interior.ColorIndex=xlNone
'循环通过标题行A10:F10以确定需要验证的列
对于i=1到6
附页(“第2页”)
如果UCase(.Cells(10,i).Value)=“电话号码”,则
电话号码
ElseIf UCase(.Cells(10,i).Value)=“ADDRESSES”然后
呼叫地址
ElseIf UCase(.Cells(10,i).Value)=“后缀”然后
调用后缀
其他的
MsgBox(“未输入数据”)
退出
如果结束
以
接下来我
'找到电话号码文本?
如果col=0,则
MsgBox“未找到电话号码标题”
出口接头
如果结束
'将列格式设置为数字
列(列)。NumberFormat=“0”
'设置起始范围,循环直到找到空单元格
“收拾
设置rng=无
端接头
子电话号码()
我想我会坚持多久
变暗rw为长
暗色如长
变暗rng As范围
col=i
'将列格式设置为数字
列(列)。NumberFormat=“0”
设置rng=板材(“板材2”)。单元格(11,col)
直到rng=“”
如果不是数字(rng.Value)或Len(rng.Value)11,则
'突出显示单元格
rng.Interior.ColorIndex=3'红色
如果结束
“到下一排
设置rng=rng偏移量(1,0)
环
端接头

在代码中,列为零。列从索引1开始,请尝试以下操作:

  Col = 1
'Set column format to number
Columns(col).NumberFormat = "0"

这是因为您正在使用
col=i
,但
i
此时等于
0
(因为您尚未初始化它)。没有索引为
0
的列要修复此问题,您可以修改
sub
以接受参数:
sub-PhoneNumbers(i长度)
,然后按如下方式在循环中调用它
调用PhoneNumbers(i)
。但是不要忘记从
PhoneNumbers
sub中删除
Dim i