VBA Find и Offset - PullRequest
       2

VBA Find и Offset

0 голосов
/ 12 марта 2019

Я пытаюсь найти клетку, которая, как я знаю, есть, но всегда говорит, что ее нет.Rng = Ничего

Set ws = Worksheets("Sheet1")

ws.Cells.UnMerge
Range("A1").Select

Set Rng = ws.Cells.find(What:="31/1/2019", After:=ActiveCell, 
        LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

Range(Selection, Selection.Offset(0, 9)).Select
Selection.Copy

Workbooks("Other.xlsm").Activate
ActiveWorkbook.Sheets("Sheet1").Select
Range("A1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial xlValues
Workbooks("Other.xlsx").Close SaveChanges:=False

Ответы [ 3 ]

1 голос
/ 12 марта 2019

Код ищет строку "31/1/2019", и эта строка не отображается как дата в Excel.Чтобы представить его как дату, измените название месяца и дня следующим образом: "1/31/2019":

Sub TestMe()

    Dim rng As Range

    Set rng = Worksheets(1).Cells.Find(What:="1/31/2019", After:=ActiveCell, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)

    If Not rng Is Nothing Then MsgBox rng.Address

End Sub

Конечно, есть более эффективные способы сделать это, например, написать What:=DateSerial(2019, 1, 31)и не заботясь о том, что на первом месте, а что на втором (как в решении Гэри.)

Чтобы узнать, как форматировать даты и Excel и искать их, посмотрите здесь:

1 голос
/ 12 марта 2019

Рассмотрим:

Dim d As Date
d = DateSerial(2019, 1, 31)
Set Rng = ws.Cells.Find(What:=d, After:=ActiveCell, _
    LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

(возможны другие ошибки)

0 голосов
/ 13 марта 2019

На что следует обратить внимание в будущем: когда вы пытаетесь использовать дату в качестве критерия, вы должны указывать дату внутри #, а не "".Ваш VBA автоматически изменит дату в соответствии с форматом, установленным для вашей системы.

Например, если я введу следующее:

If ActiveCell.Value = #31/1/2018# Then
    a = 1
ElseIf ActiveCell.Value = "31/1/2018" Then
    a = 1
End If

Компилятор АВТОМАТИЧЕСКИ изменит его наthis:

If ActiveCell.Value = #1/31/2018# Then
    a = 1
ElseIf ActiveCell.Value = "31/1/2018" Then
    a = 1
End If

Очевидно, это не поможет, если вы ищете 1 февраля / 1 февраля 19 февраля ... но это помогает в даты, которые не могут существовать.

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