Установить общедоступную переменную по умолчанию в первый раз и увеличить ее в следующий раз?

#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, было бы мило с твоей стороны давать отзывы людям, пытающимся помочь тебе. Спасибо