#vba #excel #outlook
#vba #excel #outlook
Вопрос:
Я попытался написать скрипт VBA в Outlook, чтобы увеличить количество ячеек в Excel. Но я не могу установить значение по умолчанию для этой переменной (я использую общедоступную переменную, и строка ячейки должна начинаться с «2»).
Как я могу использовать скрипт VBA в Outlook, чтобы установить вторую строку ячейки (ячейка (2,1) = 1) в Excel в первый раз и увеличить строку ячейки в следующий раз
Вот мой код в Outlook. и когда я ее запустил, она сказала, что «Недопустимая внешняя процедура»
Public count As Integer: count = 2
Sub test()
Dim xlApp As Object
Dim xlWB As Object
Dim xlSheet As Object
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
'Check file open or not, and open it if it isn't opened
If (IsWorkBookOpen("D:Book1.xlsx") = True) Then
Set xlWB = xlApp.Workbooks("Book1.xlsx")
Else
Set xlWB = xlApp.Workbooks.Open("D:Book1.xlsx")
End If
Set xlSheet = xlWB.Sheets("Sheet1")
'Process excel file
xlSheet.Cells(count, 1) = 1
count = count 1
End Sub
Function IsWorkBookOpen(FileName As String) 'function to check excel file is open or not
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function
Ответ №1:
В VBA вы не можете присвоить значение непостоянной переменной вне подпрограммы.
Public count As Integer: count = 2
Вы можете просто инициализировать свою общедоступную переменную с помощью Workbook_Open()
события.
Private Sub Workbook_Open()
counter = 2
End Sub
В качестве альтернативы вы можете использовать GetSettings
и SaveSetting
ссылку: MSDN GetSetting Function
Комментарии:
1. Да, я повторно настраивал это, и я не знаю, как это решить. Если я поступаю, как вы, каждый раз, когда я запускаю макрос, он никогда не будет увеличивать строку ячейки, которая начинается со строки 2
2. Теперь, каждый раз, когда я запускаю макрос, я сталкиваюсь с проблемой, которую я пытался избежать в первый раз: файл Excel всегда повторно открывается при каждом запуске макроса. У вас есть другой способ
3. У меня нет времени объяснять, но смотрите мой обновленный ответ
Ответ №2:
используйте Static
переменные для сохранения их значения между различными запусками одного и того же сеанса Outlook
Sub test()
Dim xlApp As Object
Dim xlWB As Object
Dim xlSheet As Object
Static count As Integer '<-- 'Static' preserves values between consecutive runs
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
'Check file open or not, and open it if it isn't opened
If IsWorkBookOpen("D:Book1.xlsx") Then
Set xlWB = xlApp.workbooks("Book1.xlsx") '<-- 'workbooks()' acctepts only file name and extension
Else
Set xlWB = xlApp.workbooks.Open("D:Book1.xlsx")
End If
Set xlSheet = xlWB.Sheets("Sheet1")
If count = 0 Then count = 2 '<-- 1st time it sets count to 2
xlSheet.Cells(count, 1) = 1
count = count 1 '<-- increment count for next time to be left as it is before writing to xlSheet
End Sub
Комментарии:
1. @Брюс, ты справился с этим?
2. @Bruce, было бы мило с твоей стороны давать отзывы людям, пытающимся помочь тебе. Спасибо