Gå til innhold

Tekstbox til input i Excel


Anbefalte innlegg

Hei!

 

Hvordan lager jeg en tekstbox som skal brukes til input av en dato i Excel - norsk 2000.

 

Datoen er på formen DD.MM.ÅÅÅÅ, og skal brukes til å hente ut de 30 siste datoene fra valgt dato med tilhørende verdier fra en Oracel database. Datoen er lagret i ora_dato i databasen.

 

Tekstboksen skal befinne seg i selve regnearket, og helst inneholde dagens dato når .xls fila åpnes..

 

Er takknemelig for hjelp på området!

Lenke til kommentar
Videoannonse
Annonse

Hei

 

Sett inn en textbox og en commandbutton fra kontrollverktøykassen (ikke skjema-menyen).

Høyreklikk arkfanen på regnearket, velg "Vis kode", lim inn dette:

 

Option Explicit

Dim Dt As Date

Private Sub Worksheet_Activate()
Dt = Date
Me.TextBox1.Text = Format(Dt, "dd.mm.yyyy")
End Sub

Private Sub TextBox1_LostFocus()
Call EnsureDate
End Sub

Private Sub EnsureDate()
Dt = DateSerial(1940, 1, 1)
With Me.TextBox1
On Error Resume Next
Dt = DateValue(.Text)
If Dt > DateSerial(1950, 1, 1) Then
	.Text = Format(Dt, "dd.mm.yyyy")
Else
	.Text = ""
	.Activate
End If
End With
End Sub

Private Sub CommandButton1_Click()
Call EnsureDate
If Dt > DateSerial(1950, 1, 1) Then
MsgBox "Du skrev " & Format(Dt, "dddd d.mmmm yyyy") & vbNewLine & _
	"Her kommer databasekode istedet"
Else
MsgBox "Ugyldig dato"
End If
End Sub

 

Nå kan du skrive inn dato på alle vanlige formater:

3.1.07

3.1

4.mai

1/6-08

osv osv. Ingen årstallsangivelse blir "i år".

 

HTH. Beste hilsen Harald

Endret av Harald Staff
Lenke til kommentar

Er det mulig å få boksen til å vise dagens dato når regenarket åpnes?

 

Og hvordan får jeg til at datoen som er tastet inn "puttes" inn i sql-setningen som er laget med Excel og Microsoft Query?

 

SQL setningen er slik:

SELECT MAALINGER_VIEW.INPUT, MAALINGER_VIEW.DATO_ORA, MAALINGER_VIEW.MALT_VERDI

FROM USER.MAALINGER_VIEW MAALINGER_VIEW

WHERE (MAALINGER_VIEW.INPUT='PUNKT1')

ORDER BY MAALINGER_VIEW.DATO_ORA DESC

 

Verdien skal jo da inn i slutten av SQL-setningen hvis jeg ikek tar helt feil, slik at den tar med både den og DESC i sorteringen.

Den skal hente datoer som er mindre enn eller lik inntastet verdi.

Lenke til kommentar

En annen løsning er muligens å få knappen til å kjøre spørringen med verdien i tekstboksen som kriterie for dato-sorteringen, for så å putte inn resultatet av den spørringen et bestemt sted i Excel-arket..Har aldri drevet noe særlig med akkurat dette så er usikker på hva som fungerer best/er enklest.

Lenke til kommentar

Sånn går det når man stoler på hukommelsen, jeg mente Activate kjørte ved oppstart. Jaja. Putt denne i ThisWorkbook-modulen:

 

Private Sub Workbook_Open()
Sheets("Ark1").TextBox1.Text = Format(Date, "dd.mm.yyyy")
End Sub

 

Skal du hente rett fra basen, så må du sette referanse til ADO. I VB editoren, Tools - References, og velg

Microsoft ActiveX Data Objects 2.x Library

der x er det høyeste tallet du finner, vanligvis 2.8.

 

Så endrer du knappekoden til dette og setter inn riktige navn på database og ark:

 

Private Sub CommandButton1_Click()
Dim cnn As ADODB.Connection
Dim rst As New ADODB.Recordset
Dim SSok As String

Call EnsureDate


If Dt > DateSerial(1950, 1, 1) Then
SSok = "SELECT MAALINGER_VIEW.INPUT, MAALINGER_VIEW.DATO_ORA, MAALINGER_VIEW.MALT_VERDI" & Chr(10) & _
	"FROM USER.MAALINGER_VIEW MAALINGER_VIEW" & Chr(10) & _
	"WHERE (MAALINGER_VIEW.INPUT='PUNKT1') " & _
	"AND MAALINGER_VIEW.DATO_ORA<='" & Format(Dt, "yyyy.mm.dd hh:mm:ss") & "'" & Chr(10) & _
	"ORDER BY MAALINGER_VIEW.DATO_ORA DESC"

Set cnn = New ADODB.Connection
cnn.Open "Driver={Microsoft ODBC for Oracle};Server=Databaseadresse;Uid=username;Pwd=password;"

rst.Open SSok, _
	cnn, adOpenForwardOnly, adLockReadOnly

ThisWorkbook.Sheets("Ark3").Range("A2").CopyFromRecordset rst
DoEvents

rst.Close
Set rst = Nothing

cnn.Close
Set cnn = Nothing

Else
MsgBox "Ugyldig dato"
End If
End Sub

 

HTH. Beste hilsen Harald

Lenke til kommentar
Sånn går det når man stoler på hukommelsen, jeg mente Activate kjørte ved oppstart. Jaja. Putt denne i ThisWorkbook-modulen:

 

Private Sub Workbook_Open()
Sheets("Ark1").TextBox1.Text = Format(Date, "dd.mm.yyyy")
End Sub

 

 

HTH. Beste hilsen Harald

 

 

Denne linja skal legge inn autodato ikkesant? Men boksen er fortsatt blank når arket åpnes..

Lenke til kommentar

Funka vist likevel..hadde klart å endre et par ting som ødela litt..så har endra det tilbake igjen.

 

Men når jeg klikker på knappen får jeg denne feilmeldingen:

Compile error: User defined type not defined

 

Og linja "Dim cnn As ADODB.Connection" merkes blå, og "Private Sub CommandButton1_Click()" blir gul med ei pil forran.

 

Hva er grunnen til det? Kan ikke skjønne at det skal stå feil der?

Endret av tommy_sn
Lenke til kommentar

En ting til..når jeg nå endrer datoen og trykker på knappen - hvis det da ikke er nok verdier etter datoen blir cellene i arket stående med de gamle verdiene fra forrige valgte dato. Hvordan legger jeg inn så den blanker cellene før den henter inn de nye?

 

Dette virker:

Sheets("Ark3").Select

Selection.ClearContents

Men her hopper Excel inn i Ark3..det er ønskelig å stå i samme ark som knappen befinner seg i.

 

Og hvordan kan jeg legge inn at et bestemt område skal blankes?

Dette funker ikke:

Sheets("Ark3").Select

Range("A1:L46").Select

Selection.ClearContents

 

 

På forhånd takk!

Endret av tommy_sn
Lenke til kommentar

Er også ønskelig at endringer som gjøres i dokumentet ved trykk på knappen og endring av teksten i boksen ikke gir spørsmål om lagring..men denne koden fungerer tydeligvis ikke her:

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

ThisWorkbook.Saved = True

End Sub

Lenke til kommentar

Nullene:

 

Sheets("Ark3").Range("D1:D800").Replace What:="0", Replacement:="", LookAt:=xlWhole

 

Er også ønskelig at endringer som gjøres i dokumentet ved trykk på knappen og endring av teksten i boksen ikke gir spørsmål om lagring..men denne koden fungerer tydeligvis ikke her:

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

ThisWorkbook.Saved = True

End Sub

 

Mystisk. Virker her. Men legg Saved = True (eller allerhelst den verdien den hadde før knappetrykket) på slutten av prosedyren din, ikke i Close-eventet. Så oppfører Excel seg normalt etter at du har kjørt.

 

HTH. beste hilsen Harald

Lenke til kommentar

Takk for hjelpen med nullene. Hadde glemt siste argument der med LookAt:=xlWhole, så alt av nuller forsvant..

 

Hvas jeg skriver bare:

Saved = True får jeg feilmelding..

 

Har prøvd å legge inn dette i under alle ark, modul og thisworkbook:

Sub Auto_Close()

ThisWorkbook.Saved = True

End Sub

 

Men får fortsatt spørmål om lagring ved endring av teksten i tekstboksen.

Tekstboksen får jo automatisk opp dagens dato når fila åpnes, og når jeg går tikbae til arket som tekstboksen står i.

Lenke til kommentar
  • 6 måneder senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...