Inputbox voorzien van vaste tekst

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
901
Beste Forumleden,

Ik ben bezig om een inputbox te programmeren waar een deel van het antwoord al vooringevuld is.

Code:
If Range("b142") = "" Then
   Range("b142") = InputBox("Je bent je naam vergeten deze kun je hier alsnog vermelden!")
End If

In cel A1 staat de vaste tekst: "Mijn naam is: ".

Nu is mijn vraag of voornoemde al in het antwoord kan worden opgenomen zodat de gebruiker, na de dubbele punt, alleen zijn of haar naam hoeft in te vullen en dat dan op positie B142 uiteindelijk het volgende komt te staan: "Mijn naam is: Jan Jansen"

Alvast hartelijk dank.
Groet, Robert
 
Zo:
Code:
If Range("b142") = "" Then
   Range("b142") = Range("A1") & " " & InputBox("Je bent je naam vergeten deze kun je hier alsnog vermelden!")
End If
 
Ben je bekend met:

Application.Username
Environ("Username")

Waarom een gebruiker laten invullen wat al bekend is (of zou moeten zijn) ?
 
Probeer dit eens:
Code:
Sub GetUserFullName()
Dim MyObj As Object, objItem As Object
    
    If Range("b142") = "" Then
        On Error Resume Next
        Set MyObj = GetObject("WinMgmts:").instancesOf("Win32_NetworkLoginProfile")
        If Err.Number <> 0 Then
          MsgBox "WMI has not been installed, code will be terminated...", vbExclamation, "Windows Management Instrumentation"
          Range("b142") = "Geen gebruiker gevonden"
          Exit Sub
        End If
        For Each objItem In MyObj
            MyMsg = MyMsg & "User Full Name: " & vbCrLf & vbCrLf & objItem.FullName
        Next
        MsgBox MyMsg, vbInformation, "User Full Name ....   (Haluk ®)"
        Range("b142") = ""Mijn naam is: " & InputBox("Je bent je naam vergeten deze kun je hier alsnog vermelden!", "Gebruikersnaam:", MyMsg)
    End If
End Sub
 
Allen bedankt.

Ik begrijp jullie reactie dat er andere, zelfs eenvoudiger, mogelijkheden zijn. Deze techniek wil ik vervolgens ook gebruiken dat de gebruiker een standaard tekst, vanuit een bepaalde situatie snel kan wijzigen zonder dat deze op zoek moet gaan waar deze tekst staat.

Het is verder niet de bedoeling om een Username te gebruiken (ik ben hier trouwens van op de hoogte). Wat ik in feite bedoel, is dat in het invulgedeelte standaard de tekst: "Mijn naam is: " komt te staan (oftewel wat er in A1 staat). Het is niet de bedoeling dat dit boven het invulscherm wordt vermeld. Degene die zijn/haar naam vult, schrijft dit achter voornoemde. Vervolgens staat op positie B142 bijv. "Mijn naam is: Jan Jansen"
 
Dat kan niet in een Inputbox, wel in een Textbox in een userform.
Je zou dat dus zelf kunnen maken.
Positioneer de cursor dan met:
Code:
TextBox1,Text = "Mijn naam is: "
TextBox1.SelStart = 14
 
Laatst bewerkt:
Bedankt voor jouw antwoord, het is al een tijd geleden dat ik mij daarmee bezig heb gehouden en ik ga kijken of het mij lukt.

Allen, nogmaals heel erg bedankt.
 
Je zou nog de Default waarde van de InputBox kunnen gebruiken, maar dat vind ik niet handig omdat die tekst dan ook meteen geselecteerd is en dus bij een toets aanraking verdwijnt.
Code:
Application.InputBox("", "De titel", "Mijn naam is: ")
 
Ik vind het een zeer onhandige werkwijze, want zelfs áls je er in slaagt om de cursor vast áchter de tekst "Mijn naam is: " te zetten: wie houdt de gebruiker tegen om die tekst zelf te verwijderen, en alleen de naam in te vullen? Als het je bedoeling is om deze vaste tekst altijd in de cel te krijgen, hou die tekst dan weg uit de inputbox en voeg hem middels code toe. Zoals in mijn voorbeeld (wat je overigens totaal schijnt te negeren, maar ach, dat ben ik wel gewend ;))
Code:
Range("B142") = "Mijn naam is: " & InputBox("Vul hier je naam in!", "Gebruikersnaam:", "Typ je naam")
 
Als je doelt op de code in #4, dan zou ik die ook negeren. (wat een breiwerk) Zal wel handig werken in Jouw forum?
 
Allen nogmaals heel hartelijk dank. Het antwoord bij #8 (Edmoor) heeft mij, in deze casus, enorm geholpen en doet precies wat voor mij de bedoeling was. Dat neemt niet weg dat de andere oplossingen ook zeer welkom zijn geweest en ik deze in andere situaties zeker goed kan gebruiken.
 
Als je doelt op de code in #4, dan zou ik die ook negeren. (wat een breiwerk)
Met ‘vrienden’ zoals jij heb ik geen vijanden meer nodig. Deze code werkt toevallig wél, ook al heb ik ‘m niet zelf bedacht. Ik zou zeggen: doe het dan vooral beter. Langs de kant staan roepen doen er al genoeg…
 
Octa@

Ik heb je code in 34 getest en bij mij komen er 4 regels tevoorschijn met 'User Fullname is:'
Helaas komt er 4 keer geen waarde voor 'fullname' tevoorschijn.

Heb jij een verklaring ? (zowel voor het aantal als voor het ontbreken van de fullname.)
 
Die code zal alleen in een domain (Active Directory) omgeving werken, dus als er een echt netwerk profiel is.
Het aantal keren komt door de For loop.
Deze is nodig om alleen het tweede item uit MyObj te gebruiken, de eerste is Null.

Dat kan dan makkelijker op deze manier:
Code:
Sub a()
    Range("B142") = Application.InputBox("", "De titel", "Mijn naam is: " & GetUserFullName)
End Sub

Function GetUserFullName() As String
    Dim WSHnet, UserName, UserDomain, objUser

    Set WSHnet = CreateObject("WScript.Network")
    UserName = WSHnet.UserName
    UserDomain = WSHnet.UserDomain
    Set objUser = GetObject("WinNT://" & UserDomain & "/" & UserName & ",user")
    GetUserFullName = objUser.FullName
End Function

Overigens ook alleen in een Domein omgeving.
 
Laatst bewerkt:
Heb jij een verklaring ? (zowel voor het aantal als voor het ontbreken van de fullname.)
Nee, helaas. Ik heb de code ook maar gevonden op een site en getest, en bij mij deed-ie het prima. Hij loopt wel een paar keer, dus dan kan hij inderdaad wel vaker gevuld worden natuurlijk. Al verwacht ik maar één username voor een gebruiker.
 
Alhoewel het niet de vraag van de gebruiker is. Als je de Windows user wil opvragen is hier een code die altijd zou moeten werken:
De declare prtsafe is alleen nodig bij 64 bit systemen

Code:
Option Explicit
    Dim lngerror As Long
'function declarations
Private Declare PtrSafe Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function getOSUserName() As String
On Error GoTo Err_getOSUserName
' Geeft de login naam van Windows
    Dim lngLen As Long, lngX As Long
    Dim strUserName As String
    
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If (lngX > 0) Then
        getOSUserName = Left$(strUserName, lngLen - 1)
    Else
        getOSUserName = vbNullString
    End If
    
Exit_Err_getOSUserName:
    lngerror = 0
    Exit Function

Err_getOSUserName:
    lngerror = 2
    MsgBox Err.Number & ": " & Err.Description()
   
    Resume Exit_Err_getOSUserName
    
End Function
 
@Noella

Wat brengt jouw code anders dan:

Code:
Sub M_snb()
   MsgBox Environ("username")
End Sub
of
Code:
Sub M_snb()
   MsgBox Environ(30)   ' getal afhankelijk van Windowsversie 
End Sub
of
Code:
Sub M_snb()
   MsgBox CreateObject("wscript.network").UserName
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan