2014-10-03 2 views
-1

Этот код VBA 2007 выполняет эту работу, но только для первого листа, он не перебирает остальные листы рабочей книги (там, где он ищет значение и возвращает ошибку где он не находится на первом листе, но он не должен). Может ли кто-нибудь посоветовать мне, почему? Большое спасибоКод не завершается с помощью рабочих листов

Set sourcewb = Workbooks.Open(Filename:=direccionArchivo) 
chakal = sourcewb.Index 
       guapo = sourcewb.Worksheets.Count 
       For z = chakal To guapo 
        Set ws = Sheets(z) 
         sourcewb.Columns(1).Value = Application.WorksheetFunction.Clean(sourcewb.Columns(1)) 
         Set gCell = ws.Columns("A").Find(what:=IDPEDIDO, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, searchformat:=False) 

          If Not gCell Is Nothing Then 
           'OTHER CODE NOT DISPLAYED 
          end if 
         Next z 

        Set gCell = Nothing 
+0

У вас нет ошибки? sourcewb.columns (1) должен дать ошибку. В книге нет столбцов. Это должно быть ws.columns (1) в нескольких местах. – Barry

+0

ОК, может быть, так как это для (внутри другого), это сработает. – Chakal

+0

Я также думаю, что chakal должен быть 1. Теперь он установлен в индекс рабочей книги, и это не имеет смысла, если chakal используется для прокрутки листов: для z = 1 - sourcewb.worksheets.count. – Barry

ответ

0

Я думаю, что это должно быть так, хотя оно все равно не сработает.

Set sourcewb = Workbooks.Open(Filename:=direccionArchivo) 
chakal = 1 
guapo = sourcewb.Worksheets.Count 
For z = chakal To guapo 
    Set ws = sourcewb.Sheets(z) 

    'This will not work, clean expects a string not a range (a column is a range) 
    ws.Columns(1).Value = Application.WorksheetFunction.Clean(ws.Columns(1)) 


    Set gCell = ws.Columns("A").Find(what:=IDPEDIDO, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, searchformat:=False) 

    If Not gCell Is Nothing Then 
     'OTHER CODE NOT DISPLAYED 
    end if 
Next z 
Set gCell = Nothing 
0

Прежде всего, чистая функция не работает в полной колонке. вам нужно пройти через каждую ячейку в столбце и использовать таблицу work.fetch.clean (cell.value). Во-вторых, вы не использовали правильную объектную модель для рабочего листа, которая является workbook.worksheets.range. Я скорректировал ваш код и следующим образом:

Sub t() 
Dim sourcewb As Workbook 
Dim ws As Worksheet 

Set sourcewb = Workbooks.Open(Filename:=direccionArchivo) 
      guapo = sourcewb.Worksheets.Count 
      For Z = 1 To guapo 
       Set ws = sourcewb.Sheets(Z) 
        endrow = ws.Cells(Rows.Count, 1).End(xlUp).Row 
         For Each cell In ws.Range(ws.Cells(1, 1), ws.Cells(endrow, 1)) 
          WorksheetFunction.Clean (cell) 
         Next cell 
        Set gCell = ws.Columns("A").Find(what:=IDPEDIDO, LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, searchformat:=False) 

         If Not gCell Is Nothing Then 
          'OTHER CODE NOT DISPLAYED 
         End If 
        Next Z 

       Set gCell = Nothing 
End Sub 
Смежные вопросы