Как получить доступ к переменным объекта между 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.