Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的VBA IsNumeric函数有什么问题?_Vba_Excel_Excel 2016 - Fatal编程技术网

我的VBA IsNumeric函数有什么问题?

我的VBA IsNumeric函数有什么问题?,vba,excel,excel-2016,Vba,Excel,Excel 2016,我找不到这段代码有什么问题,每次我尝试将其更改为我认为会更好的代码时,它都会显示为错误。非常感谢您的帮助 这是代码,它专门用于isnumeric函数的使用,我正在Mac上使用Excel 2016 Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") Set i = 1 Set n = 1 Do While ws1.Cell(i, "F") <&

我找不到这段代码有什么问题,每次我尝试将其更改为我认为会更好的代码时,它都会显示为错误。非常感谢您的帮助

这是代码,它专门用于isnumeric函数的使用,我正在Mac上使用Excel 2016

Dim ws1 As Worksheet
Dim ws2 As Worksheet



Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")

Set i = 1
Set n = 1

Do While ws1.Cell(i, "F") <> "End"
Num1 = ws1.Cell(i, "F")
    If IsNumeric(Num1.value) <> False And Num1 <> ""
        Set ws2.Cell(n, "B") = ws1.Cell(i, "F")
        n = n + 1
        End If
    Next i
Dim ws1作为工作表
将ws2设置为工作表
设置ws1=图纸(“图纸1”)
设置ws2=图纸(“图纸2”)
集合i=1
设置n=1
Do While ws1.Cell(i,“F”)“End”
Num1=ws1.单元(i,“F”)
如果IsNumeric(Num1.value)为False且Num1为“”
设置ws2.Cell(n,“B”)=ws1.Cell(i,“F”)
n=n+1
如果结束
接下来我

也许您根本不需要VBA。对于非vba解决方案,在Sheet2单元格B1中输入此公式,并根据需要向下拖动任意多行(在Sheet1列F中)

=IF(AND(NOT(ISNUMBER(Sheet1!F1)),Sheet1!F1=“”),Sheet1!F1“”)

对于VBA解决方案,我对您的代码进行了一些清理,以消除许多语法错误。此外,请注意以下事项:

  • 始终在模块中使用
    选项Explicit
    ,并声明所有变量类型
  • 始终使用变量限定对象
  • (1和2是最佳实践,但不是必需的。忽略某些内容可能会产生意外的结果)

    选项显式
    '... 子名称。。。
    将wb设置为工作簿
    将ws1设置为工作表
    将ws2设置为工作表
    Dim Num1作为变体
    设置wb=ThisWorkbook'或工作簿(“myBook”)
    设置ws1=wb.Sheets(“Sheet1”)
    设置ws2=wb.Sheets(“Sheet2”)
    暗淡的i一样长,n一样长
    i=1'无需“设置”数字整数
    n=1
    Do While ws1.Cells(i,“F”)“End”
    Num1=ws1.Cells(i,“F”).Value2'将其设置为单元格的Value2属性
    如果不是IsNumeric(Num1)和Num1“”,则从变量中删除.Value
    ws2.Cells(n,“B”).Value=ws1.Cells(i,“F”).Value'将Cells Value属性设置为等于每个。。。同样,Set在这里不起作用
    n=n+1
    i=i+1'也需要增加i
    如果结束
    Loop'不是Next I,因为您使用的是Do While循环
    
    Num1
    中删除
    .value
    ,除非通过
    Dim Num1作为范围集Num1=ws1*显式`将Num1设置为范围对象。单元格(i,“F”)
    无需设置变量。使用
    next
    而不是
    loop
    关闭
    do while
    。您不需要递增
    i
    。您不需要
    false
    。。。编辑:噢,
    下一个i
    不是你如何递增的,而是
    i=i+1
    你如何处理
    n
    。如果你设置了表格,你不应该限定这本书吗?@findwindow-是的,这真的是最佳实践。。。正在编辑。谢谢@Jeeped!昨晚睡眠不足!
    Option Explicit
    
    '... Sub Name ...
    Dim wb as Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim Num1 as Variant
    
    Set wb = ThisWorkbook 'or Workbooks("myBook")
    Set ws1 = wb.Sheets("Sheet1")
    Set ws2 = wb.Sheets("Sheet2")
    
    Dim i as Long, n as Long
    i = 1 'no need to "Set" numerical integers
    n = 1
    
    Do While ws1.Cells(i, "F") <> "End"
        Num1 = ws1.Cells(i, "F").Value2 'set this to the value2 property of the cell
        If Not IsNumeric(Num1) And Num1 <> "" 'remove .Value from variable
            ws2.Cells(n, "B").Value = ws1.Cells(i, "F").Value 'set the cells Value property equal to each ... again, Set will not work here
            n = n + 1
            i = i + 1 'need to increment i as well
        End If
    Loop 'not Next I, since you are using a Do While Loop