2016-06-13 2 views
1

Я не мог найти это нигде. В Visual Basic (excel) я могу нажать F8 и прокрутить каждую строку. Но позвольте сказать, что я хочу начать процедуру sub, а затем, выполнив первые 2 строки, я хотел бы перейти к строке 200. До сих пор я всегда перетаскивал желтую стрелку в нужную строку. Это действительно требует много времени, и мне было интересно, есть ли какая-нибудь команда просто сказать «запустить текущую строку, где выбрано» или что-то еще.Выполнение конкретной строки vba

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

+0

'и быстро переместите желтую выделенную стрелку на нужную строку, что также будет работать, не отвечает ли ваш собственный вопрос? Насколько мне известно, это единственный возможный способ сделать то, что вы просите. – cybermonkey

+0

Почему бы не прокомментировать строки кода, который вы не хотите выполнять? –

+0

@cybermonkey Хм ... не совсем понимаю, как это отвечает на мой вопрос. «Медленное перетаскивание» не является быстрым, и именно поэтому я прошу об этом в первую очередь. –

ответ

1

К сожалению, невозможно выполнить то, что вы просите напрямую.

Однако может закомментируйте строки кода выше код, который вы хотите быть выполнен, например:

Sub Workbook_Open() 
    'Application.DisplayFullScreen = True 
    'Application.DisplayFormulaBar = False 
    'ActiveWindow.DisplayWorkbookTabs = False 
    ''ActiveWindow.DisplayHeadings = False 
    Application.EnableEvents = True 
    Password = "1234" 
    ActiveWorkbook.Protect 
    ThisWorkbook.Protect (Password = "1234") 
End Sub 

Вы могут Используйте GoTo с, но тем не менее это не считается хорошей практикой и может сильно повредить ваш код:

Sub Workbook_Open() 
    GoTo ExecuteCode 
    Application.DisplayFullScreen = True 
    Application.DisplayFormulaBar = False 
    ActiveWindow.DisplayWorkbookTabs = False 
    ActiveWindow.DisplayHeadings = False 
    Application.EnableEvents = True 
    ExecuteCode: 
    Password = "1234" 
    ActiveWorkbook.Protect 
    ThisWorkbook.Protect (Password = "1234") 
End Sub 
+0

Причина для downvote? – cybermonkey

+1

вы, вероятно, дали конкурирующий альтернативный ответ, который не делал так, как это сделал бы другой человек. Уверенный ответ может быть действительным, но это не их действительный ответ! Здесь у вас есть upvote для одного из многих возможных действительных решений. – AndASM

+0

Вы сказали, что он попросил, что невозможно, но вы не можете запустить выбранную строку, щелкнув правой кнопкой мыши и нажав «Установить следующее заявление», когда вы находитесь в режиме отладки, вместо того, чтобы перетаскивать стрелку вниз при прокрутке ? – AndASM

0

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

+0

Меня заставляют ответить за ответ, который я специально попросил OP опубликовать? –

+0

Я был занижен за тот же ответ (опубликовано около 30 секунд, прежде чем вы это сделали) ... похоже, что пользователю не нравится решение «прокомментировать код, который вы не хотите запускать». – cybermonkey

+1

Иногда я чувствую, что люди запускаются на этом сайте. –

3

Щелкните правой кнопкой мыши по строке, в которую вы хотите перейти. В меню выберите Set Next Statement. Это эквивалентно перетаскиванию стрелки на эту линию. (Ctrl-F9 - это горячая клавиша для этого действия.)

Если вы хотите, чтобы он быстро выполнил каждую строку до определенной строки, установите точку останова, затем нажмите «Бег» вместо того, чтобы переходить через код по строкам. Сделайте это, нажав на серое полотно в левой части, где появляется желтая стрелка. Должна появляться темно-красная точка, и линия должна быть выделена темно-красным цветом. Это говорит о том, что визуальный базис останавливается, когда он попадает в эту строку.

Вы также можете прокомментировать строки, начав их с апострофии.

Наконец, вы можете разбить код на подпрограммы и выполнить их независимо друг от друга.

Sub Subroutine1() 
    'This is a commented out line. It does nothing. 
    MsgBox "Do stuff here" 
End Sub 

Sub Subroutine2() 
    Subroutine1 'This will run all the code in subroutine 1 
    MsgBox "Do more stuff here" 
End Sub 

В приведенном выше примере, если вы запустите Subroutine1, вы получите одно окно с сообщением. Если вы запустите Subroutine2, вы получите два окна сообщений.

6

Если у вас есть процедура с 200 лайнерами, которая делает так много вещей, которые вы хотели бы пропустить большую часть, похоже, вам нужно немного реорганизовать.

Извлечь «вещи, которые процедура делает», в свои собственные процедуры Sub и Function областей. Если у вас есть комментарии, напоминающие баннер, которые говорят такие вещи, как '*** do something ***, то это фрагмент, который нужно извлечь в свою собственную процедуру.

Пошаговое, что процедура затем может включать переступая через (Shift + F8) меньшие процедуры, которые делают одну вещь, или сломаться и пропустить вызов в целом.

+0

200 строк необходимы и полезны, однако, для целей тестирования и без создания нового «тестового суб», я просто хочу проверить его часть. –

+6

Позвольте мне в этом сильно сомневаться. Оказывается, что надежный код не проверяется вручную, перейдя через него, но специально написав процедуру «Sub» в выделенном тестовом модуле, который запускает только * этот * код, который вы хотите проверить; если процедура делает еще 20 вещей, нет возможности проверить ее чисто и автоматически. Я не знаю, почему базовые принципы ООП и чистого кода систематически выбрасываются из окна, когда мы говорим о коде VBA, AFAIK VBA так же способна к SOLID и OOP-коду, что и Java или C#. –

+3

Ну, у VBA много причуд, когда речь идет о ООП. Но эти причуды не мешают вам взломать код и написать его чисто! На практике я никогда не видел действительной причины для супердолговой подпрограммы. Только слабые надуманные теоретические ситуации. В конце дня вы можете объединить ряд подпрограмм вместе со всеми вызовами из одной центральной подпрограммы, и в итоге она становится более читаемой и устойчивой, чем одна большая. – AndASM

1

Это то, как я это делаю - в основном, если я знаю, что мой код до строки 200 работает правильно, но я уверен, что между 200-300 и ошибками происходит ошибка до компиляции - прокрутите вниз до строки 200 и отметьте ее (слева от кода). Затем скомпилируйте его - нажмите F5, и он выполнит все до строки 200, после чего вы сможете поочередно проходить каждую линию по отдельности.

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