子或函数未定义

Mat*_*dge 0 excel vba excel-vba

作为自学成才,我还没有学到有关Excel VBA的所有知识.地狱说实话,我知道一些基本知识,但不是我可能应该做的那么多,所以这个问题虽然可能是一个通用的基本问题,但可能应该知道VBA的人知道,但在我学习我需要的东西的情况下前进......所以我需要一个解释.

什么时候需要定义Sub或Function?为什么需要定义Sub或Function?定义Sub或Function的目的是什么?

我只问,因为这个:

Option Explicit

Sub OpenOrderReportExport()

    Dim wsJL As Worksheet   'Jobs List
    Dim wsPOT As Worksheet  'PO Tracking
    Dim wsTNO As Worksheet  'Tel-Nexx OOR
    Dim wbBK2 As Workbook   'New Workbook
    Dim wsWS1 As Worksheet  'Sheet1
    Dim wsWS2 As Worksheet  'Sheet2
    Dim wsWS3 As Worksheet  'Sheet3


    Set wsJL = Sheets("Jobs List")      'Jobs List
    Set wsPOT = Sheets("PO Tracking")   'PO Tracking
    Set wsTNO = Sheets("Tel-Nexx OOR")  'Tel-Nexx OOR
    Set wbBK2 = Workbook("Book2")       'New Workbook
    Set wsWS1 = Sheets("Sheet1")        'Sheet1
    Set wsWS2 = Sheets("Sheet2")        'Sheet2
    Set wsWS3 = Sheets("Sheet3")        'Sheet3

        Application.ScreenUpdating = False    ' Prevents screen refreshing.
        CurrentFile = ThisWorkbook.FullName
        NewFileType = "Excel Files 2007 (*.xlsx)"
        NewFile = Application.GetSaveAsFilename(InitialFileName:="Open Order Log - " & Format(Date, "dd-mm-yyyy") & ".txt", fileFilter:=NewFileType)

End Sub
Run Code Online (Sandbox Code Playgroud)

为什么需要定义这个子?我把它作为一个标准模块,并设置它,以便一旦按下按钮,我将能够将几页移动到一个新的工作簿,删除空白的工作簿,并从那里使用保存功能你告诉它在哪里保存.

我还有很长的路要走,但我想测试一下保存功能,然后从那里开始,因为对我来说这将是最困难的事情.

所以,如果不解决我的整个难题,我想知道为什么需要定义这样的东西?以及如何定义......如果有人能给出答案,我们将非常感激.

Sid*_*out 5

您的帖子围绕以下问题展开,让我逐一解释.

你的问题

  1. 什么时候需要定义Sub或Function?
  2. 为什么需要定义Sub或Function?
  3. 定义Sub或Function的目的是什么?
  4. 为什么需要定义这个子?

VBA支持两种类型的过程:子过程函数过程.

Sub过程由一系列的语句的,并且可以在许多例如方式执行

Sub Sample()
    MsgBox "Hello Matt Ridge"
End Sub
Run Code Online (Sandbox Code Playgroud)

要么

Sub Sample()
    Sample1 "Hello Matt Ridge"
End Sub

Sub Sample1(s As String)
    MsgBox s
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一方面,VBA 函数返回单个值或可能返回数组.可以从另一个VBA过程调用函数,也可以在工作表公式中使用该函数.例如

Sub Sample()
    Dim Ret As String

    Ret = GreetUser("Matt Ridge")

    MsgBox Ret
End Sub

Public Function GreetUser(User As String)
    GreetUser = "Hello " & User
End Function
Run Code Online (Sandbox Code Playgroud)

也可以在工作表中调用相同的函数.例如,单元格A1具有Matt Ridge和在单元格B1中键入此公式时

=GreetUser(A1)
Run Code Online (Sandbox Code Playgroud)

你将进入Hello Matt RidgeCell B1.请参见下面的快照.

在此输入图像描述

现在看看你的代码.

当你说

    Dim wbBK2 As Workbook 
Run Code Online (Sandbox Code Playgroud)

然后VBA希望你按照enderland的说法相应地设置变量.在您的情况下,VBA正在寻找WORKBOOKS()哪种内置方法.但是当VBA看到WORKBOOK()它无法识别时,它会尝试SUB PROCEDURE在模块中找到它(希望你可能在某处找到它),当它找不到它时,它会弹出该错误.:)

希望这能回答你的问题.