2015-07-15 2 views
2

Я работаю над интерфейсом сбора данных для Excel 2010. Я не могу понять синтаксис для передачи нескольких аргументов локальной переменной Application.OnTime.Множественные аргументы переменной для Application.OnTime

http://markrowlinson.co.uk/articles.php?id=10 является хорошим примером для одной переменной в качестве аргумента, но объяснение того, как экстраполировать это на несколько переменных, мне не ясно.

У кого-нибудь есть краткое объяснение правильной вложенности символов " и ' при передаче нескольких аргументов локальной переменной?

Редактировать: Пример кода будет выглядеть так: Application.OnTime Now + TimeSerial(0, 0, 5), "'runScheduledReport """ & iArg1 & "","" & iArg2 & "" "" & iArg3 & "" ""'". Я понимаю, что мы используем двойную кавычку в качестве escape-символа внутри строки, но не можем реально определить порядок передаваемых строк.

+2

что ссылки на страницы, кажется довольно всеобъемлющим - почему бы не добавить свой точный случай использования и существующий код на свой вопрос, так что есть что-то конкретное работать с? –

+0

В основном, ваш макрос должен быть строкой, поэтому, если у вас есть несколько аргументов, вы окружите все в одинарных кавычках. Если вам нужно использовать полные кавычки в своих аргументах, просто используйте 2 вместо 1. '' 'MyMacro' "StringParameter" "," Other String Parameter "" '"' – user1274820

+0

Начало = '' '' End = ''" «Все остальное просто думает отдельно. Двойные кавычки = Одиночные кавычки. – user1274820

ответ

2

вы должны учитывать следующие ограничения:

  • макрос вы хотите позвонить должен находиться в модуле. Когда вы хотите позвонить ему из другой книги, он должен быть общедоступным.
  • Вы не можете использовать скобки для вызова макроса, как если бы вы делали с функцией или sub с параметрами, наиболее вероятно. При использовании скобок Excel будет жаловаться на то, что макрос не существует
  • Я не пробовал функцию, но в любом случае никто не может работать с возвращаемым значением, поэтому определите свой метод как суб.
  • вы должны использовать aposthophs инкапсулировать имя макроса
  • вы должны использовать кавычки, чтобы инкапсулировать строки и значения даты, либо с CHR $ (34) (напоминает мне старые времена) или просто дважды котировки
  • вы можете переходить целые без кавычек, я не пытался парный
  • отдельных аргументов запятой
  • порядка аргументов должны соответствовать порядку аргументов в методе

прилагается код :

Option Explicit 

Sub Test() 
    Dim strTest1 As String 
    Dim strTest2 As String 

    strTest1 = "This is test1" 
    strTest2 = "This is test2" 

    Application.OnTime Now + TimeSerial(0, 0, 1), "'CallMeOnTime """ & strTest1 & """,""" & strTest2 & "'" 
    Application.OnTime Now + TimeSerial(0, 0, 1), "'CallMeOnTime " & Chr$(34) & "Test" & Chr$(34) & "," & Chr$(34) & "Test" & Chr$(34) & "'" 
    Application.OnTime Now + TimeSerial(0, 0, 1), "'CallMeOnTime2'" 
End Sub 
Public Sub CallMeOnTime(strTest1 As String, strTest2 As String) 
    MsgBox ("test1: " & strTest1 & " test2:" & strTest2) 
End Sub 

Public Sub CallMeOnTime2() 
    MsgBox ("CallMeOnTime2") 
End Sub 
+1

Спасибо (+) за полный рабочий пример! Но вы написали: «Когда вы хотите называть это из другой книги, она должна быть общедоступной» - ** not ony so **! Если вы хотите установить параметры, вызываемая функция должна быть общедоступной даже в том же модуле ** (я потратил 2 часа на undersand) И далее ... Текст 'Now + TimeSerial (0, 0 , ** 1 **) 'несколько избыточно. Я знаю - все это пишут.Но достаточно «Now + TimeSerial (0, 0, ** 0 **)». Более того - этот пример работает для меня даже с такими: «Application.OnTime Now», «CallMeOnTime», «& strTest1 &», «", "" и strTest2 & "'" ' –

0

Просто хотел добавить дополнительный пример, который я нашел полезным, со ссылкой на this post on MrExcel.

Application.OnTime с несколькими аргументами различных типов (String и Integer)

Dim testName As String 
Dim counter As Integer 

... 

' String then Integer argument 
Application.OnTime Now + TimeValue("00:00:02"), "'TestSub """ & testName & """, " & counter & " '" 

' Integer then String argument 
Application.OnTime Now + TimeValue("00:00:02"), "'SubTest " & counter & ", """ & testName & """ '" 
Смежные вопросы