-1

我需要运行宏两次才能正常工作

不知道如何解决

Dim ws As Worksheet
Dim tmp As Worksheet
Dim acct As String

Set ws = Sheets("Booking")
Set tmp = ThisWorkbook.Worksheets.Add
tmp.Activate

On Error Resume Next
AppActivate "BTS", True
On Error GoTo 0
Sleep 1000

On Error Resume Next

SendKeys "MRGN", True 'enter margin
Sleep 500
SendKeys "^", True 'reset
Sleep 500
SendKeys "40911025", True ' enter account number
SendKeys "{F3}", True 'get balance secreen
Sleep 750 'waits X seconds
SendKeys "^{INSERT}", True 'copy
Sleep 100
tmp.Activate

tmp.Range("A1").Select
tmp.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False

        ws.Range("I7") = Trim(Left(tmp.Range("A7"), 13)) 'GetEquity
        ws.Range("I9") = Trim(Left(tmp.Range("A9"), 13)) 'GetMM
        ws.Range("I11") = Trim(Left(tmp.Range("A11"), 13)) 'GetDebt
        ws.Range("I13") = Trim(Left(tmp.Range("A13"), 13)) 'GetL250

Application.DisplayAlerts = False

tmp.Delete

Application.DisplayAlerts = True
Application.ScreenUpdating = True


Sheets("Booking").Activate

它有效,但我需要运行它两次。

4

1 回答 1

0

如果您需要宏循环两次,请在同一模块中设置单独的子程序,然后调用主子程序两次。不过,这是一种蛮力的方式,所以我建议不要经常这样做。

call main_subroutine_name() 
call main_subroutine_name()

但是,您的问题似乎与您粘贴的数据有关。您是否尝试粘贴值,以及您要在哪里粘贴数据?如果您尝试将数据粘贴到“A1”范围内,请尝试:

range("A1").pastespecial ...

由于您已经激活了特定工作表,因此您不需要将工作表指定为要粘贴的区域,而只需引用单元格“A1”,如上所示。

于 2019-08-28T15:12:59.427 回答