Это мой первый ТАК вопрос, поэтому извиняюсь, если я перейду за борт со Стеной текста / Отсутствие актуальной информации.
Я поддерживаю Macro Excels, созданный бывшим сотрудником для P & L от Market and Sales Rep. Они извлекают данные из других пакетов, которые теперь различаются по формату из-за разных используемых версий. Существует также франкоязычный рынок. Все работает только на английском языке (только), но теперь они хотят, чтобы был включен рынок на французском языке.
Я извлекаю значение из ячейки в нескольких внешних файлах, которые не исправлены, кроме как сопровождающим текстом надписи. Используя Cells.Find
, я ищу английскую фразу и активирую соседнюю ячейку, чтобы скопировать это значение в основной Excel. Это работает.
Теперь они хотят, чтобы версия на французском языке была включена в этот процесс, и я пытался параллельно найти фразы на английском и французском, чтобы найти, какая из них была, и взять одну ИЛИ другую, но я получаю последовательностьи циклические ошибки при попытке решения, найденные в StackOverflow.
Что не так с этим кодом?
Sub FindMonthlyValues(ByVal varFile As String, ByRef MonthlyProfitLine As String, ByRef MonthlyTonnageLine As String, ByRef MonthlyTripNumberRange As String)
Dim CurrentPnL, CurrentPath As String
Dim k, FirstRow, LastRow As Integer
Dim ProfitEn, ProfitFr As Range
'loop through excel files only
Application.ScreenUpdating = False
CurrentPnL = varFile
k = InStr(CurrentPnL, "[") 'find the end position of the default link
CurrentPath = Left(CurrentPnL, k - 1)
CurrentPnL = Replace(CurrentPnL, "[", "")
CurrentPnL = Replace(CurrentPnL, "]", "")
ChDir _
CurrentPath
Workbooks.Open FileName:= _
CurrentPnL
' Find Monthly Profit Line in Initial sheet
Sheets("Initial").Select
Range("A1:AK1").Select
Set ProfitFr = Cells.Find(What:="PROFIT MENSUEL:", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Value
If ProfitFr Is Nothing Then
Set ProfitEn = Cells.Find(What:="Monthly Profit:", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Value
End If
Cells.FindNext(After:=ActiveCell).Activate
ActiveCell.Offset(, 1).Select
MonthlyProfitLine = ActiveCell.Address
Я пробовал три разных решения StackOverflow, но они приводят к кругу разных ошибоккак определено в заголовке.
Я не вижу Option Explicit
в секции кода, которую я изменяю.
Я попытался установить Dim для новых переменных, чтобы держать фразунайдено.
Я попробовал Set [DimName] = Cells.Find(BLAH).Value
из оригинального (и функционального) Cells.Find(BLAH).Activate
.
Я попробовал If [DimName] Is Nothing Then
, но это не имеет значения для ошибок, которыепроизошло в первый Cells.Find
.
Я пытался изменить порядок английского или французского Cells.Find
, но это не имеет никакого значения для ошибок, которые происходят в первый Cells.Find
.
Я пытался сповесив Dim от Range
до String
, но получим только:
"Объект не определен."