Avatar billede h_s Forsker
17. marts 2010 - 17:27 Der er 8 kommentarer og
1 løsning

Fejl i dropdown når 0 er foranstående

Jeg har en formular hvor jeg har omkring 19000 varenumre (10 cifet), der har  man kan vælge i mellem.
Det er lavet så man kan indtaste og så finder den selv ned til det rigtige nummer efterhånden som der tastes.
Mit problem er foranstående nuller.

Hvis jeg har et varenummer der er "0123456789" fortæller makroen at den ikke findes pga. foranstående nul. Fjerner jeg alle nuller, kan den godt finde den når jeg skriver "123456789".

Jeg har i et tidligere spørgsmål prøvet at få svar på noget af problematikken: http://www.eksperten.dk/spm/873173#reply_7376712

Jeg tror problematikken skal findes i denne makro:

Private Sub cbVarenummer_Change()
On Error GoTo Fejl
lbVarenavn.Caption = cbVarenummer.Column(1)
Exit Sub
Fejl:
'MsgBox "Nummeret findes ikke"
Slangtekst = "Varenummer findes ikke!"
  Tilbageførsel = MsgBox(Slangtekst, vbOKOnly + vbInformation, "Systeminformation")
 
  'Marker hele det indtastede varenummer når det er forkert
    Me.cbVarenummer.SelStart = 0
    Me.cbVarenummer.SelLength = Len(Me.cbVarenummer.Text)
   
    'Sætter lbVarenavn til at være blank
    lbVarenavn = ""
End Sub

Hvad skal jeg gøre?
Avatar billede claes57 Ekspert
17. marts 2010 - 17:37 #1
du fik det råd, at formatere varenummer til 10 cifre. Men det er jo stadig tal, og som sådanne kan de ikke have foranstillede 0.
Du skulle i stedet konvertere hele kolonnens værdier til tekst-format - der vil det virke.
Avatar billede h_s Forsker
17. marts 2010 - 18:50 #2
Hvis jeg i formater celler vælger tekst, har jeg ikke mulighed for at deffiner at der er nuller foran - altså det består af 10 cifre. Hvordan gør jeg det i en makro, så jeg kan gøre det i forbindelse med importeringen af varenumrene fra mit C5?
Her er min import makro:

Sub Status()
'
' Status Makro
' Makro indspillet 19-10-2008 af Henrik Søndergaard

'Ingen blink
Application.ScreenUpdating = False


'MsgBox "Indlæsning af varebeholdning færdig"
        Slangtekst = "Ny indlæsning vil slette den gamle" & vbNewLine
    Slangtekst = Slangtekst & "lagerliste og differenceoptælling!" & vbNewLine
    Slangtekst = Slangtekst & "" & vbNewLine
    Slangtekst = Slangtekst & "Er du sikker?"
        Færdig = MsgBox(Slangtekst, vbYesNo + vbCritical, "Systeminformation")

If Færdig = vbNo Then

Else
'Sletter alt nuværende indhold i Arket "Status"
Sheets("Status").Select
ActiveSheet.Unprotect
    Columns("A:F").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
   
'Indlæser nyt indhold
    Sheets("Status").Select
  'Sti, hvor udlæsningen fra C5 ligger
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Status\Status.txt", _
        Destination:=Range("A1"))
        .Name = "Status_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        '.TextFilePlatform = 865
        .TextFileStartRow = 4
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 9, 1, 9, 1, 9)
        .TextFileFixedColumnWidths = Array(10, 11, 19, 43, 10)
        '.TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

'Indsætter Optalt i celle D1 på Fanen "Status"
        Sheets("Status").Select
        Range("D1").Select
        ActiveCell.FormulaR1C1 = "Optalt"
   
'Sletter sidehovedinformation
    Dim Data As Variant, I As Long
    Data = Range("A2:A" & Range("A65536").End(xlUp).Row)
    For I = 1 To UBound(Data)
        If Not IsNumeric(Data(I, 1)) Then Data(I, 1) = Empty
    Next
    Range("A2:A" & Range("A65536").End(xlUp).Row) = Data
    Range("A2:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete


'-----------SE HER-------------------
'Sørger for at der altid er 10 cifre i varenummer
'Virker pt. ikke
    'Columns("A:A").Select
    'Selection.NumberFormat = "0000000000"
'-------------SE HER SLUT---------------


'Indsætter diffrenceberegning i celle E2:E19000
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Difference"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E19000"), Type:=xlFillDefault

'Sletter indtastning i difference-ark
    Sheets("Difference").Select
    ActiveSheet.Unprotect
    Cells.Select
    Selection.ClearContents
    ActiveSheet.Protect
    Sheets("Forside").Activate
   
'MsgBox "Indlæsning af varebeholdning færdig"
        Slangtekst = "Indlæsning af varenumre færdig!"
        Færdig = MsgBox(Slangtekst, vbOKOnly + vbInformation, "Systeminformation")
ActiveSheet.Protect
Worksheets("Forside").Activate
ActiveSheet.Unprotect
Range("H6") = Now + TimeValue("00:00:00")
ActiveSheet.Protect
'Blink igen
Application.ScreenUpdating = True
End If
End Sub
Avatar billede kabbak Professor
17. marts 2010 - 19:27 #3
brug dette

'Sletter sidehovedinformation
    Dim Data As Variant, I As Long, Nuller As String
    Nuller = "0000000000"
    Data = Range("A2:A" & Range("A65536").End(xlUp).Row)
    Columns("A:A").NumberFormat = "@"
    For I = 1 To UBound(Data)
        If Not IsNumeric(Data(I, 1)) Then
        Data(I, 1) = Empty
        Else
        Data(I, 1) = Mid(Nuller, 1, 10 - Len(Data(I, 1))) & Data(I, 1)
        End If
    Next
    Range("A2:A" & Range("A65536").End(xlUp).Row) = Data
    Range("A2:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete


'-----------SE HER-------------------
'Sørger for at der altid er 10 cifre i varenummer
'Virker pt. ikke
    'Columns("A:A").Select
    'Selection.NumberFormat = "0000000000"
'-------------SE HER SLUT---------------
Avatar billede h_s Forsker
17. marts 2010 - 20:07 #4
Kabbak> Det virker, men kan man lave den krølle, at de varenumre, der har mellem 4 og 9 cifre, bliver fyldt op til 10 cifre med foranstående nuller?
Avatar billede kabbak Professor
17. marts 2010 - 20:25 #5
det skulle koden gøre, som den er nu.
Avatar billede h_s Forsker
17. marts 2010 - 20:34 #6
Kabbak> Allerhelst så denne løsning:
I den tekstfil jeg importer er der foranstående nuller i nogen af varenumrene. Kan man undgå at slette dem ved indlæsning. F.eks. ved at lave dem til tekst allerede inden indlæsning?
Avatar billede h_s Forsker
17. marts 2010 - 20:36 #7
Øh - så virker den ikke efter hensigten - Den sætter nuller på alle varenumre - også dem med 2 cifre! Hvor retter jeg til?
Avatar billede kabbak Professor
17. marts 2010 - 22:57 #8
ok jeg troede at alle skulle have nuller foran.
optag en ny makro, hvor du vælge en ny import, og vælg at denne kolonne, med varenumre, skal være tekst, det kan du vælge under importen,
Avatar billede h_s Forsker
18. marts 2010 - 18:29 #9
God ide Kabbak!

Eller man kan ændre:
.TextFileColumnDataTypes = Array(1, 9, 1, 9, 1, 9)

Til

.TextFileColumnDataTypes = Array(2, 9, 1, 9, 1, 9)

2 må være = tekst!

Tak for hjælpen endnu engang!
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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