Avatar billede Mhej Nybegynder
01. maj 2010 - 12:26 Der er 4 kommentarer

Fejlmeddelelse (STOP) fra Datavalidering til Combobox (ActiveX) i Excel2007

Jeg er helt ny i Visual Basic men har gennem koder fundet på nettet og optagede macroer fået bikset nedenstående kode sammen som laver en Kombinationsboks med Datavalideringsliste (så jeg får flere forslag vist i listen og kan begynde at skrive og den selv foreslår noget fra valideringslisten).

Den virker rigtig fint, men når man taster noget der ikke står på valideringslisten tillader den desværre at der er fejl, selvom jeg under Datavalidering-Fejlmeddelelse har angivet STOP og fejlmeddelse.

Er der en måde jeg kan skrive en STOP-fejlmeddelelse (med forklaring) ind i min VB kode, så jeg er sikker på at der ikke bliver skrevet ugyldige navne?

Jeg håber at nogen kan hjælpe! :)

'=========================================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Set ws = ActiveSheet
On Error GoTo errHandler

If Target.Count > 1 Then GoTo exitHandler

Set cboTemp = ws.OLEObjects("GodkendteNavne")
  On Error Resume Next
If cboTemp.Visible = True Then
  With cboTemp
    .Top = 10
    .Left = 10
    .ListFillRange = ""
    .LinkedCell = ""
    .Visible = False
    .Value = ""
  End With
End If

  On Error GoTo errHandler
  If Target.Validation.Type = 3 Then
    'if the cell contains a data validation list
    Application.EnableEvents = False
    'get the data validation formula
    str = Target.Validation.Formula1
    str = Right(str, Len(str) - 1)
    With cboTemp
      'show the combobox with the list
      .Visible = True
      .Left = Target.Left
      .Top = Target.Top
      .Width = Target.Width + 15
      .Height = Target.Height + 5
      .ListFillRange = ws.Range(str).Address
      .LinkedCell = Target.Address
    End With
    cboTemp.Activate
  End If

exitHandler:
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  Exit Sub
errHandler:
  Resume exitHandler

End Sub
'====================================
'Optional code to move to next cell if Tab or Enter are pressed
'from code by Ted Lanham
Private Sub GodkendteNavne_KeyDown(ByVal _
        KeyCode As MSForms.ReturnInteger, _
        ByVal Shift As Integer)
    Select Case KeyCode
        Case 9 'Tab fylder ud
            Selection.autoFill Destination:=ActiveCell.Range("A1:G1"), Type:= _
        xlFillSeries
    ActiveCell.Range("A1:G1").Select
        Case 13 'Enter
            ActiveCell.Offset(1, 0).Activate
        Case Else
            'do nothing
    End Select
End Sub
'====================================
Avatar billede friiiiis Novice
02. maj 2010 - 21:17 #1
hmmm...

kompliceret program...

Du bliver nødt til selv af debugge din applikation og finde ud af hvor (altså, i hvilken linie og i hvilke komponenter) fejlen opstår - derefter kan vi/jeg nok hjælpe når problemet er blevet lidt mere indkredset...

Prøv at gøre din kode mindre og mindre så der til sidst kun er de få kodeliner hvor fejlen opstår -

OK?
Avatar billede Mhej Nybegynder
03. maj 2010 - 09:24 #2
Hej - tak for dit svar, men jeg må vist hellere uddybe. Koden virker fint - den gør præcis som den skal, men for at andre brugere kan bruge det excelark uden at taste forkert data (hvilket vil medføre fejl i autoudfyld) ( xlFillSeries)) vil jeg gerne ha at der popper en advarsel op til dem, hvis det navn de taster ikke er valideret, og gerne helt forbyder dem at skrive forkert (Stop).

Ved en almindelig datavaliderings liste som er indbygget i excel (uden makro) kan man vælge om der skal komme info/advarsel/stopskilt op med info om at der er tastet forkert, men når man bruger en comboboksvalidering (som giver mulighed for at overskue flere rækker i listen og for at man kan taste i rullelisten) overruler den den almindelige validering, så derfor leder jeg efter en makrokode, der med udgangspunkt i datavalideringen kan give en advarsel, hvis der er tastet ugyldigt.

Håber at det giver mening?
Avatar billede friiiiis Novice
03. maj 2010 - 17:38 #3
jeg melder pas... det tror jeg ikke jeg kan hjælpe dig med...
Avatar billede pejsen Nybegynder
28. marts 2012 - 12:16 #4
ændre den linie:
.ListFillRange = ws.Range(str).Address
til
.ListFillRange = str
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
Kurser inden for grundlæggende programmering

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