Я никогда не использовал глобальные переменные в VBA, но я понимаю, что глобальные переменные создаются вне функций/sub declarations?Доступ к глобальным переменным в VBA (Excel)
У меня есть глобальная (общедоступная) переменная, объявленная в верхней части модуля, которая затем получает значение 0 подпрограммой внутри того же модуля.
Option Explicit
Public NumNodes As Integer
Sub Inst_Glob_Vars()
NumNodes = 0
End Sub
Эта подпрограмма вызывается при открытии книги (суб вызывается в объекте «ThisWorkbook»), который также будет инстанцирует глобальную переменную и установить значение 0.
Option Explicit
Private Sub Workbook_Open()
Call Inst_Glob_Vars
End Sub
У меня есть кнопка на листе excel, которая при щелчке увеличит эту глобальную переменную. Определение этой кнопки находится в объекте Sheet1.
Private Sub CommandButton2_Click()
'NumNodes = NumNodes + 1
Debug.Print "NumNodes = " & NumNodes 'Debug
End Sub
Нужно ли объявлять глобальные/общедоступные переменные в каждом модуле/объекте, используемом переменной? Каждый раз, когда я нажимаю кнопку, переменная не увеличивается, но при отладке дает значение Null/Blank. Я точно не утверждаю свою глобальную переменную правильно, но не уверен, где я делаю ошибки.
Обновление: здесь обновлена кнопка командной кнопки. Если я прокомментирую второй подзаголовок (Node_Button_Duplication), все работает нормально. Скорее всего, это может быть, что к югу, которая вызывает проблемы ...
Private Sub CommandButton2_Click()
Call Channel_Selection_Duplication
Call Node_Button_Duplication
NumNodes = NumNodes + 1
Debug.Print "NumNodes = " & NumNodes 'Debug
End Sub
Оба Channel_Selection_Duplication и Node_Button_Duplication оба определены в одном отдельном модуле:
Option Explicit
Public Sub Channel_Selection_Duplication()
'
' Description: Macro which duplicates the 'Channel Usage Selection' columns at a specific cell reference
Range("Q8:S8").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("Q8:S8").Select
ActiveCell.FormulaR1C1 = "Channel Usage Selection"
Range("Q8:S52").Select
Range("Q52").Activate
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("Q8:S8").Select
Selection.Interior.ColorIndex = 36
'NumNodes = NumNodes + 1
'Debug.Print NumNodes
End Sub
Public Sub Node_Button_Duplication()
ActiveSheet.Shapes("CommandButton1").Select
Selection.Copy
Range("Q5").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementTop -14.25
End Sub
Вы должны объявить его один раз. Вы можете сделать это в любом модуле :) Пожалуйста, покажите нам код. Также покажите нам, как вы увеличиваете переменную? –