Как получить доступ к переменным объекта между sub в Access

У меня есть модуль доступа sub(), который создает несколько сотен статистических списков с помощью запросов. Я начал с использования метода набора записей, чтобы создать список, а затем перенести значения в электронную таблицу Excel. Моя проблема в том, что я получаю сообщение об ошибке, что моя процедура не может быть скомпилирована, потому что она слишком велика, больше, чем 64 КБ. Так что все в порядке, если я разделю его на второй сабвуфер в другом модуле. Но из-за моей жизни я не могу ссылаться на объекты во втором подразделе.

Я подозреваю, что могу использовать оператор with, но после просмотра форумов я не могу понять синтаксис, который не выбрасывает и не выдает ошибку.

Я застрял в точке, где ссылка на объекты должна быть в верхней части второго подпункта. Вот код, который у меня есть

    Public Sub SomeSub()


    Dim lngColumn As Long
    Dim xlx As Object, xlw As Object, xls As Object, xlc As Object
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim blnEXCEL As Boolean, blnHeaderRow As Boolean
    Dim sqlMin As Variant
    blnEXCEL = False

   blnHeaderRow = False

    ' Establish an xls app object
    On Error Resume Next
    Set xlx = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
          Set xlx = CreateObject("Excel.Application")
          blnEXCEL = True
    End If
    Err.Clear
    On Error GoTo 0

    ' select True to keep xls visible while program runs
    xlx.Visible = True

    ' Path to file
    Set xlw = xlx.Workbooks.Open("C:\file.xlsx")

    ' Name of worksheet=
    Set xls = xlw.Worksheets("SomeWorksheet")

    Set xlc = xls.range("C5") ' this is the first cell into which data go
    Set dbs = CurrentDb()
    'Table or query or source whose data are to be written into the worksheet
     Set rst = dbs.OpenRecordset("qryCount", dbOpenDynaset, dbReadOnly)
    If rst.EOF = False And rst.BOF = False Then

                .......Lots of code iterations

    Call Module2.SomeSub_part2

    End Sub

Я заканчиваю саб и продолжаю во втором модуле

    Option Compare Database

    Public Sub SomeSub_part2()

    'Im not sure what to put here to reference the objects that are being set 

    'where the code resumes in a second module

    Set xlc = xls.range("AC18") ' this is the first cell into which data go
    Set dbs = CurrentDb()
    'Table or query or source whose data are to be written into the worksheet
     Set rst = dbs.OpenRecordset("qryCount77", dbOpenDynaset, dbReadOnly)
    If rst.EOF = False And rst.BOF = False Then
          rst.MoveFirst
          If blnHeaderRow = True Then
                For lngColumn = 0 To rst.Fields.Count - 1
                      xlc.Offset(0, lngColumn).Value = rst.Fields(lngColumn).Name
                Next lngColumn
                Set xlc = xlc.Offset(1, 0)
          End If
      ' write data to worksheet
          Do While rst.EOF = False
                 For lngColumn = 0 To rst.Fields.Count - 1
                      xlc.Offset(0, lngColumn).Value = rst.Fields(lngColumn).Value
                Next lngColumn
                rst.MoveNext
                Set xlc = xlc.Offset(1, 0)
          Loop

......The rest of the code.....

1 ответ

Решение

Вы можете просто передать эти объекты в качестве аргументов в SomeSub_part2() в вашем первом методе.

Call Module2.SomeSub_part2(xlx, xlw, xls, xlc)

А затем добавьте их в качестве параметров в ваш метод "part 2":

Public Sub SomeSub_part2(xlx As Object, xlw As Object, xls As Object, xlc As Object)
...

Отказ от ответственности: я разработчик C#, но в настоящее время я работаю над переводом проекта, написанного на VBA.

Другие вопросы по тегам