Range.Find (String) не работает - PullRequest
0 голосов
/ 29 мая 2018

У меня есть следующая электронная таблица: [Данные в столбцах AQ и почти 3000 строк] [1]

У меня есть раскрывающийся список на другой странице, на котором есть ячейка для имени / режима / сдвига, и ясоздавая переменную для каждого.По какой-то причине, когда я меняю поле в раскрывающемся списке, я получаю ошибку «91».Когда я использую комбинацию всех элементов в выпадающем списке, которые находятся в 1-й позиции, макрос работает просто отлично.Проблема всегда, когда я меняю либо DC / Mode / Shift.DC - это строка, Mode - это String, а Shift - это целое число.

Каждый Dim Search / Dim FindRow был своей собственной функцией сквозного просмотра, но объединял все.Любая помощь будет высоко ценится !!!

Ниже мой код:

Sub DailyRouteInput_Button8_Click()
    Dim DC As String

    Worksheets("Daily Route Input").Activate

    Range("U1").Select
    DC = ActiveCell.Value

    ActiveCell.Offset(0, 1).Select
    Mode = ActiveCell.Value

    Range("C5").Select
    Shift = ActiveCell.Value

    Worksheets("Daily Route Master Data").Activate

    (Was new passthrough function)

    Dim SearchRange As Range
    Dim FindRow As Range
    Set SearchRange = Range("A2", Range("A2").End(xlUp))
    Set FindRow = SearchRange.Find(What:=DC, LookIn:=xlValues, lookat:=xlWhole)

    DC = FindRow.Row '---- Here is where the problem is ---------

    Range("A" & DC).Offset(0, 1).Select

    (Was new passthrough function)

    Dim newSearchRange As Range
    Dim newFindRow As Range
    Set newSearchRange = Range("B" & DC, Range("B" & DC).End(xlUp))
    Set newFindRow = newSearchRange.Find(Mode, LookIn:=xlValues, lookat:=xlWhole)

    Mode = newFindRow.Row '---- Here is where the problem is ---------

    Range("B" & Mode).Offset(0, 1).Select

    (Was new passthrough function)

    Dim finalNewSearchRange As Range
    Dim finalNewFindRow As Range
    Set finalNewSearchRange = Range("C" & Mode, Range("C" & Mode).End(xlUp))
    Set finalNewFindRow = finalNewSearchRange.Find(Shift, LookIn:=xlValues, lookat:=xlWhole)

    Shift = finalNewFindRow.Row '---- Here is where the problem is ---------

    Range("C" & Mode).Offset(0, 1).Select

    WeekCheck = ActiveCell.Value
    ActiveCell.Offset(0, 1).Select
    MonthCheck = ActiveCell.Value

1 Ответ

0 голосов
/ 12 июня 2018

Спасибо всем, кто пытался дать мне несколько советов.Я был в состоянии понять это.XlUp был виновником, и я изменил его на xlDown.По этой причине он возвращал пустой объект, потому что я тестировал данные в столбце, над которым ничего не было.Затем я выслушал остальных и установил объектные переменные и смог удалить .copy и сделал то, что изначально намеревался сделать, - увеличить общую скорость возвращаемых результатов с 13 секунд до чуть более 1 секунды.Вы можете найти мой код ниже.Я знаю, что я не вызывал несколько переменных в виде строк или целых чисел, но если вы не предоставите мне какую-либо дальнейшую конструктивную критику, я определенно буду благодарен!

Sub DailyRouteInput_Button8_Click()

Dim nResult As Long
 nResult = MsgBox( _
 Prompt:="Did you save your prior DC/Mode updates to Master?", _
 Buttons:=vbYesNo)
 If nResult = vbNo Then
 Exit Sub
 End If

Dim VL As Workbook
Dim DailyRouteInput As Worksheet
Dim DailyRouteMaster As Worksheet
Dim masterRange As Range
Dim inputRange As Range
Dim DCInput As String
Dim ModeInput As String
Dim SearchRange As Range
Dim FindRow As Range
Dim finalNewSearchRange As Range
Dim finalNewFindRow As Range
Dim newSearchRange As Range
Dim newFindRow As Range


Set VL = ThisWorkbook
Set DailyRouteInput = VL.Sheets("Daily Route Input")
Set DailyRouteMaster = VL.Sheets("Daily Route Master Data")
Set masterRange = DailyRouteMaster.Range("A1:N2545")
Set inputRange = DailyRouteInput.Range("A1:BH57")


DCInput = inputRange.Cells(1, 21)
ModeInput = inputRange.Cells(1, 22)
ShiftInput = inputRange.Cells(5, 3)

DailyRouteMaster.Activate

Set SearchRange = masterRange.Range("A1", Range("A1").End(xlDown))
Set FindRow = SearchRange.Find(DCInput, LookIn:=xlValues, lookat:=xlWhole)
DC = FindRow.Row

Set newSearchRange = Range("B" & DC - 1, Range("B" & DC - 1).End(xlDown))
Set newFindRow = newSearchRange.Find(ModeInput, LookIn:=xlValues, lookat:=xlWhole)
Mode = newFindRow.Row

Set finalNewSearchRange = Range("C" & Mode - 1, Range("C" & Mode - 1).End(xlDown))
Set finalNewFindRow = finalNewSearchRange.Find(ShiftInput, LookIn:=xlValues, lookat:=xlWhole)
Shift = finalNewFindRow.Row

MonthCheck = DailyRouteMaster.Range("E" & DC)

If (MonthCheck = "January") Then
        
        DailyRouteMaster.Range("F" & Shift, "N" & Shift + 3).Copy
        DailyRouteInput.Activate
        inputRange.Cells(5, 26).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 4, "N" & Shift + 7).Copy
        DailyRouteInput.Activate
        inputRange.Cells(5, 39).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 8, "N" & Shift + 12).Copy
        DailyRouteInput.Activate
        inputRange.Cells(5, 52).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        DailyRouteMaster.Range("F" & Shift + 13, "N" & Shift + 16).Copy
        DailyRouteInput.Activate
        inputRange.Cells(14, 26).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 17, "N" & Shift + 20).Copy
        DailyRouteInput.Activate
        inputRange.Cells(14, 39).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 21, "N" & Shift + 25).Copy
        DailyRouteInput.Activate
        inputRange.Cells(14, 52).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        
        DailyRouteMaster.Range("F" & Shift + 26, "N" & Shift + 29).Copy
        DailyRouteInput.Activate
        inputRange.Cells(23, 26).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 30, "N" & Shift + 33).Copy
        DailyRouteInput.Activate
        inputRange.Cells(23, 39).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 34, "N" & Shift + 38).Copy
        DailyRouteInput.Activate
        inputRange.Cells(23, 52).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        
        DailyRouteMaster.Range("F" & Shift + 39, "N" & Shift + 42).Copy
        DailyRouteInput.Activate
        inputRange.Cells(32, 26).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 43, "N" & Shift + 46).Copy
        DailyRouteInput.Activate
        inputRange.Cells(32, 39).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteMaster.Activate
        DailyRouteMaster.Range("F" & Shift + 47, "N" & Shift + 52).Copy
        DailyRouteInput.Activate
        inputRange.Cells(32, 52).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        DailyRouteInput.Activate

    Else
        MsgBox ("Something is Wrong!")
    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...