Avatar billede henriksp Nybegynder
22. juni 2006 - 11:35 Der er 15 kommentarer

Problem: Nul returneres istedet for blank

Med hjaelp fra bl.a. Bak og Oyejo har jeg lavet nedenstaaende macro der henter data i lukkede workbooks i en mappe. (Tak for det Bak og oyejo).
Jeg har dog noget jeg gerne vil have rettet, hvis cellevaerdien er blank (Intet celleindhold) i mine ark, saa returneres der et nul, er det muligt at lave macroen om saa der returneres en blank celle eller alternativt "N/A" for Not available.



Sub GetValuesFromClosedFiles()
  Dim FS As FileSearch
  Dim FilePath As String
  Dim i As Integer, j As Integer, n As Integer, c As Integer
  Dim v As Variant
  Dim Cells2Get()
  Dim sheetNameEnd()
  Dim sheet As String
 
 
  Const Filespec = "*.xls"  'udfyldes af bruger Filtype
  'udfyldes af bruger Startfolder
  FilePath = "C:\test\"
  sheetNameEnd() = Array("0", "i", "ii", "iii", "iv")
 
  'udfyldes af bruger Celler, der skal hentes,
  'NB! EN LINJE(ARRAY) FOR HVERT ARK
  Cells2Get = Array(Array("B10", "C10"), _
                    Array("B11", "C11", "D11"), _
                    Array("B12", "C12"), _
                    Array("B13", "C13"), _
                    Array("B14", "C14"))
 
  Application.ScreenUpdating = False
 
  Set FS = Application.FileSearch
  With FS
    .LookIn = FilePath
    .Filename = Filespec
    .Execute
    If .FoundFiles.Count = 0 Then
      MsgBox ("Ingen filer fundet")
      Exit Sub
    End If
   
    For i = 1 To .FoundFiles.Count
      c = 0
      v = Split(.FoundFiles(i), Application.PathSeparator)
      FilePath = Left(.FoundFiles(i), InStrRev(.FoundFiles(i), _
                                      Application.PathSeparator))
      ActiveCell.Offset(i, 0) = FilePath & v(UBound(v))
     
      For n = 0 To UBound(sheetNameEnd)
        sheet = "part" & sheetNameEnd(n)
        For j = 0 To UBound(Cells2Get(n), 1)
          c = c + 1
          ActiveCell.Offset(i, c) = GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(n)(j))
        Next
      Next
    Next
  End With
 
  Application.ScreenUpdating = False
 
End Sub



Private Function GetValue(path, file, sheet, range_ref)
Dim arg As String
arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(range_ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
Avatar billede oyejo Nybegynder
23. juni 2006 - 17:21 #1
Sist jeg hjalp deg tok du pointene selv,
men jeg får vel prøve å hjelpe deg likevel :-)

Det er ikke sikkert du trenger å endre noe i koden.
I min norske versjon av excel kan jeg gå inn på menyen
Verktøy -> Alternativer og Faneblad Vis
Her kan man fjerne markeringen for Vis nullverdier
Avatar billede henriksp Nybegynder
26. juni 2006 - 12:07 #2
Hej Oyeyo, undskyld jeg lavede en fejl og points selv, jeg vil laegge point til dig i et nyt sporgsmaal.
Ovenstaaende forslag, loeser ikke mit problem, hvis vaerdien virkelig er nul, ideen er at jeg vil skelne mellem nul vaerdi og blank.
Avatar billede henriksp Nybegynder
26. juni 2006 - 12:16 #3
Avatar billede oyejo Nybegynder
26. juni 2006 - 12:35 #4
vi får gjøre et nytt forsøk, hva med denne?

Sub GetValuesFromClosedFiles()
  Dim FS As FileSearch
  Dim FilePath As String
  Dim i As Integer, j As Integer, n As Integer, c As Integer
  Dim v As Variant
  Dim Cells2Get()
  Dim sheetNameEnd()
  Dim sheet As String


  Const Filespec = "*.xls"  'udfyldes af bruger Filtype
  'udfyldes af bruger Startfolder
  FilePath = "C:\test\"
  sheetNameEnd() = Array("0", "i", "ii", "iii", "iv")

  'udfyldes af bruger Celler, der skal hentes,
  'NB! EN LINJE(ARRAY) FOR HVERT ARK
  Cells2Get = Array(Array("B10", "C10"), _
                    Array("B11", "C11", "D11"), _
                    Array("B12", "C12"), _
                    Array("B13", "C13"), _
                    Array("B14", "C14"))

  Application.ScreenUpdating = False

  Set FS = Application.FileSearch
  With FS
    .LookIn = FilePath
    .Filename = Filespec
    .Execute
    If .FoundFiles.Count = 0 Then
      MsgBox ("Ingen filer fundet")
      Exit Sub
    End If
 
    For i = 1 To .FoundFiles.Count
      c = 0
      v = Split(.FoundFiles(i), Application.PathSeparator)
      FilePath = Left(.FoundFiles(i), InStrRev(.FoundFiles(i), _
                                      Application.PathSeparator))
      ActiveCell.Offset(i, 0) = FilePath & v(UBound(v))
   
      For n = 0 To UBound(sheetNameEnd)
        sheet = "part" & sheetNameEnd(n)
        For j = 0 To UBound(Cells2Get(n), 1)
          c = c + 1
          If IsNull(GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(n)(j))) Then
            ActiveCell.Offset(i, c) = ""
          Else
            ActiveCell.Offset(i, c) = GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(n)(j))
          End If
        Next
      Next
    Next
  End With

  Application.ScreenUpdating = False

End Sub
Avatar billede henriksp Nybegynder
03. juli 2006 - 12:17 #5
Jeg har forsoegt, jeg kan ikke faa det til at virke, der kommer stadig nuller. Jeg har ogsaa proevet dit forslag med IsEmpty istedet for ISNull, det virker heller ikke.
Avatar billede oyejo Nybegynder
03. juli 2006 - 12:32 #6
Hva med å sette inn en strek i de tomme cellene?

If IsEmpty (GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(n)(j))) Then
            ActiveCell.Offset(i, c) = "-"
          .....
Avatar billede oyejo Nybegynder
03. juli 2006 - 12:38 #7
Etterpå er det kanskje mulig å benytte noe lignende?
Hvis man ønsker å ta bort strekene etterpå.
....

Range("A5:A6").Cells.Replace What:="-", Replacement:=""
Application.ScreenUpdating = False
End Sub
Avatar billede bak Forsker
03. juli 2006 - 15:56 #8
Du kan ikke skelne mellem 0 og blank. En tom celle vil, med ovenstående makro, altid returnere et 0 og ikke en blank.
Avatar billede bak Forsker
03. juli 2006 - 15:59 #9
Problemet ligger i funktionen GetValue, der bruger en gammel xl4 makro. denne kan ikke skelne mellem 0 og blank
Avatar billede henriksp Nybegynder
04. juli 2006 - 11:12 #10
Tak bak, har du saa et forslag til en ny funktion til erstatning for den gamle?

Private Function GetValue(path, file, sheet, range_ref)
Dim arg As String
arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(range_ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
Avatar billede bak Forsker
04. juli 2006 - 12:24 #11
Jeps, denne laver et rigtigt link til arket vha. en formel.
Hvis du ikke ønsker at have dette link skal du indsætte dette under linien

ActiveCell.Offset(i, c) = GetValue(FilePath, v(UBound(v)), sheet, Cells2Get(n)(j))
ActiveCell.Offset(i, c).value = ActiveCell.Offset(i, c).Value  'ny linie

Private Function GetValue(path, file, sheet, range_ref)
  Dim arg As String
  arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(range_ref).Address(, , xlA1)
  GetValue = "=if(isblank(" & arg & "),""""," & arg & ")" 'IsNull(ExecuteExcel4Macro(arg))
End Function
Avatar billede henriksp Nybegynder
05. juli 2006 - 11:56 #12
Tak Bak det virker fint, lige et par spoergsmaal:
1) Hvorfor har du indsat kommentaren: 'IsNull(ExecuteExcel4Macro(arg))
2) Er det muligt at lave macroen saa der returneres "N/A" for Not available hvis cellen er blank?
Avatar billede bak Forsker
08. juli 2006 - 11:04 #13
1. Kommentaren er bare en forglemmelse fra tidligere experiment.
2. GetValue = "=if(isblank(" & arg & "),NA()," & arg & ")" 'IsNull(ExecuteExcel4Macro(arg))
Avatar billede bak Forsker
08. juli 2006 - 11:05 #14
Soory, glemte det igen :-)
2. GetValue = "=if(isblank(" & arg & "),NA()," & arg & ")"
Avatar billede henriksp Nybegynder
10. juli 2006 - 11:47 #15
Mange tak Bak, det virker fint. Laeg venligst et svar saa jeg kan give dig point.
En anden ting, jeg kunne godt taenke mig at lave en macro der fylder vaerdierne tilbage i mine ark hvis jeg skulle aendre dem. Til dette brug vil jeg saa lave to raekker oeverst med information om i foerste reakke 1) hvilken celle vaerdien kommer fra, og i anden raekke 2) hvilket ark vaerdien kommer fra. Information om navnet paa workbooks kan findes i kolonne A1. Er det muligt at lave noget saadant? I saa fald vil jeg oprette et nyt spoergsmaal med nye points.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester