Копирование данных из / в таблицу Excel с помощью макроса - PullRequest
0 голосов
/ 26 октября 2010

У меня есть приведенный ниже код, который предполагает скопировать данные из файла Excel, который я получил по электронной почте, и вставить его в другой файл в строке с такой же датой.Когда я пытаюсь запустить макрос, появляется сообщение об ошибке.Может кто-нибудь взглянуть на мой код и указать мне, где моя ошибка.Я довольно новичок в кодировании и создании макросов.

Sub CopyDataToPlan()

Dim LDate As String
Dim LColumn As Integer
Dim LFound As Boolean
Dim WS As Worksheet


On Error GoTo Err_Execute

Set WS = Workbooks("McKinney Daily Census Template OCT 10.xls").Sheets("McKinney")


'Retrieve date value to search for
WS = Workbooks("McKinney Daily Census Template OCT 10.xls").Cell("B15").Value

Sheets("Input").Select

'Start at column B
LColumn = 2
LFound = False

While LFound = False

    'Encountered blank cell in row 2, terminate search
    If Len(Cells(2, LColumn)) = 0 Then
        MsgBox "No matching date was found."
        Exit Sub

    'Found match in row 2
    ElseIf Cells(2, LColumn) = LDate Then

        'Select values to copy from "McKinney" sheet
        Sheets("McKinney Daily Census Template OCT 10.xls").Select
        Range("C15:I15").Select
        Selection.Copy

        'Paste onto "Key Indicator" sheet
        Sheets("Input").Select
        Cells(3, LColumn).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False

        LFound = True
        MsgBox "The data has been successfully copied."

    'Continue searching
    Else
        LColumn = LColumn + 1
    End If

Wend

On Error GoTo 0

Exit Sub

Err_Execute:
MsgBox "An error occurred."

End Sub

Ответы [ 2 ]

0 голосов
/ 31 января 2013

Будьте более явными со ссылками. Код работает быстрее и его легче отлаживать:

Sub CopyDataToPlan()
Dim LDate As String
Dim LColumn As Integer
Dim LFound As Boolean
Dim WkbCensus As workbook
Dim WksCensus As worksheet
Dim WkbThis As workbook
Dim WksInput As worksheet

On Error GoTo Err_Execute

Set WkbThis = thisworkbook
Set wksInput = WkbMe.Sheets("Input")
Set WkbCensus = Workbooks("McKinney Daily Census Template OCT 10.xls")
Set WksCensus = Wkb.Sheets("McKinney")

LDate = WksCensus.Cell("B15").Value

LColumn = 2
LFound = False

While LFound = False
    If Len(wksInput.cells(2, LColumn)) = 0 Then
        MsgBox "No matching date was found."
        Exit Sub
    ElseIf wksInput.cells(2, LColumn) = LDate Then
        WksCensus.Range("C15:I15").copy
        wksInput.cells(3, LColumn).pastespecial Paste:=xlValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        LFound = True
        MsgBox "The data has been successfully copied."
    Else
        LColumn = LColumn + 1
    End If
Wend

On Error GoTo 0

Exit Sub

Err_Execute:
     MsgBox "An error occurred."
 End Sub
0 голосов
/ 27 октября 2010

Какая строка выдает ошибку? Кажется, ваша переменная LDate никогда не получает дату. Может быть вместо

WS = Workbooks("McKinney Daily Census Template OCT 10.xls").Cell("B15").Value 

ты хотел написать

LDate = Workbooks("McKinney Daily Census Template OCT 10.xls").Cell("B15").Value 

Все это выглядит довольно длинным и опасным кодом: почему бы не а) получить как дату из вашего входного листа, так и данные, которые вы хотите скопировать (похоже, вы могли бы поместить их в массив с циклом for), а затем b ) найдите ячейку, содержащую нужную вам дату (1 оператор), чтобы получить строку ячейки, которая соответствует требуемой дате, а затем c) зациклите данные из массива на листе.

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