2016-07-14 4 views
1

Мне нужна помощь в Excel VBA. Я переключаюсь назад и вперед из Excel и другого приложения и копируя, вставляя в Excel из другого приложения. У меня уже есть этот процесс, но мне нужен совет о том, как я могу вставить любую ячейку в настоящий момент, вставить вкладку вправо, а в конце этой строки перейти вниз по одной строке, а затем вернуться в колонку D. На самом деле, вот список точного процесса я нуждающейся произойти внутри приложения Excel:VBA в Excel - вставка в активную ячейку, а затем вкладку

  1. [Номер Format] Вставить в настоящее время активной ячейки (всегда будет находиться в D:D колонке)
  2. Tab правый один клетка
  3. [Формат даты: "d-ммм"] Сегодняшняя дата
  4. Tab правой
  5. [Текст] Вставить
  6. Tab правой
  7. [Учет] P асте
  8. Tab Right
  9. Введите букву «X» в этом столбце
  10. Введите одну строку вниз, начиная назад в D колонке.

Между всеми этими шагами у меня есть большая часть этого кода, который был обнаружен, который взаимодействует с другим приложением. Но у меня есть один вопрос в отношении, что и - В этом приложении я бегу это заявление:

With ATC.ActiveSession (ATC просто ссылается тип библиотеки приложения для взаимодействия с другими приложениями)

В отличие от я заканчиваю заявление With каждый раз, когда приложения переключаются назад и вперед, копируя и вставляя, что мне нужно будет использовать в качестве оператора with для использования библиотеки excel?

Пример того, что я не хочу, чтобы это произошло:

Sub New_ATS() 

    Set ATC = GetObject(, "ATWin32.AccuTerm") 

    AppActivate "AccuTerm 2K2" 
    With ATC.ActiveSession 
     .InputMode = 1 
     .SetSelection 6, 15, 12, 15 
     .Copy 
     .InputMode = 0 
    End With 
    AppActivate "Microsoft Excel" 
     Selection.Paste '(not complete, part of question) 
     Selection.Offset 1, 0 'again, part of the question 
    AppActivate "AccuTerm 2K2" 
    With ATC.ActiveSession 
     .InputMode = 1 
     .SetSelection 14, 3, 20, 3 
     .Copy 
     .InputMode = 0 
    End With 
    AppActivate "Microsoft Excel" 
    ' .... end of partial code (continues on) 
End Sub 

Но вместо этого, хотел бы «цепь» в With заявления, но я не знаю, что заявление, которое я хотел бы использовать, чтобы указать назад Excel VBA. Это то, что я хотел:

Sub New_ATS() 

    Set ATC = GetObject(, "ATWin32.AccuTerm") 

    AppActivate "AccuTerm 2K2" 
    With ATC.ActiveSession 
     .InputMode = 1 
     .SetSelection 6, 15, 12, 15 
     .Copy 
     .InputMode = 0 
     With Excels_Statement '????? 
      AppActivate "Microsoft Excel" 
      Selection.Paste '(not complete, part of question) 
      Selection.Offset 1, 0 'again, part of the question 
      AppActivate "AccuTerm 2K2" 
      With ATC.ActiveSession 
       .InputMode = 1 
       .SetSelection 14, 3, 20, 3 
       .Copy 
       .InputMode = 0 
       With Excels_Statement '???? 
        AppActivate "Microsoft Excel" 
       End With 
      End With 
     End With 
    End With 

    ' .... end of partial code (continues on) 
End Sub 

ответ

1

не установлен AccuTerm, но я думаю, что вы можете вставить в Excel без необходимости активировать его каждый раз. Вместо использования блоков «С» вы можете назначить объектную переменную с минимальным набором символов ... не лучшим способом для именования переменных, но это будет трюк. Объявление переменной определенного типа даст вам доступ к библиотеке Excel.

Вот что я имею в виду ... (частично проверены, так что вы, возможно, придется настроить его немного)

Sub New_ATS() 

    Set ATC = GetObject(, "ATWin32.AccuTerm") 
    Dim Sesh as ATWin32.AccuTerm.Session 'Not sure this exists 
    Dim XL as Excel.Range 

    AppActivate "AccuTerm 2K2" 
    Set Sesh = ATC.ActiveSession 

    Sesh.InputMode = 1 
    Sesh.SetSelection 6, 15, 12, 15 
    Sesh.Copy 
    Sesh.InputMode = 0 

    'AppActivate "Microsoft Excel" - don't need it 
    Set XL = application.activecell 
    XL.PasteSpecial 
    Set XL = XL.offset(0,1) 

    'AppActivate "AccuTerm 2K2" - no need, still active 
    Sesh.InputMode = 1    'Once this is set, do you need to set it again? 
    Sesh.SetSelection 14, 3, 20, 3 
    Sesh.Copy 
    Sesh.InputMode = 0    'Once this is set, do you need to set it again? 

    XL.PasteSpecial 
    XL.NumberFormat = "General"  'Bullet #1 
    Set XL = XL.offset(1,0) 

    '...and so on... 

    XL.PasteSpecial 
    XL.NumberFormat = "d-mmm"  'Bullet #3 
    Set XL = XL.offset(1,0) 

    XL.PasteSpecial 
    XL.NumberFormat = "@"   'Bullet #5 
    Set XL = XL.offset(1,0) 

    XL.PasteSpecial 
    XL.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)"  'Bullet #7 
    Set XL = XL.offset(1,0) 

    XL = "X"       'Bullet #9 

    'When you've reached the end of the row 
    Set XL = XL.offset(1, 4 - XL.Column) 'Since col D = 4 
    'And repeat your procedure 

End Sub