VBA - dziwne zachowanie skryptu w zaleznosci od zmiennej

0

Witam, mam problem ze skryptem VBA w Excelu. Probuje zrobic skrypt ktory pobiera zawartosc folderu i kopiuje zawartosc poszczegolnych plikow i wkleja je do wyszukanej komorki.

Skrypt chcialem odpalic 3 razy dla 3 folderow.

dla folder = "c:\130x70" skrypt dziala idealnie ale kiedy zmienie na folder = "c:\210x100" dostaje blad "Object variable or With block variable not set".

Folder istnieje na 100%, zawiera pliki tego samego typu co poprzedni to znaczy *.html. Nie mam pojecia w czym tkwi blad. Ponizej caly kod:

Sub LoopThroughFiles()
    Dim MyObj As Object, MySource As Object, file As Variant, MyData As String, folder As String, temp As String
   
   'WPROWADZ FOLDER DO IMPORTU PLIKOW
  
   folder = "c:\210x100\"
   
   'Tworzenie tablicy plikow
   file = Dir(folder)
   
   'Petla do kopiowania zawartosci plikow do komrek Excel
   While (file <> "")
        temp = folder & file
         Open temp For Binary As #1
        MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    
    sFile = Left(file, (InStr(file, ".") - 1)) & "_"
    
    Cells.Find(What:=sFile, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
   
 ActiveCell.Offset(0, -1).Select
 ActiveCell.Value = MyData
     file = Dir
  Wend
End Sub
0
  1. nie masz nigdzie warunku na pliki *.html
  2. w której linii masz "Not Set" ?
0
  1. Nie mam warunku ale w folderach nie ma nic oprocz plikow html
  2. Nie dostaje odpowiedzi na ktora linie i dlatego nie wiem na co zwrocic uwage przy rozwiazaniu problemu
0
Sub LoopThroughFiles()
    Dim MyObj As Object, MySource As Object, file As String, MyData As String, folder As String, temp As String
    Dim sFile$
   'WPROWADZ FOLDER DO IMPORTU PLIKOW
 
   folder = "c:\210x100\"

On Error GoTo sub_error
 
   'Tworzenie tablicy plikow
10:   file = Dir(folder)
 
   'Petla do kopiowania zawartosci plikow do komrek Excel
20:   While (file <> "")
30:         temp = folder & file
40:         Open temp For Binary As #1
50:         MyData = Space$(LOF(1))
60:         Get #1, , MyData
70:         Close #1
 
80:         sFile = Left(file, (InStr(file, ".") - 1)) & "_"
 
90:         Cells.Find(What:=sFile, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
 
100:            ActiveCell.Offset(0, -1).Select
110:            ActiveCell.Value = MyData
    
120:            file = Dir
130:    Wend
  
    Exit Sub
sub_error:
MsgBox Err.Description, vbOKOnly, "Błąd w linii: " & Erl
  
End Sub

Poprawiłem deklarację zmiennych, dodałem err handler
Sprawdź teraz, gdzie się wywala... Prawdowpodobnie w90-tej.
Po zakonczeniu analizy wywal labele z numerami linii, bo spowalniaja wykonywanie kodu

0

potencjalny, nietestowany fix

'jest
Cells.Find(What:=sFile, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
'powinno być
Set cell = Cells.Find(What:=sFile, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If not cell is Nothing
  cell.Activate
  ActiveCell.Offset(0, -1).Select
  ActiveCell.Value = MyData
end if

inny ukryty babol jest w linii 80 jeśli będzie plik, który w nazwie nie posiada kropki

0

Mieliscie racje wywalolo w 90 linijce. Dodalem IFa informujacego MsgBoxem jesli cos sie nie bedzie zgadzalo i skrypt sie wykonuje. Dziekuje za pomoc.

  sFile = Left(file, (InStr(file, ".") - 1)) & "_" 
    
    
    If Cells.Find(What:=sFile, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False) Is Nothing Then
    
       MsgBox "Nie znaleziono obrazu: " & sFile
       
       Else
   
   Cells.Find(What:=sFile, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
   
 ActiveCell.Offset(0, -1).Select
 ActiveCell.Value = MyData
End If

1 użytkowników online, w tym zalogowanych: 0, gości: 1