0

独学なので、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

このサブルーチンを定義する必要があるのはなぜですか? 私はそれを標準モジュールとして置いており、ボタンを押すと数ページを新しいワークブックに移動し、空白のページを削除し、そこから保存機能を使用できるように設定に取り組んでいます保存する場所を指定します。

先は長いですが、保存機能をテストしてそこから先に進みたいと思っていました。

私の難問全体を解決することなく、なぜこのようなものを定義する必要があるのか​​ を知りたいですか? そして、それをどのように定義する必要があるか...誰かが答えを出すことができれば、それは大歓迎です。

4

3 に答える 3

5

あなたの投稿は次の質問を中心に展開しているので、1 つずつ説明させてください。

あなたの質問

  1. Sub または Function を定義する必要があるのはいつですか?
  2. Sub または Function を定義する必要があるのはなぜですか?
  3. Sub または Function を定義する目的は何ですか?
  4. このサブルーチンを定義する必要があるのはなぜですか?

VBA は、サブ プロシージャ関数プロシージャの 2 種類のプロシージャをサポートしています。

Sub プロシージャは一連のステートメントで構成され、さまざまな方法で実行できます。

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

また

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

Sub Sample1(s As String)
    MsgBox s
End Sub

ここに画像の説明を入力

一方、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

ワークシートでも同じ関数を呼び出すことができます。たとえば、セル A1 にはMatt Ridge、セル B1 にこの数式を入力すると、

=GreetUser(A1)

Hello Matt RidgeセルB1に入ります。以下のスナップショットを参照してください。

ここに画像の説明を入力

今あなたのコードを見ています。

あなたが言う時

    Dim wbBK2 As Workbook 

次に、エンダーランドが言及したように、VBAはそれに応じて変数を設定することを期待しています。WORKBOOKS()あなたの場合、VBAは組み込みのメソッドを探しています。ただし、VBA が認識できないものを検出すると、モジュール内でWORKBOOK()を見つけようとし(どこかで定義した可能性があることを期待します)、見つからない場合はそのエラーをポップします。:)SUB PROCEDURE

これがあなたの質問に答えることを願っています。

于 2012-08-31T23:58:46.983 に答える
3

あなたは問題を誤解しています。

次のコード行は正しくありません。あなたが思っているように、新しいワークブックは作成されません。関数Workbookが存在しません - VBA エディタを実行またはコンパイルしようとすると、関数が存在しないというメッセージが表示されます。

Set wbBK2 = Workbook("Book2")       'New Workbook

に変更します

set wbBK2 = Workbooks.add

新しいワークブックが作成され、参照が に保存されwbBK2ます。Workbookまたは、新しいワークブックを作成しようとしていない場合は、「s」を追加して、開いているワークブックを参照できます。

Set wbBK2 = Workbooks("Book2")       'New Workbook

また、最終的にこれらの変数を文字列としてディメンション化する必要があります。

    Dim CurrentFile as String        
    Dim NewFileType as String
    Dim NewFile as String

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

もう 1 つの注意事項 - 使用する場合

Set wsWS1 = Sheets("Sheet1")        'Sheet1
Set wsWS2 = Sheets("Sheet2")        'Sheet2
Set wsWS3 = Sheets("Sheet3")        'Sheet3

おそらく、これを変更して、他のワークブックのシートを参照することをお勧めします

Set wsWS1 = wbBK2.Sheets("Sheet1")        'Sheet1
Set wsWS2 = wbBK2.Sheets("Sheet2")        'Sheet2
Set wsWS3 = wbBK2.Sheets("Sheet3")        'Sheet3

ワークブックを追加した場合でも、これらのシートへの正しい参照を維持することは非常に役立ちます。

于 2012-08-31T20:29:16.347 に答える
0

問題は、すべての変数を定義する必要があることを意味する OPTION EXPICIT を使用していることです。これを実現し、コードを読みやすくする 1 つの方法は、最初にオブジェクトを定義して設定するときにコロンを行継続として使用することです。

以下の例:

Option Explicit 

Sub OpenOrderReportExport() 

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

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

End Sub 
于 2012-09-02T13:00:42.473 に答える