2015-09-01 3 views
0

Я пытаюсь запустить код excel vba внутри доступа vba. Он почти работает, но у меня проблема с функцией замены. Может ли кто-нибудь взглянуть на код ниже и рассказать мне, что не так?excel replace function in acces vba

 Sub test2() 


     Dim lngColumn As Long 
     Dim xlx As Object, xlw As Object, xls As Object, xlc As Object 
     Dim dbs As DAO.Database 
     Dim rst As DAO.Recordset 
     Dim blnEXCEL As Boolean 

     blnEXCEL = False 

     ' Establish an EXCEL application object 
     On Error Resume Next 
     Set xlx = GetObject(, "Excel.Application") 
     If Err.Number 0 Then 
       Set xlx = CreateObject("Excel.Application") 
       blnEXCEL = True 
     End If 
     Err.Clear 
     On Error GoTo 0 
     xlx.Visible = True 

     ' Replace C:\Filename.xls with the actual path and filename 
     ' of the EXCEL file from which you will read the data 
     Set xlw = xlx.Workbooks.Open("Q:\21 Projekty\FlowControl\Flow.xlsx", , True) ' opens in read-only mode 

     ' Replace WorksheetName with the actual name of the worksheet 
     ' in the EXCEL file 
     Set xls = xlw.Worksheets("Flow") 

     ' Replace A1 with the cell reference from which the first data value 
     ' (non-header information) is to be read 
     Set xlc = xls.range("A1") ' this is the first cell that contains data 

With xls 
    .Columns(2).Insert Shift:=xlToRight 
    SelectedColumn = SelectedColumn + 1 

    .Columns(3).Copy _ 
     Destination:=.Columns(1) 

    .Columns(2).Replace What:=" - *", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
'Error there Subscript out of range (Error 9) 


    .Columns(3).Replace What:="* - ", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

    .Columns(2).AutoFit 
    .Columns(3).AutoFit 
Errorhandling: 
    'Application.ScreenUpdating = True 
    'End Sub 
End With 
end sub 
+1

Проверьте такие вещи, как xlToRight, xlByRows, xlPart - Доступ не понимающие их с поздним связыванием. В Excel введите? XlToRight в окно Immediate и он вернется -4161. Используйте номер, который он вам дает. –

+0

Если ваш код работает как есть - похоже, вы установили ссылку на Excel, но используете последнее связывание в коде - вы определяете xlx как объект, а не Excel.Application. –

+0

Большое спасибо, это была настоящая проблема, поэтому мой код в этой части теперь выглядит так: .columns (2) .Replace What: = "* -", Replacement: = "", LookAt: = 2, _ SearchOrder: = 1, MatchCase: = False, SearchFormat: = False, _ ReplaceFormat: = False – Ketyas

ответ

1

Проблема была немного diffrent Заменить функцию в Excel VBA и VBA доступа. Теперь я использую только:

.columns(2).Replace What:=" - *", Replacement:=""

Проблема решена.

EDIT:
Это sholud быть

.columns(2).Replace What:="* - ", Replacement:="", LookAt:=2, _ 
     SearchOrder:=1, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False

+0

На самом деле Даррен дал вам правильный ответ. – Rory