Так что я читал онлайн в разных местах, что я не должен использовать .activate
или команды вроде этого. проблема в моей программе HEAVILY полагается на них.Написание программы без использования .activate/.select. VBA
Позвольте мне рассказать о некотором фоне. Я пишу программу для автоматизации части моей работы. Я уже написал эту часть кода несколько месяцев назад, и она отлично работала. Однако теперь, когда я пытаюсь обновить код, все, что используется для работы, вызывает ошибки. а именно экземпляры ActiveCell.PasteSpecial
. Я читал, что это проблема .activate
. Почему это только вызывает проблему сейчас?
Что касается основного вопроса мне нужен код, чтобы сделать 4 вещи
- получить номер счета от конкретной ячейки.
- активировать текстовую дату «sheet2», скопированную из внешней программы в «A1», и собирать текстовые данные из разных ячеек на «sheet2» на основе вставленных данных.
- активировать собранные данные «sheet1» и получить следующий номер учетной записи.
- Переключение между Excel и другой программой, которая принимает только ввод клавиатуры. Хотя этот шаг раздражает, это не тот шаг, на который мне нужна помощь.
Вот код, который я имею до сих пор. Я знаю, как выполнять большинство шагов, которые я просто потерял, пытаясь сделать это без .activate
.
Sub Macro1()
'
' Macro1 Macro
'
'
'find missing emails
Dim e As Range, Rang As Range
Set Rang = Range("A2:A100")
AppActivate "Microsoft Excel"
Worksheets("Email_List").Activate
Range("A1").Activate
For Each e In Rang
If Not IsEmpty(e.Value) = True Then
ActiveCell.Offset(1, 0).Activate
Sleep 700
ActiveCell.Offset(0, 3).Activate
Sleep 700
If IsEmpty(ActiveCell.Value) Then
ActiveCell.Offset(0, -3).Activate
Sleep 700
ActiveCell.Copy
Sleep 700
AppActivate "Other Program"
Sleep 500
SendKeys "~", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "1", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "2", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "1", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "c ", True
Sleep 700
SendKeys "^v", True
Sleep 7001
SendKeys "^x", True
Sleep 7000
SendKeys "^a", True
Sleep 7000
SendKeys "^c", True
Sleep 7000
AppActivate "Microsoft Excel"
Sleep 500
Worksheets("Data").Activate
Cells.Activate
Cells.Delete
Range("A1").Activate
ActiveCell.PasteSpecial
Sleep 500
If Range("A24").Value = "CONF# NOT FOUND, PRESS <ENTER>" Then
Sleep 700
AppActivate "Other Program"
Sleep 500
SendKeys "~", True
Sleep 700
AppActivate "Microsoft Excel"
Sleep 500
Worksheets("Email_List").Activate
ElseIf Range("A24").Value = "ENTER RESERVATION NUMBER:" Then
Range("D24").Activate
ActiveCell.Value = "=LEFT(A6,6)"
ActiveCell.Copy
AppActivate "Other Program"
Sleep 500
SendKeys "^v", True
Sleep 700
SendKeys "30", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "^x", True
Sleep 700
SendKeys "^a", True
Sleep 700
SendKeys "^c", True
Sleep 700
AppActivate "Microsoft Excel"
Sleep 500
Worksheets("Data").Activate
Cells.Activate
Cells.Delete
Range("A1").Activate
ActiveCell.PasteSpecial
Sleep 500
If Range("A8").Value = "3. E-FOLIO" Then
Sleep 700
AppActivate "Other Program"
Sleep 500
SendKeys ("3")
Sleep 700
SendKeys ("~")
Sleep 700
SendKeys "^x", True
Sleep 700
SendKeys "^a", True
Sleep 700
SendKeys "^c", True
Sleep 700
AppActivate "Microsoft Excel"
Sleep 500
Worksheets("Data").Activate
Cells.Activate
Cells.Delete
Range("A1").Activate
ActiveCell.PasteSpecial
Sleep 700
Range("A21").Copy
Worksheets("Email_List").Activate
ActiveCell.Offset(0, 3).Activate
ActiveCell.PasteSpecial
ActiveCell.Offset(0, -3).Activate
End If
ElseIf Range("A2").Value = "===============================================================================" Then
AppActivate "Other Program"
Sleep 500
SendKeys "30", True
Sleep 700
SendKeys "~", True
Sleep 700
SendKeys "^x", True
Sleep 700
SendKeys "^a", True
Sleep 700
SendKeys "^c", True
Sleep 700
AppActivate "Microsoft Excel"
Sleep 500
Worksheets("Data").Activate
Cells.Activate
Cells.Delete
Range("A1").Activate
ActiveCell.PasteSpecial
Sleep 500
If Range("A8").Value = "3. E-FOLIO" Then
Sleep 700
AppActivate "Other Program"
Sleep 500
SendKeys ("3")
Sleep 700
SendKeys ("~")
Sleep 700
SendKeys "^x", True
Sleep 700
SendKeys "^a", True
Sleep 700
SendKeys "^c", True
Sleep 700
AppActivate "Microsoft Excel"
Sleep 500
Worksheets("Data").Activate
Cells.Activate
Cells.Delete
Range("A1").Activate
ActiveCell.PasteSpecial
Sleep 500
Range("A21").Copy
Worksheets("Email_List").Activate
ActiveCell.Offset(0, 3).Activate
ActiveCell.PasteSpecial
ActiveCell.Offset(0, -3).Activate
End If
End If
Else
ActiveCell.Offset(0, -3).Activate
End If
End If
Next e
End Sub
Любая помощь, которую вы можете предоставить, будет с благодарностью оценена.
Я голосующий, чтобы закрыть этот вопрос как не относящийся к теме, потому что этот вопрос следует задать на [Обзор кода] (http://codereview.stackexchange.com) –
Тогда я снова отправлю этот вопрос. Спасибо, что направили меня в нужное место. – AutomateMyJob
Не могу дождаться, чтобы просмотреть его на CR - увидеть вас с другой стороны! :-) –