2017-12-19 7 views
0

データベースからいくつかの情報を取得し、ユーザーフォームのリストボックスに表示し、動的行と静的列を持つlsarr()という名前の配列に配置しました。 この配列は、レポートフォルダとは別に保存されたレポートワークブックで使用します。第1に、動的な配列の行によってテンプレートが準備され、レポートは特定の名前で新しいワークブックとして保存されます。 lsarr()がエクスポートされたブックの範囲にコピーするまで、すべて正常に動作します。 iはlsarr()を呼び出すとき、私は、次のようなメッセージをvba excel:テンプレートから作成された別のワークブックで動的配列を使用する

コードがある定義されていない

サブ又は受信機能:これは正常に動作

Private Sub cusbas_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
............... 
............... 
lsarr = soldtable.List 
............... 
............... 
end sub 

Private Sub sales2templ_Click() 

    Dim outpath As String 
    Dim curdate As String 
    Dim repno As String 
    Dim xl3 As Object 
    Dim twb2, wb3 As Workbook 
    Dim i, j, k As Integer 

    Set xl3 = CreateObject("Excel.Application") 
    xl3.Visible = True 
    xl3.Workbooks.Open ActiveWorkbook.Path & "\Templates\Report-Sales.xltx" 
    Set twb2 = xl3.ActiveWorkbook 
    twb2.Sheets("Sales-Report").Activate 
    twb2.Worksheets("Sales-Report").Range("C1").value = custlbl 

     If totalinvpercust > 2 Then 
       For i = 1 To totalinvpercust - 2 
        twb2.Sheets("Sales-Report").Range("A7:G7").EntireRow.Offset(1, 0).Insert 
       Next i 

        For j = 1 To totalinvpercust 
        twb2.Sheets("Sales-Report").Range("A" & j + 6).value = j 
       Next j 

       For k = 0 To totalinvpercust - 1 
       twb2.Sheets("Sales-Report").Range("B" & j + 7).value = lsarr(0, k) 

       Next k 

     Else 
      twb2.Sheets("Sales-Report").Range("A7").value = 1 
      twb2.Sheets("Sales-Report").Range("A8").value = 2 
     End If 

    'On Error Resume Next 
    repno = frm_salesrev.cusbas.Text 
    curdate = Format(Now(), "yyyymmddHhNnSs") 
    outpath = ActiveWorkbook.Path & "\Reports\report" & "-" & repno & "-" & curdate & ".xlsx" 
    twb2.SaveAs Filename:=outpath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, AccessMode:=xlExclusive 

    xl3.ActiveWindow.WindowState = xlMaximized 


    Set twb2 = Nothing 
    Set xl3 = Nothing 
    Set xl2 = Nothing 
    curdate = "" 
    outpath = "" 
end sub 

問題が発生する

twb2.Sheets("Sales-Report").Range("B" & j + 7).value = lsarr(0, k) 

*両方の潜水艦は、同じモジュール内にある*

+1

'lsarr()'? – braX

+0

最初のサブ:dim lsarr()はバリアントredim lsarr(cuschk、6)としてバリアント – hussein5

+0

さて、問題があります。その変数を他の関数に渡す必要があります。その変数はClickイベントであるため、その変数を使用する必要があります。 – braX

答えて

0

点心、それの代わりに、このようなフォーム/モジュールレベルの変数にするサブルーチンの外の変数:あなたが定義した

Dim lsarr() as Variant 

Private Sub cusbas_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    Redim lsarr(cuschk,6) 

    ............... 
    ............... 
    lsarr = soldtable.List 
    ............... 
    ............... 

End Sub 
+1

素晴らしい!それは目を覚ました!以前は効果のないサブ行の最初の行に移動しました! – hussein5

関連する問題