Я столкнулся с двумя проблемами, связанными с тем, что я пытаюсь сделать с VBA, касательно области действия и времени жизни переменной.вновь и вновь.Например, целое число, которое определяет столбец как столбец даты, cDate или приложение как приложение.Так как у меня есть большой раздел объявлений, я хотел поместить это в отдельный модуль, используя Global, но это не сработало.Имеет ли значение, как я устанавливаю здесь область действия процедуры?Как я могу это сделать?
Аналогично Q1, как насчет инициализации переменных?В частности, вместо того, чтобы копировать и вставлять один и тот же блок, который находит заголовки столбцов (например, cDate), я поместил его в свою собственную процедуру.Я сталкиваюсь со многими проблемами, пытаясь заставить это работать.Я надеюсь, что это возможно, а может и нет.
Скажите, если вам нужно увидеть код.Скажи мне, что ты хочешь увидеть, и я бросаю это здесь.(PS- Я прошел через Справку VBA, MSDN, Goole и т. Д., И здесь я кое-что не понимаю)
Редактировать: добавить отредактированный код, потому что реальная вещь довольно длинная.Все разделы находятся в отдельных стандартных модулях.Я прочитал, что Глобальные объявления работают только на уровне рабочей книги и ниже, поэтому я также попытался объявить и установить app
, wb
и wrk
как Public
в каждом модуле (здесь не показано): Вот мои объявления:
Option Explicit
Global app As Application
Global wb As Workbook
Global wrk As Worksheet
Global cInvoice As Byte
Global iEndCol As Integer
Global lEndRow As Long
Global x As Integer
Global sString1 As String
Global rng As Range
Private Sub Not_Really_a_sub()
'No code. I read that any declaration needed to be in a module
' with a procedure. I tried it with out the dummy sub also
End Sub
'green text, read me and notes
И сабвуфер, который выполняет вызов:
Dim modulevariables As Integer
Sub Calling_Sub()
'doing things
lEndRow = 1 'blah blah blah
iEndCol = 1 ' blah blah blah
app.Run "'" & ThisWorkbook.Name & "'!Header_Finder"
'Code using cInvoice etc.
End Sub
И искатель заголовка:
Private Sub Header_Finder()
With wb.ActiveSheet
For x = 1 To iEndCol
If InStr(UCase(.Cells(x, 1)), UCase("Invoice")) > 0 Then
cInvoice = x
ElseIf .Cells(1, x) = "next thing" Then
cNextThing = x
End If
Next
End With
End Sub
Спасибо уже.