Avatar billede Henry Poulsen Mester
10. april 2020 - 21:15 Der er 10 kommentarer og
2 løsninger

VBA Inputbox placering på skærm

Jeg vil gerne have en inputbox placeret midt på skærmen. Dertil prøver jeg at bruge denne syntax som jeg har fundet på Microsoft Office VBA reference:
Application.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
Udover Left og Top bruger jeg kun Prompt, Title og Type.
Men uanset hvilke værdier jeg sætter i Left og Top, placeres Inputbox 6 cm fra Left og 12 cm fra Top. Jeg bruger 24" skærm.
Hvad er det jeg ikke forstår ??
Avatar billede store-morten Ekspert
10. april 2020 - 22:09 #1
strAns = InputBox("Tast dit navn", "Angiv navn", "Jensen", 1700, 1000)
Avatar billede Henry Poulsen Mester
11. april 2020 - 18:34 #2
Dit forslag virker, jeg er vist faret vild i komma'erne.
Tak for hjælpen
Avatar billede store-morten Ekspert
11. april 2020 - 18:42 #3
Velbekomme 😃
Avatar billede Henry Poulsen Mester
13. april 2020 - 11:27 #4
Må jeg bede om lidt mere Ekspert hjælp?
Din kodelinje placerede Inputboksen lige hvor jeg gerne vil have den.
Men jeg kan kun få koden til at læse Input som tekst. Jeg skal bruge et tal mellem 1 og 99. Jeg  vil gerne sikre mig at det er nemt at komme videre, hvis der klikkes OK uden gyldigt tal.
Koden herunder tester Input, og hvis det ikke er et gyldigt tal kommer straks en ny inputboks.   
Tror du det kan lade sig gøre at flytte Inputboxen med denne koden?
            Sub Vis_Konto() 
            ktnr = Application.InputBox(" Indtast konto numer", " H  M  V ", , , , , , 3)
            If ktnr > 0 And ktnr < 100 Then GoTo næste
            Vis_Konto
næste:
Avatar billede store-morten Ekspert
13. april 2020 - 16:31 #5
Måske:
Sub Vis_Konto()
Dim ktnr As Integer

On Error GoTo fejl:
    ktnr = InputBox(" Indtast konto numer", " H  M  V ", , 1000, 1700)
   
    If ktnr < 0 Then
            MsgBox "Du skal indtaste et tal > 0- prøv igen"
        Exit Sub
    End If
   
    If ktnr > 100 Then
            MsgBox "Du skal indtaste et tal < 100 - prøv igen"
        Exit Sub
    End If

fejl:
    If Err.Number = 13 Then
        MsgBox "Du skal indtaste et tal - prøv igen"
        Exit Sub
    End If
   
MsgBox "Test Slut"
End Sub
Avatar billede store-morten Ekspert
13. april 2020 - 18:44 #6
Eller måske denne er bedre:
Sub Vis_Konto()
Indtast_konto_Nummer:
    ktnr = InputBox(" Indtast konto nummer", " H  M  V ", , 1000, 1700)
 
    Select Case ktnr
    Case 1 To 99
        GoTo Næste
    Case Else
        MsgBox "Du tastede: " & ktnr & vbCrLf & _
        vbCrLf & "Skal være et tal fra 1 til 99"
        GoTo Indtast_konto_Nummer
    End Select
   
Næste:
MsgBox "Du tastede: " & ktnr
End Sub
Avatar billede Henry Poulsen Mester
16. april 2020 - 08:31 #7
Tak for dine forslag. jeg har leget lidt med dem, men jeg kan stadig ikke få Inputboxe til at returnere talværdi. Når jeg skal regne videre på indtastet værdi læses  tal som "string".
Men når jeg vil have vist indtastning  i Msgbox står det som tal.
Det er lidt mere end jeg kan forstå.
Jeg vil indtil videre bruge min egen løsning (#4), og så må jeg leve med at Inputbox til tider dækker nogle tal som jeg gerne vil se. Hvis nødvendigt kan jeg jo med musen flytte Inputboxen.
Tak for din inspiration
Avatar billede store-morten Ekspert
16. april 2020 - 09:39 #8
Hvordan regne du videre på input?

Hvis jeg skriver til en celle:
range("A1") = ktnr
Bliver det et tal?

Hvis jeg beregner: range("A1") = ktnr + 4 så virker det også?
Avatar billede Henry Poulsen Mester
16. april 2020 - 11:05 #9
Med 'Do_Loop' funktionen bruger jeg det indtastede tal til  at søge et kontonummer.
Dit spørgsmål fik mig til at prøve at sætte Inputbox værdi, 'ktnr' i celle [A1] og derefter erklære variabel 'vis'=activecell.value.
Bingo, det virker.
Variablen 'vis' er talformat, og kan bruges til at finde mit kontonummer.
Nu prøver jeg det mere af de kommende dage.
Avatar billede Henry Poulsen Mester
16. april 2020 - 22:24 #10
Nu er koden på plads. Fra Inputbox placeres indtastning i celle A1, variablen ktnr erklæres med værdien i celle A1.
Jeg forstår ikke hvorfor en 'streng' på den måde ændres til tal. Men pyt når det virker.
Det virker med placering af Inputbox midt på skærmen, og fejlkontrollen virker også, så makroen starter forfra hvis der indtastes fejlværdi eller ingenting.

Sub Vis_Konto()
  Application.ScreenUpdating = False
  [A1] = InputBox(" Indtast konto numer", " H  M  V ", , 12000, 8000)
  ktnr = [A1].Value
        If ktnr > 0 And ktnr < 100 Then GoTo næste1
            Vis_Konto
næste1:  -------------

Rigtig mange tak for din inspiration.
Avatar billede store-morten Ekspert
16. april 2020 - 22:34 #11
Det var dejligt, er dog stadig nysgerrig på hvad der sker efter næste1:
Avatar billede Henry Poulsen Mester
17. april 2020 - 20:07 #12
Min kode laver almindelig bogføring for en lille lokal forening.Der indtastes Bilagsdato, og -nr. posteringstekst, beløb og debet- og kreditkontonumre.Konti er godt 100 kolonner der 2 og 2 hører sammen. En makro flytter nu beløbene ud i konti / kolonner som er defineret ved et kontonr.
Med den makro vi har korresponderet om laver jeg et konto udtog på hver konto.
Efter indtastning af kontonr. (dvs. efter næste1:) finder makroen de 2 kolonner der indeholder posteringer på kontoen,  og alle posteringslinjer som indeholder det aktuelle kontonr. Alle øvrige konto-kolonner og posteringslinjer skjules.
Mit færdige resultat er en side som kan udskrives, der indeholder alle specifikationer for f.eks. bankkonto eller kontingentkonto.
Den kan sammenlignes med et kontoudtog fra banken.
Tak for hjælpen.
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