【问题标题】:vba- If else statement within a for loopvba-for循环中的if else语句
【发布时间】:2020-07-13 22:40:30
【问题描述】:

我想添加以下删除包含 0 的行

    If Cells(intFile, "CU") = "0" Then           
        Sheet1.Rows(r).EntireRow.Delete    
    End If    

到我下面的代码。

   If CDate(rst(3)) >= Date Then

       For intCount = 0 To rst.Fields.Count - 1
           strHold = strHold & rst(intCount).Value & "|"

目前在“细胞”ElseIf Cells(intFile, "CU") = "0" Then 我收到编译错误:未定义子或函数。 我应该放什么而不是Cells

我的参考:https://msdn.microsoft.com/en-us/library/752y8abs.aspx

【问题讨论】:

  • 函数调用与传递的参数一起被分析(搜索 overloading 概念)。我猜你用错误的参数集调用了正确的函数。
  • 这是 [access-vba] 还是 [excel-vba]?您正在使用 CurrentDB 这是 MSAccess VBA 和 Cells 这是 Excel VBA。
  • @YowE3K 似乎是对的。您很可能正在尝试使用 Excel 的单元格函数而不引用 Excel。
  • @YowE3K 您可以通过顶部的 Option Compare Database 语句判断它是访问权限,用户需要添加引用然后完全限定 Excel 对象 - 而且看起来用户正在打开一个 csv文件,但不使用 Excel 这样做,而是将其作为文本文件打开:Open strFilePath For Output As #intFile

标签: ms-access vba


【解决方案1】:

这里的问题是 Visual Basic 有很多“风格”,它们不能互换。

您的应用程序在 MSAccess 中运行,并且将具有特定适用于该环境的某些对象、函数等。 Cells 对象特别适用于 MS Excel 环境,因此 Access VBA 不了解 Cells 对象是什么。

(并且您提到的文档是关于 VB.Net 的语法 - 但您正在查看的特定主题 在所有这些不同版本的“Visual Basic”中都被视为相同。但是从该网页确实可以看出,If 语句中的 Then 是 VB.Net 中的可选关键字,而在 VBA 中是必需的,因此即使是这样一个基本的编码片段也有一个区别。)

如果您更改您的代码

If CDate(rst(3)) >= Date Then
ElseIf Cells(intFile, "CU") = "0" Then
    Sheet1.Rows(r).EntireRow.Delete

成为

If CDate(rst(3)) >= Date And rst(98) <> 0 Then

我相信你会做你想做的事,即排除第 4 个字段(3,由于零基数)在今天之前的所有记录,并排除第 99 个字段为 0 的所有记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多