2016-01-20 2 views
0

Я пытаюсь создать простой скрипт VBA, который откроет конкретный документ Excel, а затем перейдите к определенной ячейке. Текущий код будет работать каждый раз. Я искал и нашел несколько тем и тем, но ничего не разрешил проблему.Откройте специальный документ Excel, затем перейдите к определенной ячейке

Вот код, который я использую.

Dim oApp As Object  
Dim oSheet As Object 

Set oApp = CreateObject("Excel.Application") 
oApp.Visible = True 
oApp.Workbooks.Open "path to excel documents" & [CopperMap] 

Set oSheet = oApp.Worksheets([SpreadSheet]) 

oSheet.Activate 

ActiveCell.Activate 
Range([CellColumn]).Activate 

CopperMap, таблицы и CellColumn столбцы в моей таблице, которые имеют необходимую информацию.

+0

Код должен работать. Проверьте данные из таблицы, которую вы используете в параметрах под отладчиком, совершенно уверен, что проблема там. Или временную замену параметров строковыми константами с именем файла, листом и ссылкой на ячейку. –

ответ

0

Не знаю, почему он не работает все время (не уверен, почему вы активируете активную ячейку - он уже активен).

Я никогда не имел проблем с ниже кода (закомментировать код не является обязательным):

Public Sub Main() 

    Dim oXL As Object 
    Dim oWrkBk As Object 
    Dim oWrkSht As Object 
    Dim oRng As Object 

    Set oXL = CreateXL 
    Set oWrkBk = oXL.workbooks.Open("<path and workbook name>.xlsx") 
    Set oWrkSht = oWrkBk.Worksheets("<sheet name>") 
    Set oRng = oWrkSht.range("A1") 

    'Select the range. 
     'oWrkSht.select 
     'oRng.select 

    'Go to the range. 
     'oXL.Goto Reference:=oWrkSht.range("A1"), Scroll:=True 

    'Do stuff with the range (no need to select it). 
    oRng.Value = "10" 
    MsgBox oRng.Address & " has the value of " & oRng.Value 

End Sub 

Public Function CreateXL(Optional bVisible As Boolean = True) As Object 

    Dim oTmpXL As Object 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'Defer error trapping in case Excel is not running. ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    On Error Resume Next 
    Set oTmpXL = GetObject(, "Excel.Application") 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'If an error occurs then create an instance of Excel. ' 
    'Reinstate error handling.       ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    If Err.Number <> 0 Then 
     Err.Clear 
     On Error GoTo ERROR_HANDLER 
     Set oTmpXL = CreateObject("Excel.Application") 
    End If 

    oTmpXL.Visible = bVisible 
    Set CreateXL = oTmpXL 

    On Error GoTo 0 
    Exit Function 

ERROR_HANDLER: 
    Select Case Err.Number 

     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure CreateXL." 
      Err.Clear 
    End Select 

End Function 
+0

Прежде чем добавить «ActiveCell.Activate», код просто откроет соответствующий документ excel и перейдет на нужный листок, но ничего не будет делать с ячейкой и дал бы мне другой код ошибки. Когда я использовал синтаксис ActiveCell, он начал работать (каждый раз). Когда он отлаживает, он выделяет строку ActiveCell.Activate. Когда я учусь утром, я дам ваш код попробовать! – kuroikenshi

0

Даррен,

Спасибо за предложение. Я на самом деле решил это с помощью своего собственного кода. Я обнаружил, что, находясь в режиме отладки, сценарий будет работать отлично после того, как я нажму кнопку остановки после каждой попытки. Затем я нашел синтаксис «End», который останавливает все макросы. Это закончилось тем, что разрешило проблему, так как теперь я могу запустить скрипт без проблем после ввода «Конец» в конце моего скрипта.

Смежные вопросы