Я пишу макрос VBA в Excel 2010 в файле .xlam.ошибка во время работы надстройки VBA
Когда я пытаюсь запустить его, я получаю эту ошибку:
object variable or with block variable not set
Предполагается поменять местами столбцы в определенной таблице, и когда я запускаю его как только макрос (не в надстройке) его работает отлично. Это мой макрос:
Sub SwapTable(ByVal control As IRibbonControl)
Dim LastCol As Long
Dim LastRow As Long
Dim Swaps As Long
Dim i As Integer
Dim DocumentTitle As String
Dim SearchDetails As String
LastRow = LastRowInOneColumn()
LastCol = LastColumnInOneRow(LastRow)
StartTitlesRow = Find_TitlesRow()
'copy title rows
With ActiveSheet
DocumentTitle = .Cells(StartTitlesRow - 3, 1).Value
SearchDetails = .Cells(StartTitlesRow - 2, 1).Value
End With
'check how many swaps needed
If LastCol Mod 2 = 0 Then
Swaps = LastCol/2
Else
Swaps = (LastCol - 1)/2
End If
'run swap
For i = 1 To Swaps
Call Swap(i, LastCol - i + 1, LastRow, StartTitlesRow - 1)
Next i
'past title rows
With ActiveSheet
.Cells(StartTitlesRow - 3, 1) = DocumentTitle
.Cells(StartTitlesRow - 2, 1) = SearchDetails
End With
Worksheets(1).Columns("A:EE").AutoFit
End Sub
Function LastColumnInOneRow(LastRow As Long) As Long
'Find the last used row in a Column: column A in this example
Dim LastCol As Long
With ActiveSheet
LastCol = .Cells(LastRow, .Columns.Count).End(xlToLeft).Column
End With
LastColumnInOneRow = LastCol
End Function
Function LastRowInOneColumn() As Long
'Find the last used row in a Column: column A in this example
Dim LastRow As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
LastRowInOneColumn = LastRow
End Function
Function Find_TitlesRow() As Long
Dim SearchString As String
Dim StartTitlesRow As Long
SearchString = "ùåøä"
With ActiveSheet
Set cl = .Cells.Find(What:=SearchString, _
After:=.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not cl Is Nothing Then
StartTitlesRow = cl.Row
Else
MsgBox "Could'nt find start row"
End If
End With
Find_TitlesRow = StartTitlesRow
End Function
Function Swap(Col1 As Integer, Col2 As Integer, LastRow As Long, StartTableRow As Variant)
Dim FirstCol As Variant
Dim SecondCol As Variant
Dim temp As Variant
temp = Sheets(1).Range(Cells(StartTableRow, Col1), Cells(LastRow, Col1)).Value
Sheets(1).Range(Cells(StartTableRow, Col1), Cells(LastRow, Col1)).Value = Sheets(1).Range(Cells(StartTableRow, Col2), Cells(LastRow, Col2)).Value
Sheets(1).Range(Cells(StartTableRow, Col2), Cells(LastRow, Col2)).Value = temp
End Function
Какая строка дает ошибку? Что такое 'ActiveSheet', когда вы запускаете его как надстройку? –
it doent show wich line! и «ActiveSheet» является листом таблицы. – ALEXM
Это странно. Обычно местоположение курсора при разрыве макросов даст вам представление о том, какая строка. Повторение: что такое 'ActiveSheet', когда вы запускаете его как надстройку? –