2017-02-07 2 views
0

Ниже код работает нормально и делает то, что я хочу сделать. Но когда я использую его как Add-In для работы на всех других книгах, он говорит subscript out of range.Код не работает как «надстройка или персональный XLSB» [тот же код отлично работает в книге, где он был создан]

Возможно, существует путаница, связанная с объектом, или надстройка путает ту книгу, на которую ссылается.

Я новичок в vba и прошу всех вас помочь.

Sub mac_3() 
Dim xlsname As String 


Dim d As VbMsgBoxResult: d = MsgBox("Would you like to add record?" & vbNewLine & vbNewLine & "(Esc/Cancel to add something.)", vbYesNoCancel + vbQuestion, "Details!") 
If d = vbNo Then 
    Sheets("MPSA").Range("a13").Value = "Record is not available." 
    Sheets("MPSA").Range("a13").Font.Bold = True 
    ActiveWorkbook.Save 
    GoTo savefile 
    Exit Sub 
End If 
If d = vbCancel Then 
    Dim myValue As Variant 
    myValue = Application.InputBox("Non-Transactional number!", "Please paste number[separate with comma ,]:") 
    If myValue = False Then 
    Exit Sub 
    Else 
    Sheets("MPSA").Range("a13").Value = "Dataot available for : " & myValue 
    Sheets("MPSA").Range("a13").Font.Bold = True 
    ActiveWorkbook.Save 
    GoTo savefile 
    Exit Sub 
    End If 
End If 

On Error GoTo Cleanup 
Application.DisplayAlerts = False: Application.EnableEvents = False: Application.ScreenUpdating = False 

Sheets("MPSA").Range("a14:ac14").Value = Array(_ 
"ACCOUNT NAME", " ACCOUNT NUMBER", "AGE", "ENTITY NAME", "GROUP", _ 
"ITEM NUMBER", "ITEM NAME", "COMPONENT", "QUANTITY", "SUBSCRIPTIONS", _ 
"QUANTITY", "QUANTITY", "NUMBER", "ITEM NAME", _ 
"PART NUMBER", "PART NAME", "EDITION", "TYPE", "VERSION", "USAGE", _ 
"LIMIT", "NAME", "TART DATE", "END DATE", "ASSET STATUS", _ 
"CATEGORY", "ACCOUNT TYPE", "METHOD", "CENTER") 

Sheets("MPSA").Range("a14:ac14").Font.Name = "Calibri" 
Sheets("MPSA").Range("a14:ac14").Interior.ColorIndex = 24 
Sheets("MPSA").Range("a14:ac14").Font.Bold = True 
Sheets("MPSA").Range("a14:ac14").Borders.LineStyle = xlContinuous 
Sheets("MPSA").Columns.AutoFit 


Dim Target_Path: Target_Path = Application.GetOpenFilename 

Do While Target_Path <> False ' <-- loop until user cancels 
    Dim Target_Workbook As Workbook: Set Target_Workbook = Workbooks.Open(Target_Path) 

    Target_Workbook.Sheets(1).Cells.WrapText = True 
    Target_Workbook.Sheets(1).Cells.WrapText = False 

    Target_Workbook.Sheets(1).Range("A1").CurrentRegion.Offset(1).Copy _ 
     ThisWorkbook.Sheets("MPSA").Range("a1000000").End(xlUp).Offset(1) 
    Target_Workbook.Close False 

    ActiveWorkbook.Save 
Dim e As VbMsgBoxResult: e = MsgBox("Another Record?", vbYesNo + vbQuestion, "Next details!") 
    If e = vbNo Then 
    ThisWorkbook.Save 
    GoTo savefile 
    Exit Sub 
    End If 
    'If e = vbYes Then 

Target_Path = Application.GetOpenFilename  
Loop  
GoTo savefile 

savefile: 
Application.DisplayAlerts = False  
xlsname = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)ActiveWorkbook.SaveAs Filename:="C:\Users\" & Environ$("username") & "\Desktop\New Folder\" & xlsname & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 

Cleanup: 
If Err.Number <> 0 Then MsgBox "Something went wrong: " & vbCrLf & Err.Description 
Application.DisplayAlerts = True: Application.EnableEvents = True: Application.ScreenUpdating = True 
End Sub 
+3

Вы всегда должны квалифицироваться лист ссылки на объект рабочей книги - не полагайтесь на ActiveWorkbook, как вы думаете, это должно быть. https://stackoverflow.com/questions/28439376/what-is-the-default-scope-of-worksheets-and-cells-and-range/28439984#28439984 Если это не проблема, тогда вам нужно быть более конкретным где именно происходит ошибка. –

+0

У всех других книг есть листы с правильным названием MPSA? – Shmukko

+0

@TimWilliams Я пробовал это, я не знаю, проблема, нормально код работает нормально. – Ashwendra

ответ

0

Проблема решена сейчас. Как было предложено @tom, Add-In был смущен, о котором рабочий лист, чтобы вставить значения в.

Ну я определил еще одну переменную с помощью Dim Source_Workbook as WorkbookSet Source_Workbook as ActiveWorkbook

Спасибо всем вам :)

Смежные вопросы